Unity 5:如何相对于相机轴旋转 3d space 中的对象
Unity 5: How to rotate an object in 3d space relative to camera axes
我正在尝试编写一个非常简单的 3d 模型查看器,允许用户在 x 轴和 y 轴上单击并拖动以旋转对象。我所包含的代码示例面临的问题是,当我旋转某些东西时,比如说,绕 y 轴,然后尝试绕 x 轴旋转,我发现该对象绕 对象的旋转 x轴而不是从相机角度看的x轴。
我正在有效地尝试模拟沿 z 轴旋转某物,尽管是通过两个运动。
public Transform obj;
private Vector3 screenPoint;
private Vector3 offset;
//public float minX = 270.0f;
//public float maxX = 360.0f;
//public float minY = -90.0f;
//public float maxY = 90.0f;
public float sensX = 100.0f;
public float sensY = 100.0f;
float rotationY = 0.0f;
float rotationX = 0.0f;
float posX = 0.0f;
float posY = 0.0f;
void Update() {
if (Input.GetMouseButton(0)) {
rotationX += Input.GetAxis("Mouse X") * sensX * Time.deltaTime;
//rotationX = Mathf.Clamp(rotationX, minX, maxX);
rotationY += Input.GetAxis("Mouse Y") * sensY * Time.deltaTime;
//rotationY = Mathf.Clamp(rotationY, minY, maxY);
Quaternion q = Quaternion.Euler(rotationY, -rotationX, 0);
transform.rotation = q;
}
if (Input.GetMouseButton(1)) {
posX += Input.GetAxis("Mouse X") * 25.0f * Time.deltaTime;
posY += Input.GetAxis("Mouse Y") * 25.0f * Time.deltaTime;
transform.position = new Vector3(posX, posY, 0);
}
}
如果您想绕 z 轴旋转,可以尝试 transform.RotateAround
函数。这将允许您指定一个点(作为 Vector3
)、旋转轴(再次作为 Vector3
)和旋转的度数。此函数可以修改转换的 position
和 rotation
元素。
我正在尝试编写一个非常简单的 3d 模型查看器,允许用户在 x 轴和 y 轴上单击并拖动以旋转对象。我所包含的代码示例面临的问题是,当我旋转某些东西时,比如说,绕 y 轴,然后尝试绕 x 轴旋转,我发现该对象绕 对象的旋转 x轴而不是从相机角度看的x轴。
我正在有效地尝试模拟沿 z 轴旋转某物,尽管是通过两个运动。
public Transform obj;
private Vector3 screenPoint;
private Vector3 offset;
//public float minX = 270.0f;
//public float maxX = 360.0f;
//public float minY = -90.0f;
//public float maxY = 90.0f;
public float sensX = 100.0f;
public float sensY = 100.0f;
float rotationY = 0.0f;
float rotationX = 0.0f;
float posX = 0.0f;
float posY = 0.0f;
void Update() {
if (Input.GetMouseButton(0)) {
rotationX += Input.GetAxis("Mouse X") * sensX * Time.deltaTime;
//rotationX = Mathf.Clamp(rotationX, minX, maxX);
rotationY += Input.GetAxis("Mouse Y") * sensY * Time.deltaTime;
//rotationY = Mathf.Clamp(rotationY, minY, maxY);
Quaternion q = Quaternion.Euler(rotationY, -rotationX, 0);
transform.rotation = q;
}
if (Input.GetMouseButton(1)) {
posX += Input.GetAxis("Mouse X") * 25.0f * Time.deltaTime;
posY += Input.GetAxis("Mouse Y") * 25.0f * Time.deltaTime;
transform.position = new Vector3(posX, posY, 0);
}
}
如果您想绕 z 轴旋转,可以尝试 transform.RotateAround
函数。这将允许您指定一个点(作为 Vector3
)、旋转轴(再次作为 Vector3
)和旋转的度数。此函数可以修改转换的 position
和 rotation
元素。