【问题标题】:unity 3d make object follow playerunity 3d 使对象跟随玩家
【发布时间】:2019-10-31 15:07:47
【问题描述】:

我想在 unity3D 上制作一个机器人。我想在与物体碰撞时制作机器人的抓手,附上抓手。所以物体会跟随抓手。

为了制作这样的东西,将向这个脚本添加什么?

private Rigidbody gripper;

void Start() 
{
   gripper_part01 = GetComponent<Rigidbody>();
}

void Update() 
{
   if (Input.GetKey("a")) 
       gripper.AddForce(transform.forward * 100);
}

void OnCollisionEnter(Collider obj1) 
{
   // how to make obj1 follow the gripper
}

【问题讨论】:

    标签: c# unity3d game-engine game-physics


    【解决方案1】:

    可以通过各种方法来完成。但最简单的方法是在 obj1 发生碰撞时立即将其作为抓手的子对象。

    代码看起来像这样

    void OnCollisionEnter(Collider obj1) 
    {
       // how to make obj1 follow the gripper
       obj1.transform.parent = gripper.transform;
    }
    

    【讨论】:

      【解决方案2】:

      查看状态机模式

      http://gameprogrammingpatterns.com/state.html

      您需要创建 2 个状态:

      1. 不关注(默认)
      2. 关注

      当玩家进入对撞机时,切换状态为跟随。我不会为您编写一个完整的状态机/状态切换架构供您复制和粘贴,但我可以告诉您,您将希望将状态本身设为 MonoBehavior 类,而实际的 StateMachine 不会有任何父类并将附加到对象的控制器。

      然后,您需要像这样跟踪玩家的坐标

      Vector3 playerPosition;
      
      void OnCollisionEnter(Collider obj1)
      {
          if(obj1.gameObject.tag == "Player"){
              playerPosition = obj1.transform.position;
              myStateMachine.switchState("Follow"); //obviously replace this with your own state machine code
          }
      }
      

      确保玩家的游戏对象在 Unity 编辑器中确实具有“玩家”标签。

      【讨论】:

        猜你喜欢
        • 2022-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多