【问题标题】:Determing object location in Unity 3D在 Unity 3D 中确定对象位置
【发布时间】:2011-02-12 15:35:28
【问题描述】:

我一直在慢慢学习 Unity 3D。我正在尝试制作迷宫,并且需要在他们到达终点区域时发生事件。

如何获取对象位置并检查它是否在目标区域?使用 Javascript。

感谢您的帮助!

【问题讨论】:

    标签: unity3d gameobject


    【解决方案1】:

    如果您的结束区域可以被视为一个盒子,您可以在结束区域周围的场景中添加一个 BoxCollider,并将其 isTrigger 属性设置为 true。然后,当您的实体进入该区域时,您将在您的实体上收到对OnTriggerEnter 的回调,您随后可以使用它来结束关卡或其他任何事情。

    【讨论】:

    • +1 - 使用编辑器以更少的代码和更多的逻辑组织构建总是更有意义。统一使用代码来表达你不能单独使用他们的世界构建工具。
    【解决方案2】:

    作为彼得 G states on Unity Answers:

    如果你有一个刚体,那么你可以做 Rigidbody.IsSleeping() 来 检查你的刚体是否在睡觉

    如果您使用的是角色控制器,请检查是否 CharacterController.velocity == Vector3.zero;

    或者,您可以在每帧手动保存一个 Vector3 以记住 最后一个位置。比如:

    function Update () {
     curPos = position;
     if(curPos == lastPos) {
         print("Not moving");
     }
     lastPos = curPos;
    }
    

    【讨论】:

      【解决方案3】:

      好吧,如果您所说的目标区域是指终点区域,那么 您可以通过多种方式做到这一点

      你可以使用碰撞

      以一种简单的方式: (1)创建一个平面,创建一个名为“finish”的标签 (2) 然后选择播放器,然后单击检查器中的下拉“标签”。搜索“完成”并选择它。 您还需要为您的游戏对象添加一个对撞机。

      然后创建一个新的 JavaScript 并将这段代码添加到其中

          function OnCollisionEnter(collision : Collision){
          if(collision.gameObject.tag == "finish"){ 
      
      //"STOP GAMEOBJECT FROM MOVING"
      }
      
      }
      

      或者使用这个方法

      将此脚本放在您的播放器上。 这个脚本可能就像使用对撞机来做你正在做的事情一样神

       var other : Transform;
          function Update ()
          {
      
          var dist = Vector3.Distance(other.position, transform.position);
      
          if (dist < 100)
          {
          //stop player movent here 
      // move player to exact finish position over time 
      
          }
      
          }
      

      【讨论】:

        猜你喜欢
        • 2014-10-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多