射线练习题

2017-04-19  本文已影响40人  胤醚貔貅

场景中创建N(两个以上)个物体,鼠标可以选中任何物体,当鼠标选中为非地面时,选中的物体变为红色,之前选中的物体恢复为之前的颜色,鼠标点击到地面时,让之前选中的那个物体移动的当前点击的位置

思考:在点击下一个物体移动的时候,上一个物体继续移动

GameController脚本

usingUnityEngine;

usingSystem.Collections;

publicclassGameController1:MonoBehaviour{

privateRaycastHithit;//碰撞信息

privateGameObjectselectdeGameObject;//选中物体

privateboolflag;//标记当前是否选中了地面

privateColorselectedColor;//当前选中物体的颜色

voidUpdate(){

if(Input.GetMouseButtonDown(0)){

//从摄像头发射一条经过鼠标的射线,如果射线碰撞到任何碰撞体,该方法返回true,否则返回false

if(Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition),outhit)){

//判断鼠标是否点击到地面

if(hit.collider.name=="Plane"){

flag=true;

}else{

flag=false;

//null;空对象,引用类型

if(selectdeGameObject){

//将前一个选中的物体颜色恢复为原来的颜色

selectdeGameObject.GetComponent().material.color=selectedColor;

}

//更新选中的物体

selectdeGameObject=hit.collider.gameObject;

selectedColor=selectdeGameObject.GetComponent().material.color;

selectdeGameObject.GetComponent().material.color=Color.red;

}

}

}

//当鼠标选中地面,并且被选中物体存在

if(flag&&selectdeGameObject){

Move(hit.point);

}

}

voidMove(Vector3distination){

if(Vector3.Distance(selectdeGameObject.transform.position,distination)<=0.01f){

selectdeGameObject.transform.position=distination;

}else{

Vector3pos=selectdeGameObject.transform.position;

pos=Vector3.Lerp(pos,distination,Time.deltaTime);

selectdeGameObject.transform.position=newVector3(pos.x,selectdeGameObject.transform.position.y,pos.z);

}

}

}

上一篇下一篇

猜你喜欢

热点阅读