太空射击修改版

这个游戏呢是按照unity官方教程的SPACE SHOOTER来改编的,有的人可能会问为什么老是要做官方教程的例子。

这个呢我觉得既然学人家的东西,别人在官方中发布的教程肯定是比较有用的,每个游戏中涵盖的知识点都不同,而且最最最重要的官方教程的模型做好了,不用你操心,可以随时随地免费下载,国内有些教程也是不错的,但是涉及到收费这些问题,大家就自己去衡量一下值不值了。

话不多说,直接进入游戏主题,这个太空射击呢,我觉得相比滚球游戏要难一点

游戏的初始界面,由于我没有弄开始的界面,所以一开始就是游戏的开始了,没有“开始游戏”按钮这些东西


大家可以看到与官方例子是有些不同的,首先多了个血条

开始射击敌机、陨石,设定是每射击一个敌机加50分,一个陨石加10分


子弹我也修改了,原来的激光我个人感觉没有什么打击感,因为他的素材是图片的原因吧,所以我选择这个小钢球

当主角被敌机子弹打中时,血量是随机扣的,随机范围在10~20之间,这是被打了一下之后


这里能看到血量扣了15  并且有粒子特效的,就是中弹时会发出一个中弹特效

与敌机、陨石碰撞或血量为0时,主角阵亡


这个游戏中最大的改动是引入了一个boss,当分数达到12000时才会出现


只有击败boss才能胜利


关于这个游戏的代码有几个难点

1.控制敌人的间隔生成和敌人射击的间隔

void update()
{
   i++;
   if(i%100==0&&Random.value<=0.8)
      //shoot() or produceEnemy();
}

但其实这个方法并不好,因为这个游戏update函数的话是看电脑配置的,配置高的话就每秒执行的帧数多,反之则少。通过后面的学习我学习了一种新的方法,就是用计时器,比如说我设定每隔5秒生成敌人或射击

void update()
{
   timer+=Time.detaltime;
   if(timer>=5)
   {
       timer=0;
       //shoot()  or  produceEnemy()
   }
}

这里的Time.detaltime就是执行一帧的时间。这样就能比较靠谱的按时间执行命令

2.子弹朝主角方向飞行

一开始我是用movePosition(),查API的时候感觉应该是行的,可能是不清楚里面的原理,实战中并不可行,后来通过学习vector3方向向量时发现两个向量相减得到就是一个相对方向

GameObject go1 = GameObject.Instantiate(bullet, shoot1.position, shoot1.rotation);
Vector3 targetPosition = GameObject.Find("Player").GetComponent<PlayerMove>().getPosition();
Vector3 targetDir1 = targetPosition - go1.GetComponent<Transform>().position;
go1.GetComponent<Rigidbody>().velocity = targetDir1 * speed;

其中target Position就是主角的当前位置

3.控制主角,敌机飞出边界

用Mathf.Clamp这个函数是限制某个变量的值,例Mathf.Clamp(a,0,10)就是限制a的值在0,10之间,最小最大值均包含。

4.控住主角左右移动时侧身

用Quaternion.Euler这个函数返回围绕某个轴旋转多少度,在游戏中我们需要的是主角绕Z轴来旋转,所以

this.rotation = Quaternion.Euler(0.0f, 0.0f, GetComponent<Rigidbody>().velocity.x * -tilt);

为什么最后一个参数velocity.x不是z呢,因为这里左右控制的是要靠X轴上发生位移产生   tilt的话只是一个衡量他旋转角度的一个变量

5.滚动背景,首先的话要将两个场景(相同的)一上一下拼接好


代码的话每当第一张滚动完了就回到第一张的初始位置

transform.Translate(-Vector3.up * Time.deltaTime * mSpeed);


剩下的,我个人认为不是特别的难而且网上教程很多,大家可以自行去查阅

下面给个游戏的链接,有兴趣的小伙伴可以自己下载来玩

链接:https://share.weiyun.com/5NijeZZ 密码:ps96wk

总体的来说,这个游戏看起来不难,但是很多细节也让人头疼,就好像场景滚动,我是用两张图片拼接一起,然后当第一张滚动播放完毕马上“回到”原来一开始的位置,有的人可能会问为什么不能用一张图片,因为一张图片的播放完之后会看到黑色的背景,不好看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值