我正在为我的项目锁定系统。我目前正在实施一种锁定多个目标并根据用户输入定向循环的方法。 但是,在使用的时候。似乎对目标对象右侧的目标的检查永远不会更新,这使正确的顺序停滞不前。我不知道为什么会发生这种情况,因为它与更新的左侧代码相同。无论如何,看一看是值得赞赏的,想法更是如此! 第 1 部分:
void ManageTargets()
{
shortDistLeft = Mathf.Infinity;
shortDistRight = Mathf.Infinity;
for (int i = 0; i < availableTars.Count; i++)
{
float dist = Vector3.Distance(transform.position, availableTars[i].transform.position);
if (dist <= shortestDist)
{
shortestDist = dist;
closestLockOnTarget = availableTars[i];
currentTarget = closestLockOnTarget;
}
if(dist >= maxLockDist)
{
lockOn = false;
shortestDist = Mathf.Infinity;
availableTars.Clear();
currentTarget = null;
closestLockOnTarget = null;
PlayerStateManager.instance.camState = 0;
}
if (lockOn)
{
Vector3 relativeEnemyPos = currentTarget.transform.InverseTransformPoint(availableTars[i].transform.position);
var distanceFromLeftTarget = currentTarget.transform.position.x - availableTars[i].transform.position.x;
var distanceFromRightTarget = currentTarget.transform.position.x + availableTars[i].transform.position.x;
if (relativeEnemyPos.x > 0.00 && distanceFromLeftTarget < shortDistLeft)
{
shortDistLeft = distanceFromLeftTarget;
leftLockTarget = availableTars[i];
}
if (relativeEnemyPos.x < 0.00 && distanceFromRightTarget < shortDistRight)
{
shortDistRight = distanceFromRightTarget;
rightLockTarget = availableTars[i];
}
}
}
}
和第 2 部分:
void lockOnLogic()
{
if (lockOn)
{
if (currentTarget == null)
{
camRecenter();
lockOn = false;
}
else
{
PlayerStateManager.instance.camState = 1;
}
if (lockOnMoveL == true) {
lockOnMoveL = false;
if (leftLockTarget != null)
{
currentTarget = leftLockTarget;
}
ManageTargets();
}
if (lockOnMoveR == true){
lockOnMoveR = false;
if (rightLockTarget != null)
{
currentTarget = rightLockTarget;
}
ManageTargets();
}
}
else
{
shortestDist = Mathf.Infinity;
availableTars.Clear();
currentTarget = null;
closestLockOnTarget = null;
PlayerStateManager.instance.camState = 0;
lockOnMoveR = false;
lockOnMoveL = false;
}
}
if your here, thanks for looking ;)