Unity Protype2学习记录

中级难度:动物的横向与纵向生产

先看看横向生成的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
using UnityEngine;

public class SpawnManager : MonoBehaviour
{
public GameObject[] animalPrefabs;

private float spawnRangeX = 20;
private float spawnPosZ = 20;

private float startDelay = 2;
private float spawnInterval = 1.5f;

//public int animalIndex;

// Start is called before the first frame update
void Start()
{
InvokeRepeating("SpawnRandomAnimal", startDelay, spawnInterval);
}

// Update is called once per frame
void Update()
{
//if (Input.GetKeyDown(KeyCode.S))
//{
//if (animalIndex < 0)
//{
// animalIndex = 0;
//}
//else if (animalIndex >= animalPrefabs.Length)
//{
// animalIndex = animalPrefabs.Length - 1;
//}
//SpawnRandomAnimal();
//}
}

/**
* 随机生成动物
*/
private void SpawnRandomAnimal()
{
int animalIndex = Random.Range(0, animalPrefabs.Length);
Vector3 spawnPos = new Vector3(Random.Range(-spawnRangeX, spawnRangeX), 0, spawnPosZ);
Instantiate(animalPrefabs[animalIndex], spawnPos, animalPrefabs[animalIndex].transform.rotation);
}
}

游戏是在XZ这个坐标平面上的,X轴是横向的,Z轴是纵向的,所以你纵向生产的位置由spawnPosZ决定,纵向生成范围由spawnRangeX决定。类似的,如果要支持横向生成,那么要定义一下子两个类型的变量:

  1. 横向生成动物的范围,这个左右两边可以共用一个;
  2. 横向生成动物的位置,这个左右两边的需要分别定义,因为值不同;

问题点:

  1. 增加了Rigidbody属性后的Game Object,需要判断是否需要使用它的Gravity属性;
  2. 如果在运行时发现不对,效果不符合预期,记得切换下相机视角;
  3. 碰撞体检测问题:子弹由玩家发射,子弹存在碰撞检测,敌人也存在检测,所以要区别好子弹碰撞到玩家和敌人碰撞到玩家。可以在玩家Game Object上建一个子物体,该问题用于给子弹进行位置生成。

困难难度:添加游戏交互逻辑

简单的交互玩法:

  1. 定义一下玩家的初始生命值为3,初始分数为0;
  2. 动物超出边界前没有被投喂,则玩家生命值-1,投喂到动物,则分数加5;