Part2:Unity學習筆記十七 - Space Shooter(從視頻最後一課向Done_Main.unity場景修改的過程)

添加完的類似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腳本以免打中人,加上和對應參數,然後子彈可以互相對掉了。然後萬一發生什麼方向反了,範圍大小需要調整等問題自己根據情況調整下,這樣大體看起來沒什麼問題了,沒時間詳細測試,這樣應該可以了,如果誰有什麼問題可以評論反饋給我,我再調一下。


發佈了48 篇原創文章 · 獲贊 3 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章