虽然大二寒假做过一次,但已经快忘光光了。。
所以这次要认真记录一下知识点!
//0415更新
新添实现敌机生成、单例模式添加音乐特效等
//0408更新
总共实现了背景轮播、控制飞机走动、发射子弹的功能。

有关背景图轮播

就是两块Image顺序向下滚动,当第一张图片顶部走出摄像机视野范围时,将其的位置改变到第二张图片的上方 (我也不知道咋描述,反正以后我自己能看懂就行嘿嘿) 。

void Update(){this.transform.Translate(Vector3.down * moveSpeed * Time.deltaTime);if (transform.position.y <= -BGLong){transform.position =new Vector3(transform.position.x,transform.position.y+BGLong * 2,transform.position.z);}}

有关发射子弹

1、首先先调整好子弹模型

以后切记一定要调整好模型的大小、缩放比例、旋转角度等,再在外面套个空物体!!所有操作只需在外面那层空物体上执行即可,模型就只是model,调整好了就不用再管它啦!
切记调位置调父物体,调角度调子物体(子物体位置(0,0,0)即可)!!!
还有切记也要调整好子物体与父物体之间的位置关系,一般情况下子物体位置都设成(0,0,0)即可,这个是相对位置,即相对父物体的位置差(也就是跟父物体在同一位置上)。

(特别是这种套中套中套的关系,一定要整理好各自之间的位置)

2、然后建好子弹生成位置

首先在Player下新建几个空物体,调整好位置、角度,后期子弹生成会按照此位置和角度生成。
注:可以给空物体加上颜色标识符,便于我们确定空物体的位置。

3、编写脚本生成子弹

在playerMove里编写子弹生成代码

void gunFire(){gameMessage.instance.PlayAudioClip("shoot");//导入预置体GameObject bullet = Resources.Load<GameObject>("bullet");//获取开火口下的子物体位置for (int i = 0; i < fireTrans.childCount; i++){//将子物体位置赋值给子弹GameObject bullet1= Instantiate(bullet,fireTrans.GetChild(i).position, fireTrans.GetChild(i).rotation);// bullet1.transform.SetParent(fireTrans.GetChild(i).transform);}}

然后在update里调用 按下鼠标右键发设子弹

if (Input.GetMouseButtonDown(0)){gunFire();}

4、编写控制子弹脚本

新建控制子弹脚本,并把它挂到子弹预置体上,需要实现子弹向上运动,以及三秒钟销毁、碰到敌人给敌人减血等功能。

void Update(){this.transform.Translate(new Vector3(0,1,0)* gunSpeed * Time.deltaTime);Destroy(gameObject, 3);}private void OnTriggerEnter(Collider other){if (other.gameObject.tag == "Enemy"){other.gameObject.GetComponent<EnemyHP>().enemyHP -= 30;}}

有关控制飞机走动

实现wasd键控制上下左右移动即可

float x = Input.GetAxis("Horizontal");float y = Input.GetAxis("Vertical");this.transform.Translate(new Vector3(x, y, 0) * playerSpeed);

有关实现敌机生成

每隔几秒随机生成一个敌机,并给它设定好位置范围即可

public class EnemyCreate : MonoBehaviour
{public GameObject[] Enemys;void Start(){//每延迟5秒执行一次InvokeRepeating("_EnemyBirth", 5, 1);}//生成敌人public void _EnemyBirth(){//随机生成敌人类型int i = Random.Range(0, Enemys.Length);GameObject obj = Instantiate(Enemys[i]);//随机生成敌人坐标(只需随机生成X轴即可,让敌机贴着背景最上面那个范围生成即可)float x = Random.Range(7.5f,12.5f);obj.transform.position = new Vector3(x, 5.5f, 9f);}
}

有关敌机血量以及分数控制

1、敌机的血量控制

新建一个EnemyHP,加在敌机预置体上,控制敌机血量
敌机血量初始值100,每被一个子弹击中都会减血量30,被打到四次便会击毙。

public class EnemyHP : MonoBehaviour
{public int enemyHP = 100;private float enemySpeed = 2f;void Update(){//敌机向下飞行this.transform.Translate(new Vector3(0, -1, 0) * enemySpeed * Time.deltaTime);if (enemyHP <= 0){Destroy(gameObject);UIText.score++;} }
}

在控制子弹脚本里可以调用EnemyHP脚本中的enemyHP变量来给敌机减血。

  private void OnTriggerEnter(Collider other){if (other.gameObject.tag == "Enemy"){other.gameObject.GetComponent<EnemyHP>().enemyHP -= 30;}}

敌机脚本的分数加一操作

  if (enemyHP <= 0){Destroy(gameObject);UIText.score++;}

这样设置一个静态变量相当于多个脚本都可以对此变量进行操作

2、分数控制

新建UIText脚本,管理玩家的分数。将score设成全局变量,这样所有的敌机脚本当执行摧毁敌机函数时,都可以对此变量进行加1操作

public class UIText : MonoBehaviour
{public Text text;//静态变量,多脚本改变这一个值public static int score=0;// Update is called once per framevoid Update(){text.text = "分数"+score;}
}

有关音效控制的单例模式

单例模式即把整个脚本设成唯一的全局变量

public class gameMessage : MonoBehaviour
{//整个脚本都是全局变量,在其他脚本都可以调用此脚本中的变量、函数//单例模式public static gameMessage instance;public AudioSource audioSouce;//音乐数组public AudioClip[] audioClip;Dictionary<string, AudioClip> dictionary = new Dictionary<string, AudioClip>();void Start(){//声明一下instance = this;foreach(AudioClip clip in audioClip){//向字典里储存dictionary.Add(clip.name, clip);}}void Update(){}/// <summary>/// 播放音乐片段/// </summary>/// <param name="audioName"></param>public void PlayAudioClip(string audioName){//判断字典中是否包含key=audioNameif (dictionary.ContainsKey(audioName)){AudioClip clipp = dictionary[audioName];audioSouce.clip = clipp;audioSouce.Play();}}
}

在别的脚本里便可以随意调用此脚本里的函数和变量
比如说就在开火函数里就可以调用函数播放背景音乐

void gunFire(){gameMessage.instance.PlayAudioClip("shoot");。。。。。}

【Unity学习笔记】大三下学期 射击类小游戏制作相关推荐

  1. 2017年上半年总结:大三下学期,马上大四,马上要毕业了.

    2017年上半年总结:大三下学期,马上大四,马上要毕业了. 当这学期马上结束了,想起要写今年上半年的总结了,写下标题才猛然惊起,我已结束大三,下学期就大四了啊? --不可思议且平淡的大三end 回忆这 ...

  2. 计算机专业大三上学期课程,武汉工程大学邮电与信息工程学院计算机专业大三下学期课程安排...

    技校网专门为您推荐的类似问题答案 问题1: 四川大学锦江学院机械工程系数控专业大三下学期要学哪些课程 你去学校的校网查啊,里面有各种安排的.每个学校都有啊.不过是在学分制系统里,我不是这个学校的所以进 ...

  3. HTML5 Canvas 射击类小游戏 平滑的移动 思路

    这篇博客主要讲了如何处理HTML5 Canvas 游戏中的角色移动问题. 笔者这几天做了一个 HTML5 Canvas 的射击类小游戏,嗯,名字叫做<DroppingBalls>,大概就是 ...

  4. HTML5/Canvas太空射击类小游戏源码

    下载地址 JavaScript HTML5/Canvas太空射击类小游戏源码,非常值得学习的一款js射击小游戏代码,美术有点老旧,但是代码是完全开源的,有参考价值. dd:

  5. 大三下学期第四周总结

    今天是蓝桥杯省赛的比赛日子,但是考场却发生机器无端蓝屏,重启十几次无果.浪费了两个多小时,组委会最终延时40分组左右.这次考试感觉很郁闷.根本无法写题.对于自己来说,今年无缘省三.也可惜了近一个月的算 ...

  6. 谈谈大三下学期找实习的经历(宇视科技 亚信联创 网新恒天 虹软)

    本人是浙江工业大学大三软件工程专业的学生,大学在校期间做过几个项目,参加过一些比赛,个人主要往Java开发这一方面发展,现在5月下旬刚好要去找相应的企业进行实习,分享一下自己的笔试面试经历,与君共勉! ...

  7. Scala学习笔记(三)——面向对象、类、抽象类、伴生、内部类、样例类、枚举、泛型类、类型边界、型变、特质、动态混入、包

    Scala面向对象 Scala面向对象 一.基本概念 1.类的概念 2.类成员访问修饰符 二.类 1.类的定义 2.类的继承 3.抽象类 4.单例对象 5.伴生 6.内部类 7.样例类 8.枚举 9. ...

  8. 【Unity入门计划】CreatorKitFPS:第一人称射击3D小游戏

    目录 Unity学习教程 1 添加并载入项目资源 添加项目资源 载入到Unity 2 载入Scene 3 从预制体添加射击Targets 4 管理游戏对象 4.1创建分组关系 4.2 区分相对坐标&a ...

  9. [安卓] 12、开源一个基于SurfaceView的飞行射击类小游戏

    前言  这款安卓小游戏是基于SurfaceView的飞行射击类游戏,采用Java来写,没有采用游戏引擎,注释详细,条理比较清晰,适合初学者了解游戏状态转化自动机和一些继承与封装的技巧. 效果展示    ...

最新文章

  1. 【SSM框架系列】Mybatis映射配置文件与核心配置文件深入
  2. RNN的手写数字识别
  3. AcWing算法基础课 Level-2 第三讲 搜索与图论
  4. RocketMQ角色介绍
  5. 人工智能 - paddlepaddle飞桨 - 深度学习基础教程 - 线性回归
  6. 向集合中添加Person类型并对其排序
  7. 深度学习基础系列(十)| Global Average Pooling是否可以替代全连接层?
  8. [转]通过崩溃地址找错误行数之Delphi版
  9. React-Native 在 mac 下 build 问题
  10. 物联网可靠连接——PLC-IOT电力线载波通讯
  11. 完美收官!Fortinet Accelerate 2022中国站在北京落幕
  12. 串口调试助手源码java_Java串口调试助手工程源码
  13. (第六章)hive之查询
  14. 最新国家行政区划数据下载(截止2017年10月31日)目前2019.1.21仍为最新数据
  15. 共线方程求解外方位元素--单片空间后方交会
  16. 【Linux 内核 内存管理】内存映射相关数据结构 ③ ( vm_area_struct 结构体成员分析 | shared 成员 | anon_vma_chain 成员 | anon_vma 成员 )
  17. 如何避免2.4GHz ISM频段下各种无线设备的干扰
  18. html5学习笔记之十(微数据)
  19. c语言筛法求一个范围内的素数,运用埃拉托色尼筛法求解一定范围内的素数.docx...
  20. 英雄联盟怎么解除小窗口_英雄联盟手游亚索怎么操作-英雄联盟手游亚索操作攻略...

热门文章

  1. 51自学网java基础教程 花钱买来
  2. CSS合并单元格四种方式:table/display/flex/grid
  3. 【English】口头禅
  4. NX/UG二次开发环境配置方法—史上最详细版(以NX11.0和Visual Studio 2017为例)
  5. 服务器302跳转信息,RestTemplate 支持服务器内302重定向
  6. 动态规划DP算法理解
  7. 移动端shell软件 JuiceSSH(安卓版),SSH助手(苹果版)访问linux系统,window使用x shell6方便
  8. 代理ip中的通道数是什么意思?
  9. 阿里iconfont图标的引入与使用:
  10. java的nextint种子_java.util.Scanner.nextInt(int radix)方法实例