后面,刚体、网格导航和动画基础部分可能要单分章节来说,今天继续
EnemyMovement.cs中注释
void Awake ()
{
player = GameObject.FindGameObjectWithTag ("Player").transform;
playerHealth = player.GetComponent <PlayerHealth> ();
enemyHealth = GetComponent <EnemyHealth> ();
nav = GetComponent <NavMeshAgent> ();
}
void Update ()
{
if(enemyHealth.currentHealth > 0 && playerHealth.currentHealth > 0)
//怪物当前血量和玩家当前血量为0
{
nav.SetDestination (player.position);
//使用enemy上的NavMeshAgent组件在网格导航上把玩家的当前坐标设为移动终点,这是一种unity自打的寻找最短路径的方式
}
else
{
nav.enabled = false;
//跳转到这里,说明玩家或此enemy死亡,把此enemy的NavMeshAgent设为不可用
}
}
然后看下EnemyManager.cs中的注释
这里注意,由于空的物体EnemyManager上帮了3个EnemyManager.cs脚本,只是参数不同,所以三个脚本会同时进行
void Start ()
{
InvokeRepeating ("Spawn", spawnTime, spawnTime);
//在开始后的spawnTime后,每隔spawnTime执行Spawn,有点像定时器
}
void Spawn ()
{
if(playerHealth.currentHealth <= 0f)
//如果玩家血量小于0,即已死亡则直接返回,否则执行后面生成怪物的部分
{
return;
}
int spawnPointIndex = Random.Range (0, spawnPoints.Length);
//这里意思是说使spawnPointIndex等于0到spawnPoints.Length(按配置3个脚本中其都等于1)间的整数,断点测试从来都返回了,因而判断Range(min,Max),不会等于Max的值
Instantiate (enemy, spawnPoints[spawnPointIndex].position, spawnPoints[spawnPointIndex].rotation);
//spawnPoints就是我们建立的3个空的坐标点,为一个新的enemy实体体统位置的,初始朝向信息,这句指在位置spawnPoints[spawnPointIndex].position
= spawnPoints[0].position
,以spawnPoints[0].rotation的转向,按照enemy变量指向的Prefabs生成一个敌对怪物实体
}