以子彈為原點,發射射線,如果射線檢測到障礙物,則返回射線與障礙物的碰撞點
在該點處實例化出彈孔貼圖
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 15 16 //在碰撞點生成彈孔貼圖 17 if (isCillider) { 18 //射線檢測到物體,執行以下動作 19 int index = Random.Range(0,2);//隨機生成0||1 20 GameObject bulletHolePrefab = bulletHoles[index]; 21 Vector3 pos = hitinfo.point;//撞擊點 22 pos.y += 0.5f;//向上移動,防止與物體平面重疊 23 GameObject go = GameObject.Instantiate(bulletHolePrefab,pos,Quaternion.identity) as GameObject; 24 //調整貼圖的方向 25 //使彈孔貼圖,貼於物體平面,與平面平行 26 go.transform.LookAt(hitinfo.point - hitinfo.normal); 27 } 28 }