後面,剛體、網格導航和動畫基礎部分可能要單分章節來說,今天繼續
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生成一個敵對怪物實體
}