搜索
您的当前位置:首页正文

Unity 屏幕坐标转换世界坐标之物体跟随鼠标移动

来源:知库网

Unity 支持坐标的转换,以物体跟随鼠标为例子:

一开始我想到的一种方法是:

//错误实例

public GameObject m_obj;

void Update(){

Vector3 mousePos = Input.mousePosition;//获取鼠标移动位置 

Vector3 worldPos = Camera.main.ScreenToWorldPoint(mousePos);//把鼠标的屏幕坐标转换成世界坐标

m_obj.Transform.position = worldPos;//然后把世界坐标赋予给物体,从而鼠标控制物体移动。

}

结果一运行,没反应,蛋疼,百思不得其解,就以为是input.mousePosition不支持这样转换,然后就新建一个Vector3 = new Vector(100,100,0),希望模拟一下屏幕坐标,再来进行ScreenToWorldPoint()进行转换,结果还是没有反应... 

正当蛋疼时,逛论坛的时候,无意中看到留言里写的代码才明白过来了,正确如下:

public GameObject m_obj;

void Update(){

//Vector3 screenPos = Camera.main.WorldToScreenPoint(m_obj.transform.position);//获取需要移动物体的世界转屏幕坐标

//Vector3 mousePos = Input.mousePosition;//获取鼠标位置

//mousePos.z = screenPos.z;//因为鼠标只有X,Y轴,所以要赋予给鼠标Z轴

//Vector3 worldPos = Camera.main.ScreenToWorldPoint(mousePos);//把鼠标的屏幕坐标转换成世界坐标

//m_obj.position = worldPos;//控制物体移动

}

终于实现了转换之后,对比发现,其实思路是没有错的,但是在于移动的Z轴,原来直接转换的鼠标位置,是只有X、Y轴,唯独缺了Z轴,所以要把需要跟随物体的Z轴赋予给鼠标屏幕位置,然后再进行转换世界坐标,才能做到效果。

非常感谢,多逛论坛是有好处的。

Top