统一3d使对象跟随玩家

时间:2019-10-31 15:07:47

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

我想在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
}

2 个答案:

答案 0 :(得分:1)

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

代码看起来像这样

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

答案 1 :(得分:0)

查看状态机模式

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
    }
}

确保玩家的gameObject实际上在Unity编辑器中具有“玩家”标签。