unity怎么物体的坐标等于unity 鼠标拖动物体的坐标,然后还能和unity 鼠标拖动物体实时的移动。

【Unity3D】使用鼠标控制物体在世界坐标中移动 - 简书
【Unity3D】使用鼠标控制物体在世界坐标中移动
public class Move : MonoBehaviour {
public GameO
//要拖拽的物体
Vector3 mouseV3;
Vector3 screeenV;
//存储cube的屏幕坐标
//记录鼠标坐标转成的世界坐标void Update() {if (Input.GetMouseButtonDown(0)) {
//当鼠标第一次单击时记录下cube在场景中的坐标,并把世界坐标转成屏幕坐标
screeenV= Camera.main.WorldToScreenPoint(cube.transform.position);}if (Input.GetMouseButton(0)){
mouseV3 = Input.mouseP
//当鼠标移动时记录下鼠标的坐标
mouseV3.z = screeenV.z;
//因为鼠标的z坐标为0,所以需要一个z坐标
//把鼠标的屏幕坐标转换成世界坐标
world = Camera.main.ScreenToWorldPoint(mouseV3);
//当鼠标移动时,cube也发生移动,为了让cube的y轴不发生移动,设y轴为原来的y轴
cube.transform.position = new Vector3(world.x, cube.transform.position.y, world.z);
print(cube.transform.position);
VR项目研发主管
企业特聘VR专家
VR行业讲师
指导作品获得多项荣誉:unity3d游戏物体跟着鼠标方向移动
我的图书馆
unity3d游戏物体跟着鼠标方向移动
效果:当点击鼠标左键时,游戏对象会朝鼠标点击的方向移动,类似魔兽争霸一样。
思路:把鼠标的坐标转化成世界坐标(鼠标默认是屏幕坐标),然后当点击鼠标时,物体将朝着鼠标的世界坐标方向移动。
如果你看到这的话,最好先别往下看,自己按着这个思路试做一下,实在不行再看看我的哈~~~~
[java] var&world:Vector3;&&var&speed:float=0;//物体的移动速度&&function&Update&(){&&&&var&screenpos=Camera.main.WorldToScreenPoint(transform.position);//物体的世界坐标转化成屏幕坐标&&&&var&e:Vector3=Input.mouseP//鼠标的位置&&&&//当点击鼠标左键时&&&&if(Input.GetMouseButton(0)){&&&&&&&e.z=screenpos.z;//1.因为鼠标的屏幕&Z&坐标的默认值是0,所以需要一个z坐标&&&&&&&world=Camera.main.ScreenToWorldPoint(e);&&&&&&&&speed=1;&&&&&&&&}&&&&if(transform.position==world){&&&&&&&&&&&&&speed=0;&&&&}else{&&&&&&&animation.Play("walk");//这是我自身带的一个默认动画,你可以把它删了&&&&}&&&&transform.LookAt(world);&//物体朝向鼠标&&&&&&&&transform.Translate(Vector3.forward*speed*Time.deltaTime);&&&&&&}&&
当然,上面那个适合垂直平面,即摄像头垂直x-z平面,但一般游戏都不会垂直的。如果不垂直的话,用上面方法可能就会出现类似游戏对象穿透地面的现象,所以我们得改一下代码。
就只用把world=Camera.main.ScreenToWorldPoint(e); 改成以下这句就行了
[java] world.x=Camera.main.ScreenToWorldPoint(e).x;&&&world.z=Camera.main.ScreenToWorldPoint(e).z;&&world.y=transform.position.y;&&注:穿透地面现象是Y轴,所以让y轴不变,且大小等于游戏对象的y值。
---------------------------------------------------------------------------------------------------------------------思路是运用射线。建立一个场景,场景中有两个cube,一个相机。给var cam赋予主相机,两个cube分别赋予一下两个脚本,运行场景,点击或拖拽鼠标就知道区别了。具体如下:var cam:Cfunction Update () {if(Input.GetMouseButton(0))//Down或Up{var ray =cam.ScreenPointToRay (Input.mousePosition);var hit: RaycastHif(Physics.Raycast(ray,hit)){if(hit.collider.gameObject.tag=="Finish")//射线碰撞到的物体标签{transform.position=hit.print(hit.point);//鼠标点击的坐标}}}}点击鼠标,物体向鼠标点击处移动var cam:Cvar zj:var jiludian:Vector3;function Start () {jiludian=transform. & &//记录物体初始位置zj=}function Update () {if(Input.GetMouseButton(0)){var ray =cam.ScreenPointToRay (Input.mousePosition);var hit: RaycastHif(Physics.Raycast(ray,hit)){if( hit.collider.gameObject.tag=="Finish") //这里地面的标签是Finish,你可以自定义{//print(hit.point);//显示鼠标点击的坐标jiludian=Vector3(hit.point.x,hit.point.y+0.5,hit.point.z);zj=}}}if(zj==true){var targetRotation=Quaternion.LookRotation (jiludian-transform.position,Vector3.up); //求出与目标之间的角度print(targetRotation);transform.rotation =Quaternion.Slerp(trans
TA的最新馆藏效果:当点击鼠标左键时,游戏对象会朝鼠标点击的方向移动,类似魔兽争霸一样。
思路:把鼠标的坐标转化成世界坐标(鼠标默认是屏幕坐标),然后当点击鼠标时,物体将朝着鼠标的世界坐标方向移动。
如果你看到这的话,最好先别往下看,自己按着这个思路试做一下,实在不行再看看我的哈~~~~
&var&world:Vector3;&&
var&speed:float=0;&&
function&Update&(){&&
&&var&screenpos=Camera.main.WorldToScreenPoint(transform.position);&&
&&var&e:Vector3=Input.mouseP&&
&&if(Input.GetMouseButton(0)){&&
&&&&&e.z=screenpos.z;&&
&&&&&world=Camera.main.ScreenToWorldPoint(e);&&&
&&&&&speed=1;&&&&&&
&&if(transform.position==world){&&&&&&&&
&&&&&speed=0;&&
&&}else{&&
&&&&&animation.Play("walk");&&
&&transform.LookAt(world);&&&
&&transform.Translate(Vector3.forward*speed*Time.deltaTime);&&
当然,上面那个适合垂直平面,即摄像头垂直x-z平面,但一般游戏都不会垂直的。如果不垂直的话,用上面方法可能就会出现类似游戏对象穿透地面的现象,所以我们得改一下代码。
就只用把world=Camera.main.ScreenToWorldPoint(e); 改成以下这句就行了
world.x=Camera.main.ScreenToWorldPoint(e).x;&&&
world.z=Camera.main.ScreenToWorldPoint(e).z;&&
world.y=transform.position.y;&&
注:穿透地面现象是Y轴,所以让y轴不变,且大小等于游戏对象的y值。
原文转自:
阅读(...) 评论()Unity3D教程:物体跟随鼠标点击处移动 | Unity3D教程手册
当前位置 :
>> Unity3D教程:物体跟随鼠标点击处移动
Unity3D教程:物体跟随鼠标点击处移动
思路是运用射线。建立一个场景,场景中有两个cube,一个相机。给var cam赋予主相机,两个cube分别赋予一下两个脚本,运行场景,点击或拖拽鼠标就知道区别了。具体如下:
function Update () {
if(Input.GetMouseButton(0))//Down或Up
var ray =cam.ScreenPointToRay (Input.mousePosition);
var hit: RaycastH
if(Physics.Raycast(ray,hit))
if(hit.collider.gameObject.tag=="Finish")//射线碰撞到的物体标签
{transform.position=hit.
print(hit.point);//鼠标点击的坐标
点击鼠标,物体向鼠标点击处移动
var jiludian:Vector3;
function Start () {
jiludian=transform.&&&&//记录物体初始位置
function Update () {
if(Input.GetMouseButton(0))
var ray =cam.ScreenPointToRay (Input.mousePosition);
var hit: RaycastH
if(Physics.Raycast(ray,hit))
if( hit.collider.gameObject.tag=="Finish") //这里地面的标签是Finish,你可以自定义
//print(hit.point);//显示鼠标点击的坐标
jiludian=Vector3(hit.point.x,hit.point.y+0.5,hit.point.z);
if(zj==true)
var targetRotation=Quaternion.LookRotation (jiludian-transform.position,Vector3.up); //求出与目标之间的角度
print(targetRotation);
transform.rotation =Quaternion.Slerp(transform.rotation,targetRotation,Time.deltaTime * 5.0);//旋转之角度与目标对齐
transform.Translate(Vector3.forward*10*Time.deltaTime);
if((Vector3.Distance(transform.position,jiludian) &1.0))
//transform.position=
transform.Translate(Vector3.forward*0);
【上一篇】
【下一篇】
您可能还会对这些文章感兴趣!

我要回帖

更多关于 unity 实时 显示 坐标 的文章

 

随机推荐