射線檢測(兩個模型,效果和程式碼一樣)
阿新 • • 發佈:2018-12-10
坦克:public class TankeScript : MonoBehaviour {
float hor, ver;
//發射射線碰撞體檢測物件
RaycastHit hitInfo;
//要移動到的目標點
Vector3 target;
//坦克要旋轉的四元數
Quaternion qua;
//判斷坦克是否移動
bool isMove = false;
private void Start()
{
target = transform.position;
}
void Update () { //hor = Input.GetAxis(“Horizontal”); //ver = Input.GetAxis(“Vertical”); //if (hor!=0 || ver!= 0) //{ // transform.Translate(0,0,verTime.deltaTime
//實現滑鼠點選螢幕,發射一條射線,讓遊戲物體移動到射線碰撞到的 //3D世界裡的位置 if (Input.GetMouseButtonDown(0)) { //從攝像機發射一條射線,位置傳入滑鼠點選的位置 Ray mRay = Camera.main.ScreenPointToRay( Input.mousePosition); if (Physics.Raycast(mRay,out hitInfo)) { Debug.DrawLine(transform.position, hitInfo.point, Color.red); Debug.Log("射線碰到的點事:" + hitInfo.point); //獲取坦克要移動的目標點 target = new Vector3(hitInfo.point.x, 0.5f, hitInfo.point.z); //坦克要旋轉的四元數 qua = Quaternion.LookRotation(target - transform.position); } } //判斷坦克距離target的距離,來控制坦克移動 if (Vector3.Distance(transform.position,target)>0.1f) { transform.rotation = Quaternion.Lerp( transform.rotation, qua, 1f); //移動 transform.Translate(Vector3.forward * Time.deltaTime * 5f); } }
} public class LakesiScript : MonoBehaviour {
拉克絲: //發射射線碰撞體檢測物件 RaycastHit hitInfo; //要移動到的目標點 Vector3 target; //坦克要旋轉的四元數 Quaternion qua; //判斷坦克是否移動 bool isMove = false; //獲取動畫元件 Animation anim;
private void Start()
{
target = transform.position;
anim = GetComponent<Animation>();
}
void Update () {
//實現滑鼠點選螢幕,發射一條射線,讓遊戲物體移動到射線碰撞到的
//3D世界裡的位置
if (Input.GetMouseButtonDown(0))
{
//從攝像機發射一條射線,位置傳入滑鼠點選的位置
Ray mRay = Camera.main.ScreenPointToRay(
Input.mousePosition);
if (Physics.Raycast(mRay, out hitInfo))
{
Debug.DrawLine(transform.position, hitInfo.point, Color.red);
Debug.Log("射線碰到的點事:" + hitInfo.point);
//獲取坦克要移動的目標點
target = hitInfo.point;
//坦克要旋轉的四元數
qua = Quaternion.LookRotation(target - transform.position);
}
}
//判斷坦克距離target的距離,來控制坦克移動
if (Vector3.Distance(transform.position, target) > 0.1f)
{
transform.rotation = Quaternion.Lerp(
transform.rotation, qua, 1f);
//移動
transform.Translate(Vector3.forward * Time.deltaTime * 2f);
//切換當前動畫為run
anim.CrossFade("run");
}
else
{
//如果已經到了目標點切換為idle動畫
anim.CrossFade("idle");
}
}
}