对象稍稍移动到应该停止的位置(Unity 2D)

时间:2018-09-30 04:32:43

标签: c# unity3d boolean operators

我正在尝试使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

为使脚本正常工作,我需要将敌人位置等于巡逻位置。我该怎么做才能解决此问题?预先谢谢你!

1 个答案:

答案 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循环以进行优化。