添加完的類似DoneMain的源碼地址http://pan.baidu.com/s/1hsGuPZe
第六步,我們查查爲什麼會出這種情況,想了下與場景內碰撞有關的代碼只有一處
爲了方便我們把EvasiveManeuver腳本上的zMin改大點,比如2,這樣敵方飛船會卡在z=2的那條線上來回亂晃,便於碰撞
再把DestroyByContact腳本中的對應行改爲,便於設斷點,然後在
if (other.tag == "Boundary")
{
return;
}
if (other.tag == "Enemy") {
《-設斷點
return;
}
某次出現
出現名字爲prop_asteroid_02,tag爲Untagged的物體,然後我們在工程中搜索prop_asteroid_02,發現這是預設體下物體,大約是由於碰撞體在子物體上,other.gameObject看來等於子物體了,如下圖
修改也很簡單,就是把帶碰撞體的子物體的tag也改爲Enemy,同時把幾個Is Trigger也勾上吧
最後來添加子彈
添加個空物體,改名Bolt_Enemy,然後子物體Quad改名VFX,刪除本身的mesh collider
然後發現material中沒有,自己建立個空material,fx_bolt_cyan_mat,類型改爲mobile/Particle/Additive,材質選fx_lazer_cyan_dff
然後在Bolt_Enemy上添加剛體和碰撞體,mover.cs腳本,設定速度,拖入Prefabs文件夾中,在敵方飛船上添加WeaponController腳本
public GameObject shot; //敵方子彈的Prefab
public Transform shotSpawn;
//在敵方飛船上子彈出射點的座標
public float fireRate;
//開火頻率
public float delay;
//第一次開火前的延遲
AudioSource enemyBoltAudio;
// Use this for initialization
void Start () {
enemyBoltAudio = GetComponent<AudioSource> ();
//取得開火音源
InvokeRepeating ("Fire", delay,
fireRate); //在delay秒後,每隔fireRate時間執行一次Fire函數
}
void Fire()
{
Instantiate (shot,
shotSpawn.position, shotSpawn.rotation);
//初始化一顆子彈,位置在shotSpawn上,速度是在子彈上的Mover腳本定的
enemyBoltAudio.Play ();
//播放子彈出射聲音片段
}
然後測試下,發現我忘了把子彈tag改爲Enemy,那麼加上,還有敵方子彈上需要一個DestroyByContact腳本以免打中人,加上和對應參數,然後子彈可以互相對掉了。然後萬一發生什麼方向反了,範圍大小需要調整等問題自己根據情況調整下,這樣大體看起來沒什麼問題了,沒時間詳細測試,這樣應該可以了,如果誰有什麼問題可以評論反饋給我,我再調一下。