代码之家  ›  专栏  ›  技术社区  ›  user9161346

如何根据相机的Y旋转此对象的Y?

  •  0
  • user9161346  · 技术社区  · 7 年前

    我想根据“Person/Camero”的Y轴旋转来旋转我的游戏对象“Person”的Y轴。我原以为这样行得通,但行不通,为什么行不通?我怎样才能修复它? 此外,这个脚本是在“个人”。

    transform.rotation.y = GameObject.Find("Person/Camero").transform.rotation.y;
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   Programmer    7 年前

    您的代码有两个问题:

    1. .您正在修改 transform.rotation.y 直接地你 不能 执行此操作将得到如下编译时错误:

    无法修改“Transform”的返回值。“旋转”,因为它是 不是变量

    你必须 transform.rotation 这就是 Quaternion ,修改 y 然后分配修改后的 四元数 返回到 使改变旋转 .

    应该编译这样的东西

    //Get rotation 
    Quaternion tempRot = transform.rotation;
    //Modify the Y
    tempRot.y = GameObject.Find("Person/Camero").transform.rotation.y;
    //Assign back to transform.rotation
    transform.rotation = tempRot;
    

    但是会的 正常运行。看见 #2 原因如下。

    2. . 这个 使改变旋转y 字段返回为 四元数 形式,以便 GameObject.Find("Person/Camero").transform.rotation.y . 仅修改一个轴将 给你你真正想要的 四元数 . 你必须这样做 相反

    这是通过 transform.localEulerAngles transform.eulerAngles 属性而不是 使改变旋转 . 使用 使改变本地EUlerangles 如果对象具有父对象。

    这就是应该编译和运行的示例:

    //Get rotation in Angle deg
    Vector3 tempAngle = transform.localEulerAngles;
    
    //Modify the Y axis
    tempAngle.y = GameObject.Find("Person/Camero").transform.localEulerAngles.y;
    
    //Assign back to transform.eulerAngles
    transform.localEulerAngles = tempAngle;
    
        2
  •  0
  •   Griizz    7 年前

    你不应该试着用手旋转东西。相反,查找三角形并使用旋转函数。

    尝试以下操作:

    var toRotate = GameObject.Find("Person/Camero").transform.rotation.ToAngleAxis() - transform.rotation.ToAngleAxis();
    toRotate.x = 0;
    toRotate.z = 0;
    transform.Rotate(toRotate);
    

    如果他看向摄像机而不是远离摄像机,则添加这条线;

    toRotate.y += 180;
    

    祝你好运:)