Part2:Unity学习笔记十七 - Space Shooter(从视频最后一课向Done_Main.unity场景修改的过程)

来源:互联网 发布:mkv格式播放器 mac 编辑:程序博客网 时间:2024/06/08 10:28

添加完的类似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脚本以免打中人,加上和对应参数,然后子弹可以互相对掉了。然后万一发生什么方向反了,范围大小需要调整等问题自己根据情况调整下,这样大体看起来没什么问题了,没时间详细测试,这样应该可以了,如果谁有什么问题可以评论反馈给我,我再调一下。


0 0
原创粉丝点击