在Unity3d中,我正在尝试使用精灵来“查看”我点击鼠标的位置。 This similar question没有回答我的问题,因为它是针对libgdx而且是Java,而不是C#。虽然这个other question也类似,但它涉及XNA而不是Unity3d。关于Euler和Quaternion旋转的Unity文档中的示例似乎集中在非交互式旋转中。
我怀疑光线投射可能是可能的解决方案的一部分,但我在(可能是错误的)印象下它最适合使用碰撞器,我没有使用。我现在很难过,需要一些经验丰富的帮助。
我可能还没有完全处理/理解(看起来像)在3d环境中使用2d精灵进行2d点击。我只希望精灵以第二种方式旋转。
同样,我想在单击鼠标右键时获取鼠标位置,计算GameObject和鼠标单击之间的角度,然后在鼠标单击时指向对象。
using UnityEngine;
using System.Collections;
public class LookAtClickPoint2d : MonoBehaviour {
public Vector3 mousePosition;
private Camera cam;
// Use this for initialization
void Start ()
{
cam = Camera.main;
}
// Update is called once per frame
void Update()
{
mousePosition = cam.ScreenToWorldPoint(Input.mousePosition);
Vector3 targetDir = mousePosition - transform.position;
if (Input.GetMouseButton (1))
{
//transform.Rotate(targetDir); /*<---This is @joeblow's suggestion.*/
/*below is @mgear's suggestion*/
Vector3 perpendicular = Vector3.Cross(transform.position-mousePosition, Vector3.forward);
transform.rotation = Quaternion.LookRotation(Vector3.forward, perpendicular);
}
}
}
@ mgear的回答让我这样: 虽然在图片中并不明显,但是精灵只指向摄像机视图的中心,而不是鼠标位置。
@ joeblow的回答让我知道: 虽然精灵指向鼠标位置,但它们不会保持垂直。他们只移动一次!所以它没有回答我的问题。(我认为Unity试图解释3d空间中的鼠标位置,而不是2d。)