【问题标题】:is there a way to make an object follow another object plus always points/looks towards the camera有没有办法让一个物体跟随另一个物体加上总是指向/看向相机
【发布时间】:2019-08-19 02:06:22
【问题描述】:

我正在做一个项目,需要帮助使一个对象跟随另一个对象,但同时一端应该指向相机。我尝试了 lookAT 方法,但它不能正常工作。

【问题讨论】:

  • 请分享您尝试过的LookAt,如果您能阐明对象应如何跟随另一个对象,这将有所帮助。
  • gun.transform.LookAt(Camera.main.transform.position); gun.transform.position=enemy.position;
  • 嗯,首先你不需要担心枪的后端。您最初可以将它放在相机前面,然后使用LookAt
  • 它是一款 AR 游戏,因此无法将物体放在镜头前。
  • 锚定它会起作用

标签: c# object unity3d


【解决方案1】:

LookAt 非常适合 3D 对象。

这些是LookAt 可能无法按您预期工作的可能性:

  1. 您希望 2D 对象查看一个点。
  2. 视觉上认为对象的正面不是它的x+侧。主要是因为:
    • 3D 模型是使用第三方软件粗心制作的。
    • 该对象位于另一个对象内部并在其位置旋转。
  3. 您正在操纵对象在别处的旋转。

【讨论】:

    【解决方案2】:

    指向另一个对象非常简单。你只需要使用LookAt,像这样:

    GameObject target;
    
    transform.LookAt(target.transform);
    

    为了跟踪目标,我看到了多种方法。例如,您可以使对象也使用带有 LookAt 的脚本,并且当您移动主要对象时,也移动跟随者。 另一种更复杂的方法是设置对象将向其目标移动的最大分离距离。这也将使用 LookAt。 如果你选择了最后一个,你可以这样做:

    const float MaxDistance = 5.0f // The maximum distance the target can go away before following it.
    float speed = 2.0f;
    
    if(Vector3.Distance(transform.position, target.transform.position) > MaxDistance)
    {
        transform.LookAt(target.transform);
    
        transform.position += Vector3.forward * speed * Time.deltaTime;
    }
    

    您应该将其附加到更新或协同程序。

    【讨论】:

      【解决方案3】:

      一个特定的对象直接指向目标对象如下:

      //Declare a variable that points to a specific object and a target obj variable
      public GameObject obj1;
      public GameObject obj2;
      
      GameObject targetObj;
      
      // Update is called once per frame
      void Update()
      {
          if (Input.GetKeyUp(KeyCode.Alpha1))
              OnChangedTarget(obj1);
      
          if (Input.GetKeyUp(KeyCode.Alpha2))
              OnChangedTarget(obj2);
      
          UpdateObjPos(Camera.main.gameObject);
      }
      
      //Keep distance from target obj
      void UpdateObjPos(GameObject followObj, float width = 10f, float height = 10f)
      {
          if (targetObj == null)
              return;
      
          followObj.transform.LookAt(targetObj.transform);
      
          float posX = targetObj.transform.position.x + width;
          float posY = targetObj.transform.position.y + width;
          float posZ = targetObj.transform.position.z + height;
      
          followObj.transform.position = new Vector3(posX, posY, posZ);
      }
      
      //Declare function to select target obj
      void OnChangedTarget(GameObject obj)
      {
          Debug.Log("Target Changed : " + obj.name);
          targetObj = obj;
      }
      

      【讨论】:

        【解决方案4】:

        解决方案

        只需将您想要的对象继承到主游戏对象,主游戏对象就是您的玩家。我从未为此目的使用任何 c# 代码脚本。如果你想跟随两个对象互相跟随,只需继承主游戏对象。这样,第二个游戏对象将跟随所需的主要玩家。如果您希望相机同时跟随它们,相机也将被继承。至于相机所关心的点,您需要使用统一工具并根据相机的位置调整 x、y 和 z 轴。我建议将相机放在两个游戏对象的前面,然后将相机的正面朝向游戏对象。

        图片

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-07-12
          • 1970-01-01
          • 1970-01-01
          • 2012-10-11
          • 1970-01-01
          相关资源
          最近更新 更多