【Unity3D】槍戰游戲—發射子彈、射線檢測


一、子彈的碰撞檢測:

    因為子彈的移動速度非常的快,那么如果為子彈添加一個collider,就有可能檢測不到了。

    因為collider是每一幀在執行,第一幀子彈可能在100米處,那么下一幀就在900米處了,

    那么中間的障礙物就不能被檢測到了。

  所以就需要射線檢測:

    在每一幀的執行,都向上一幀發射射線,不斷地檢測射線中是否有穿過的障礙物體  

 1     void Update () {
 2         transform.Translate (Vector3.forward * Speed * Time.deltaTime);
 3         //用射線檢測,子彈的碰撞,當物體在兩點之間產生的射線內時,算作發生碰撞
 4         //1.獲得射線的起點(原點)
 5         //2.獲得射線的方向
 6         //3.獲得射線的距離
 7         Vector3 oriPos = transform.position;//1.射線的起點
 8         Vector3 direction = transform.position - oriPos;//2.方向
 9         float ength = (transform.position - oriPos).magnitude;//3.射線的距離,取向量的大小
10         //光線投射碰撞
11         RaycastHit hitinfo;//存儲碰撞信息
12         //光線投射,檢測是否發生碰撞
13         bool isCillider = Physics.Raycast (oriPos,direction,out hitinfo,ength);
14         if (isCillider) {
15             //射線檢測到物體,執行以下動作    
      }

 

二、子彈的生成

  首先想到的是在槍口生成子彈,然后使子彈發生移動

  如果是這樣的話,玩家就不能指哪打哪

  所以需要在屏幕的正中央,來生成子彈

  依舊運用射線,讓子彈延射線方向移動

    獲得屏幕中央作為射線原點

    發射射線

    如果射線碰撞到物體,返回該點,確定原點與該點的方向,子彈沿該方向移動

    如果沒有,則目標點為從原點向前移動一定距離,作為目標點,確定方向,子彈沿該方向移動

 1 //開始射擊
 2     void Shoot(){
 3         //閃光
 4         flashcol.Flash ();
 5         //生成子彈    
 6         //GameObject.Instantiate (bulletPrefab, fllow.transform.position, fllow.transform.rotation);
 7         GameObject go = GameObject.Instantiate (bulletPrefab,transform.position,Quaternion.identity) as GameObject ;
 8         //獲得屏幕中心位置,轉化為世界坐標
 9         Vector3 point = soliderCamera.ScreenToWorldPoint (new Vector3 (Screen.width / 2, Screen.height / 2,0));
10         //定義射線
11         RaycastHit hitinfo;
12         //發射射線
13         bool isCollider = Physics.Raycast (point, soliderCamera.transform.forward/*相機前朝向*/, out hitinfo);
14         if (isCollider) {
15             //如果射線撞擊到了物體
16             go.transform.LookAt (hitinfo.point);
17         } else {
18             //如果射線沒有撞擊物體
19             //那么朝向1000米外的目標點
20             point += soliderCamera.transform.forward * 1000;
21             go.transform.LookAt(point);
22         }
23     }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM