1. 程式人生 > >射線檢測(兩個模型,效果和程式碼一樣)

射線檢測(兩個模型,效果和程式碼一樣)

坦克: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

5f); // transform.Rotate(0, hor * Time.deltaTime * 50f, 0); //} //1,建立射線 //Ray ray = new Ray(transform.position, transform.forward); //2,發射射線,如果發射成功,result為ture,否者為false //bool result = Physics.Raycast(ray,out hitInfo,10f); //如果發射成功,hitInfo存放射線發射成功後的碰撞資訊 //if (result) //{ // //根據發射的射線,在Scene中繪製一條線 // //Debug.DrawLine(transform.position, hitInfo.point, Color.red); // //射線碰到遊戲物體的位置 //
//Debug.Log
(hitInfo.point); //}

    //實現滑鼠點選螢幕,發射一條射線,讓遊戲物體移動到射線碰撞到的
    //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");
    }
}

}