如果想要实现:用鼠标来移动物体那么就需要使用射线。以下是关键代码:
public class PlayerController:MonoBehaviour{
public float speed;//定义移动速度,将代码覆盖给要移动的物体
private Vector3 target;//目标位置
private bool isOver=true;//判断是否结束移动
void Start(){
}
void Update(){
if(Input.GetMouseButtonDown(0)){
Ray ray=Camera.main.ScreenPointToRay(Input.mousePosition);
RaycasrHit hitInfo=new RaycastHit();
if(Physics.Raycast(ray,out hitInfo)){
if(hitInfo.collider.name="Plane"){
target=hitInfo.point;
target.y=0.5f;
isOver=false;
}
}
}
MoveTo(target);
}
private void MoveTo(Vector3 tar){
if(!isOver){
Vector3 v1=tar-transform.position;
transform.position+=v1.normalized*speed*Time.deltaTime;
if(Vector3.Distance(tar,transform.position)<=0.1f){
isOver=true;
transform.position=tar;
}
}
}
}
Input.GetMouseButtonDown(0):鼠标左键按下,按键系统。
Ray ray:定义一条射线。
Ray Camera.main.ScreenPointToRay(Vector3 pos)返回一条射线Ray从摄像机到屏幕指定一个点。
Ray Camera.mainViewportPointToRay(Vector3 pos)返回一条射线Ray从摄像机到视口指定的一个点
RaycastHit :光线投射碰撞信息
RaycastHit[ ]
bool Physics.Raycast(Vector3 origin,Vector3 direction,float distance,int layerMask)://当光线投射与任何碰撞器交叉时为真,否则为假
RaycastAll
hitInfo.collider.name=="Plane"//碰撞的名字是Plane