【问题标题】:Object moves slightly past a point that it is supposed to stop (Unity 2D)对象略微移动到应该停止的点(Unity 2D)
【发布时间】:2019-03-05 14:11:17
【问题描述】:

我试图让 Unity2D 中的对象停在特定点。对象将停止,但位置仍将大于/小于我的程序所需的位置。我需要物体停在巡逻点,如果物体已经越过巡逻点,则布尔值为假。我的代码如下:

 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

为了让我的脚本正常工作,我需要enemyLocation 等于巡逻位置。我能做些什么来解决这个问题?提前谢谢!

【问题讨论】:

    标签: c# unity3d boolean operators


    【解决方案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 移出更新循环以进行优化。

    【讨论】:

    • 当我执行此代码时,我的对象抓住移动。将敌人的位置设置为等于夹子如何使其保持在夹子内?另外,我正在使用rigidbody.velocity 来移动对象。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多