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