第五步,如果没有漏什么,我们看起来和原游戏只差敌方会发子弹的飞船了,那就先做下对应prefab
正常建立一个空物体,改名EnemyShip,把敌方飞船模型和Prefabs/VFX/Engines下的engines_enemy粒子动画拖入EnemyShip中,另外建立一个空物体ShotSpawn作为地方子弹的射出位置
自己调整相对位置,大小,旋转角度,然后我们看一下,所有刚体、脚本、声音和碰撞体(这里简单用了个球形碰撞体)都是在父物体中,其实对本工程来说在父物体、子物体差别不大,因为没有相关操作
看下上面增加了组件,我们先添加脚本外的物体和两个已有脚本,这里Drag有点类似摩擦力,Angular Drag类似旋转方向角速度的摩擦力,可能是由于没旋转,这里没设为0
先添加脚本以外的内容,刚体,碰撞体和声音源,按照其内容添加Mover,DestroyByContact,EvasiveManeuver脚本,然后制作预设体
在GameController脚本上的hazards变量上把size改为4,同时最后一栏添加敌方飞船脚本,我们看了下WeaponController中似乎没什么内容,运行
出现了点问题,敌方飞船被固定在了原点,不能移动。还会被石头砸掉。分析下,被石头砸掉比较简单,碰撞销毁的函数除边界外应该只有一个在DestroyByContact中
检查下,由于在此场景中脚本我还没改
if (other.tag == "Boundary" ) {
return;
}
Instantiate(explosion,transform.position,transform.rotation);
没有排除敌人间的碰撞,也没对爆炸效果为空处理
改为 if (other.tag == "Boundary" || other.tag == "Enemy")
{
return;
}
if (explosion != null)
{
Instantiate(explosion, transform.position, transform.rotation);
}
同时对几个陨石和飞船预设体添加标签Enemy
还是有问题
Enemy在GameController中生成,陨石也生成了,看来没什么问题,对比陨石添加的脚本Mover和DestroyByContact看来也没什么问题
禁用EvasiveManeuver脚本,像陨石一样正常掉落了,
检查EvasiveManeuver脚本可能改变敌方飞船速度和位置可能出现的地方,发现是 public Boundary boundary;这个变量展开没有填写
填写它,x轴要填的何时以免出界,z轴要填的略大,再运行,看起来飞的正常了,但是陨石和敌方飞船还是会互相撞毁,还需要检查