Unity:大神看看小弟我的自动炮塔代码有关问题在哪里
Unity:大神看看我的自动炮塔代码问题在哪里
目的:炮塔自动攻击AttackRange内最先进入的有Plater标记的玩家,如果该玩家离开AttackRange,就再选择AttackRange内最近的玩家攻击。
我的代码测试结果是没有玩家进入AttackRange时Target是null,进入后Target在null和该玩家之间迅速切换,请大神看看我错在哪里了啊???
------解决思路----------------------
额,所以说99%的bug自己分析都会找到的~定位到某一行代码后,就一定可以得出结论。
目的:炮塔自动攻击AttackRange内最先进入的有Plater标记的玩家,如果该玩家离开AttackRange,就再选择AttackRange内最近的玩家攻击。
我的代码测试结果是没有玩家进入AttackRange时Target是null,进入后Target在null和该玩家之间迅速切换,请大神看看我错在哪里了啊???
function FixedUpdate () {
if (target == null)
{
target = FindClosestPlayerInAttackRange ();
return;
}
if (!CanSeeTarget ())
{
target = null;
return;
}
}
function FindClosestPlayerInAttackRange () : Transform {
var gos : GameObject[] = GameObject.FindGameObjectsWithTag("Player");
var closest : GameObject;
var distance = Mathf.Infinity; //无限距
var position = transform.position;
var curDistance:float;
for (var go : GameObject in gos) {
var diff = (go.transform.position - position);
curDistance = diff.sqrMagnitude;
if (curDistance < distance) {
closest = go;
distance = curDistance;
}
}
if(closest != null && distance<=attackRange)
{
return closest.transform;
}
return null;
}
function CanSeeTarget () : boolean
{
if (Vector3.Distance(transform.position, target.position) > attackRange)
return false;
var hit : RaycastHit;
if (Physics.Linecast (transform.position, target.position, hit))
return hit.transform == target;
return false;
}
------解决思路----------------------
额,所以说99%的bug自己分析都会找到的~定位到某一行代码后,就一定可以得出结论。