我正在尝试使Unity2D中的对象停止在特定位置。该对象将停止,但位置仍大于/小于我程序所需的位置。我需要对象在巡逻点处停止,如果对象已超过巡逻点,则布尔值必须为false。我的代码如下:
private void FixedUpdate()
{
enemyLocation = GetComponent<Transform>();
Debug.Log("Enemy Location: " + enemyLocation.position.x + "Patrol Location: " + patrolList[1].position.x);
if (enemyLocation.position.x >= patrolList[0].position.x && enemyLocation.position.x <= patrolList[1].position.x)
{
inPatrolRange = true;
}
else
{
inPatrolRange = false;
}
// Used for randomness
gameTime = Time.time;
if (inPatrolRange)
{
Patrol();
}
}
控制台的输出如下:
敌方位置:1.527214巡逻位置:1.521
为使脚本正常工作,我需要将敌人位置等于巡逻位置。我该怎么做才能解决此问题?预先谢谢你!
答案 0 :(得分:1)
为了使Transform enemyLocation
停留在巡逻范围内,可以使用Mathf.Clamp
:
float min = patrolList[0].position.x;
float max = patrolList[1].position.x;
float x = Mathf.Clamp(enemyLocation.position.x, min, max);
enemyLocation.position = new Vector3(x, enemyLocation.position.y);
如果您不需要做一些物理方面的工作,请使用Update
而不是FixedUpdate
。您还应该考虑将GetComponent
移出Update循环以进行优化。