場景中創建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);
}
}
}