您的位置:首页 > 移动开发 > Unity3D

Unity学习2 鼠标点击控制物体移动

2017-09-05 00:08 781 查看
http://blog.csdn.net/rose_girls/article/details/48951231

//关于Ray / RayCastHit / RayCast的解析

 以下为鼠标点击控制物体移动的代码

using UnityEngine;

using System.Collections;

public class Pathfinding1 : MonoBehaviour {

public GameObject play;//定义物体
public Vector3 temPos;//定义矢量
public bool isMoving;//判断是否正在移动
public Quaternion rotation;//控制物体旋转

// Use this for initialization
void Start () {
play=GameObject.Find("Cube");//寻找物体
print (play);
}

// Update is called once per frame
void Update () {
if (Input.GetMouseButtonDown (1))//判断是否按下鼠标右键
{
Ray ray=Camera.main.ScreenPointToRay(Input.mousePosition);//从摄像机发射出一条射线
RaycastHit hit;//用于储存射线的位置信息

if(Physics.Raycast(ray,out hit,100))
{
print(hit.collider.name);
if(hit.collider.gameObject.name=="Plane")
{
Debug.Log(hit.point);//调试输出point的点

temPos=new Vector3(hit.point.x,play.transform.position.y,hit.point.z);//定义矢量方向

if(Vector3.Distance(play.transform.position,temPos)>0.1)//如果物体不在点上面,则进行移动
{
isMoving=true;
}
}
}
}

if (isMoving)
{
turn(temPos);//调用turn方法 旋转物体方向
this.GetComponent<CharacterController>().SimpleMove((temPos-play.transform.position).normalized*5f);
}

}

void turn(Vector3 look)
{
rotation = Quaternion.LookRotation (temPos - play.transform.position, Vector3.up);
play.transform.rotation = Quaternion.Slerp (play.transform.rotation, rotation, Time.deltaTime * 6f);
}

}

//基本的原理为

1.从摄像机中发射出一条射线,射到地面

2.找到射线与地面相交的点(point)

3.旋转物体,利用角色控制器(CharacterContreller)移动至那个点

2017-9-5
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: