射线练习题
场景中创建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);
}
}
}