【问题标题】:Run an event when my GameObject has a chosen position in Unity3D当我的游戏对象在 Unity3D 中具有选定位置时运行一个事件
【发布时间】:2021-12-27 18:38:54
【问题描述】:

当我开始关卡时,我的游戏对象(火箭)会飞起来(它是一个 2D 游戏)。

现在我想编写这样的代码,当我的 Rocket 到达例如 (0,0,0) 的位置时会做一些事情,但它不是从 0 开始,而是从 (0,-15,0) 开始)。

我尝试编写代码,但它不起作用,我已经检查过它在 (0,0,0) 处 100% 到达,但我不明白为什么发生这种情况时它不运行我的代码。

我的代码:

public class Flying : MonoBehaviour

{


    public float speed = 5f;
  
  

    private void FixedUpdate()
    {
        

        

        transform.position += new Vector3(0, 1, 0) * (Time.deltaTime * speed);


        //Check if my Rocket arrives at (0,0,0)

        if (transform.position == new Vector3(0,0,0))
        {

            Debug.Log("I'm here!");
            speed = 3f;


        }


    }


}

知道如何解决这个问题吗?

【问题讨论】:

  • 您的对象不太可能恰好击中0,0,0 的位置 .. 我想知道您是如何检查的 .. 但您可能被四舍五入的值愚弄了 ;) .. 您应该使用像 @ 这样的某个范围987654323@ .. 阈值应该是你的对象在一帧内可以移动的距离的最小值,所以大约是speed * Time.deltaTime

标签: c# unity3d position transform gameobject


【解决方案1】:

我用另一个不可见的 GameObject 解决了这个问题,它上面有 Collider2D 和 Rigidbody2D。现在,当我的 Rocket 接触到不可见的 GameObject 时,速度会发生变化。

我希望我可以更轻松地编写代码。

我的最终代码:

public class Flying : MonoBehaviour
{


    public float Speed = 5f;
  

    private void FixedUpdate()
    {
        

        

        transform.position += new Vector3(0, 1, 0) * (Time.deltaTime * Speed)

    }


    private void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.collider.name == "Slow")
        {

            Speed = 3f;
            

        }


    }


}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多