*最後更新時間2016/09/05
本文將教學:
彈孔的製作
備註:此範例已經預設讀者已經會移動及發射物件
建議有射線基礎:Unity_C#_Physics.Raycast射線
建議有射線基礎:Unity_C#_Physics.Raycast射線
----------------------------------------------------------------------------------------------------------
1.首先先準備好彈孔透明圖,選幾種不同種類的,例如玻璃和水泥地
例如這張圖,設為Sprite
2.再來新增一Material設為Unlit/Transparent 或其他可帶透明的Shader
並拖曳Sprite過去
3.新增一Plane並把Material指定給它,此時可以看到彈孔已經出現在場景上
縮放適當大小並設為Prefab,場景上的彈孔就可以先刪了
用以上步驟多做幾個彈孔
用以上步驟多做幾個彈孔
4.開始新增撰寫腳本如下:
using UnityEngine;
using System.Collections;
public class Bullt_hole_02 : MonoBehaviour {
public GameObject[] bulletTex; // 建立彈孔陣列
public GameObject[] bulletTex_Glass; // 建立玻璃彈孔陣列
void Update()
{
Vector3 fwd = transform.TransformDirection(Vector3.forward);
RaycastHit hit;
if (Input.GetButtonDown("Fire1") && Physics.Raycast(transform.position, fwd, out hit, 10) && Time.timeScale != 0)
{
if (hit.collider.tag == "Glass" || hit.collider.tag == "PlaneLight")
{ Instantiate(bulletTex_Glass[Random.Range(0, 3)], hit.point, Quaternion.FromToRotation(Vector3.up, hit.normal)); }//隨機0、1、2
else if (hit.collider.tag == "Wall" || hit.collider.tag == "Ground" || hit.collider.tag == "WallLight")
{
Instantiate(bulletTex[Random.Range(0, 3)], hit.point, Quaternion.FromToRotation(Vector3.up, hit.normal)); // 彈孔之position和rotation會符合被打中的物體
}
}
}
}
由此可知此腳本的判斷是用射線判斷,而射線照理來說是由槍口發出
所以腳本應掛在在槍口位置
而使用標籤(tag)可使打中的物件不同留下不同彈孔
亂數則可以使彈孔不會每次都長一樣
一般射擊遊戲不會讓彈孔永遠存在(佔資源)
可以在彈孔身上掛上Destroy(gameObject, 5f);之類的程式碼