我正在製作一個統一的塔防遊戲,但我卡住了。我希望我的槍或炮塔面對敵人,直到他們超出範圍,但每0.5秒後它會更新並面對其範圍內的另一個敵人,儘管第一個敵人也在範圍內。需要幫助在c#遊戲代碼
這裏是我的代碼:
void Start()
{
InvokeRepeating("UpdateTarget", 0f , 0.5f);
}
void UpdateTarget()
{
GameObject[] enemies = GameObject.FindGameObjectsWithTag(enemyTag);
float shortestDistance = Mathf.Infinity;
GameObject nearestEnemy = null;
foreach (GameObject enemy in enemies)
{
float distanceToEnemy = Vector3.Distance(transform.position, enemy.transform.position);
if (distanceToEnemy < shortestDistance)
{
shortestDistance = distanceToEnemy;
nearestEnemy = enemy;
}
}
if (nearestEnemy != null && shortestDistance <= range)
{
target = nearestEnemy.transform;
}
else
{
target = null;
}
}
也許一開始你應該檢查是否已經有一個積極的目標,如果是的話,不要改變它。例如:if(target!= null && Vector3.Distance(transform.position,target.transform.position)<= range)return;'(注意:我不知道Unity,所以這可能不是正確的代碼,但你會明白......) –
是的,這聽起來像是他們不希望它不斷地改變目標,所以保持一個「主動目標」變量將是一個好方法。另外,我強烈建議添加一個包圍炮塔範圍的箱子對撞機,並用它來限制你必須搜索的敵人數量。 https://unity3d.com/learn/tutorials/topics/physics/colliders-triggers可能是有趣的。 Unity內置了強大的空間索引功能,所以很愚蠢的是不利用它。如果甚至有內置的「最近鄰居」算法,我也不會感到驚訝。 – drsimonz