[编辑] 解决了:
Vector3 relativePos = hit.point - pivot.transform.position;
Vector3 rotation = Quaternion.LookRotation(relativePos).eulerAngles;
pivot.transform.localEulerAngles = new Vector3(0, 0, rotation.y);
您好我最近遇到了一个问题。 我试图让这个对象看我的光线投射点,而不必旋转它。 正如你可以从图片中看到的那样,脚本无法正常工作。
我正在使用的代码:
Ray ray = theCamera.ViewportPointToRay(new Vector3(0.5F, 0.5F, 0));
RaycastHit hit;
Physics.Raycast(ray, out hit);
pivot.transform.LookAt(hit.point);
pivot.transform.rotation = new Quaternion(0, pivot.transform.rotation.y, 0, 0)
问题: 是否可以使“蓝色箭头”查看保留在同一旋转平面中的“hit.point”? 很抱歉这个错误的解释,但我会发布一个我想要实现的结果的图像(红色立方体是光线投射点)。
答案 0 :(得分:0)
尝试这样的事情:
// Keep the Y component the same as your transform
pivot.transform.LookAt(new Vector3(hit.point.x, this.transform.position.y, hit.point.z));
答案 1 :(得分:0)
我想你只想在Y上旋转,而不是X& Z'在任何情况下,您都不应该修改或创建部件中的四元数,请使用内置方法:
Vector3 rotation = Quaternion.LookRotation(relativePos).Euler
public Quaternion rotationAdjusted = Quaternion.Euler(0, rotation.eulerAngles.y, 0);
transform.rotation = rotationAdjusted
答案 2 :(得分:0)
如果你需要的只是围绕Y轴旋转物体,在hit.point的方向,不影响X和Z轴...
...那么在那种情况下,我相信冻结X和Z旋转就可以了。
您可以在检查器中或通过代码执行此操作:
Rigidbody _rigidbody = GetComponent<Rigidbody>();
_rigidbody.constraints = RigidbodyConstraints.FreezeRotationX | RigidbodyConstraints.FreezeRotationZ
这不是错误,因为它使用按位OR运算符。 另请注意,旋转约束应用于局部空间,而不是WorldSpace。
编辑:删除了第一个不需要的部分,因为我从第一次尝试中就没有理解这个问题:)