unity生涯的开始——太空飞船小游戏制作
初识unity做的一个小 demo
1、飞船等场景的设置
场景布局:把灯光放到合适的位置,摄像机拉到灯光上方,在scene里面新建一个quad作为背景,给它贴上材质图,把飞船player拖到场景中,调整位置,在飞船尾巴添加一个喷火特效。
2、给飞船写一个飞行脚本
Player.cs:
public float speed = 5.0f;float moveH = Input.GetAxis("Horizontal");float moveV = Input.GetAxis("Vertical");Vector3 move = new Vector3(moveH, 0, moveV);transform.Translate(speed * move * Time.deltaTime);
在unity里把player.cs拖拽到飞船那里,作为飞船的子对象,这样用键盘上上下左右键就可以控制飞船运动了。
3、做子弹的飞行和prefab
在hierarchy新建一个game empty命名为bolt,新建一个quad,作为bolt子对象,给它贴上一个materials,子弹的模型,调整子弹在飞船下方的位置,也给子弹做一个飞行脚本bolt_move.cs:
public float speed = 5.0f;//沿着z轴正方向飞行// Update is called once per framevoid Update () {// transform.Translate(0,0,speed*Time .deltaTime);transform.Translate(Vector3.forward * speed * Time.deltaTime);
同样把脚本拖到子弹那里
给子弹添加刚体组件和胶囊体碰撞器:
给子弹做一个预制包,放到_prefab里:
直接把hierarchy里的bolt拖拽到assets里的_prefab就行。
4、子弹的发射
做一个子弹发射的脚本,放到player里:
//时间间隔public float fireRate = 0.5f;//每隔0.5f发射子弹public float nextFire = 0.0f;public GameObject shot;public Transform shotSpawn;//点击鼠标发射子弹if (Input.GetButton("Fire1") && Time.time > nextFire){//存在问题的一系列的子弹出来了,需要用时间控制子弹的发射nextFire = Time.time + fireRate;//Instantiate(实例化物体‘位置’角度)Instantiate(shot, shotSpawn.position, shotSpawn.rotation);
点击player,在inspector完成设置:
运行一下,子弹就会从飞机下方发射出来.
5、子弹的销毁和碰撞检测
新建一个cube命名为boundary,调整大小,位置,使它把飞船包围住
做一个子弹销毁的脚本destbyboundary.cs:
void OnTriggerExit(Collider other){Destroy(other.gameObject);}
拖拽到boundary里:
相关设置如下
运行一下,子弹飞行出boundary边界的时候就是销毁.
6、添加陨石运动和销毁
新建一个gameobject命名为Asterial,拖拽一个陨石模型作为子对象,调整其在场景中的位置,给它做一个运动脚本as_move.cs:
public float speed = 5.0f;void Update () {transform.Translate(Vector3.back * speed * Time.deltaTime);}
并为其添加刚体组件和胶囊体碰撞器
同时给它做一个预制包,一会要自动出现.
7、添加tag
在as_move.cs脚本中添加下面代码:
//小行星rigidbody和collider trigger,boundary有collider trigger,当trigger enter的时候自然会响应了。
void OnTriggerEnter(Collider other){//print(other.name);//相应的名称就是boundary,销毁就是boundary,所以需要修改一下//实例化粒子物体if (other.tag == "Boundary")return;gameController.GameOver();Destroy(other.gameObject);
}
在此做属性响应修改.
8、陨石和飞船的爆炸
在as_move.cs添加如下代码:
public GameObject explosion;public GameObject playerExplosion;//实例化小行星的爆炸粒子效果,在小行星的位置处生成粒子效果Instantiate(explosion, transform.position, transform.rotation);//实例化player,也就是飞船的爆炸例子效果,在飞船的位置处生成粒子效果if (other.tag == "Player"){Instantiate(playerExplosion, other.transform.position, other.transform.rotation);}Destroy(other.gameObject);//小行星被击中后玩家分值增加,需要把增加的这个过程通知到Text控件显示gameController.AddScore(scoreValue);Destroy(gameObject);}
如图设置
运行之后就会出现射击陨石和碰撞之后的爆炸效果了.
9、陨石批量生成:
这里要用到一个协程的方法:
IEnumerator WaitAndPrint()
{yield return new WaitForSecond(5);
print(“WaitAndPrint”+Time.time);
}
新建一个gameobject命名为gamecontroller,新建脚本gamecontroller.cs:
//实例化小行星的物体,位置public GameObject hazard;//代表小行星物体public Vector3 spawnValues;//代表生成的x轴和z轴的变化值private Vector3 spawnPosition = Vector3.zero;//代表生成位置private Quaternion spawnRotation;public int hazardCount = 6;//延迟生成的时间public float spawnWait;//不希望游戏一开始就立刻产生小行星,而是等待一段时间,加人变量来控制等待时间
public float startWait = 1.0f;//生成小行星的代码IEnumerator SpawnWaves(){yield return new WaitForSeconds(startWait);while (true){for (int i = 0; i < hazardCount; i++){spawnPosition.x = Random.Range(-spawnValues.x, spawnValues.x);spawnPosition.z = spawnValues.z;spawnRotation = Quaternion.identity;Instantiate(hazard, spawnPosition, spawnRotation);yield return new WaitForSeconds(spawnWait);}yield return new WaitForSeconds(2.0f);void Start () {StartCoroutine(SpawnWaves());}
根据场景设置所需参数
运行一下陨石就可以随机生成了.
10、做一个不同脚本之间的一种数据传递,做一个游戏的生命周期:记录得分,游戏结束,和重新开始
在as_move.cs添加如下代码:
private GameController gameController;public int scoreValue;//增加的分值gameController.GameOver();void Start(){//将这里定义的gamecontroller和之前的gamecontroller绑定,一般来说//所以我们先通过findwithtag找到物体,得通过getcomponent找到gamecontroller脚本GameObject go = GameObject.FindWithTag("GameController");//注意,必须在属性响应那里做修改if (go != null)gameController = go.GetComponent<GameController>();elseDebug.Log("找不到tag为GameController的对象");if (gameController == null)Debug.Log("找不到脚本GameController.cs");}
在gamecontroller.cs添加如下代码:
public Text ScoreText;private int score;public Text gameOverText;private bool gameOver;public Text restartText;private bool restart;if (gameOver){restartText.text = "按【R】重新开始";restart = true;break;}}}// Use this for initializationvoid Start () {score = 0;ScoreText.text = "得分: " + score;gameOverText.text = "";gameOver = false;restartText.text = "";restart = false;StartCoroutine(SpawnWaves());}//修改分值public void AddScore(int newScoreValue){score += newScoreValue;ScoreText.text = "得分: " + score;}//修改结束的属性public void GameOver(){gameOver = true;gameOverText.text = "游戏结束";}void Update(){if (restart){if (Input.GetKeyDown(KeyCode.R))Application.LoadLevel(Application.loadedLevel);}
在场景里做如下设置:
至此,一个太空飞船小游戏基本完成了
运行游戏:
unity生涯的开始——太空飞船小游戏制作相关推荐
- 基于pygame的射击小游戏制作(一)让飞船动起来
基于pygame的射击小游戏制作(一)让飞船动起来 一.文件结构 alien_invasion.py 是整个系统的主文件,用来创建游戏中的一系列对象,ai_settings存储设置.screen存储显 ...
- Unity 之 发布字节抖音小游戏
Unity 之 发布字节抖音小游戏 一,准备工作 1.1 注册字节开发者后台 1.2 Unity版本说明 1.3 检查AppID是否有效 二,开始集成 2.1 创建项目 2.2 接入SDK 三,发布游 ...
- unity小游戏制作之见缝插针
unity小游戏制作之见缝插针 先看效果图这个游戏是一个入门的小游戏,主要技术就是圆盘的旋转,针跟随圆盘旋转以及分数累加等 游戏先拖入一个圆,更改格式为2D然后建立脚本使其转动 public clas ...
- 如何使用 Unity制作微信小游戏,微信小游戏制作方案 最新完整详细教程来袭【持续更新】
前言 Unity实战篇 | Unity制作微信小游戏,最新详细教程来袭[持续更新] 一.方案特点 二.技术原理 三.转换案例 四.安装与使用方法 4.1 查阅推荐的引擎版本,安装时选择WebGL组件 ...
- 基于Unity设计的井字棋小游戏
资源下载地址:https://download.csdn.net/download/sheziqiong/86871335 资源下载地址:https://download.csdn.net/downl ...
- Unity 之 发布WebGL转微信小游戏过程详解
Unity 之 发布WebGL转微信小游戏 前言 一,准备工作 1.1 下载插件 1.2 下载Unity 1.3 安装微信开发者工具 1.4 创建小程序 二,开始转换 2.1 创建项目 2.2 Mac ...
- 微信小游戏制作坦克大战(四)添加敌方坦克,敌方坦克可以随机移动
微信小游戏制作坦克大战(四)添加敌方坦克,敌方坦克可以随机移动 首先导入敌方坦克素材 重命名为敌方坦克1 敌方坦克也移动到屏幕外面,后面使用克隆体来显示. 我们给敌方坦克添加事件 好的,现在敌方坦克已 ...
- 微信小游戏制作坦克大战(六)碰撞检测,主角坦克碰到敌方坦克、炮弹爆炸
微信小游戏制作坦克大战(六)碰撞检测,主角坦克碰到敌方坦克.炮弹爆炸 导入坦克爆炸效果的图片和声音素材 给主角坦克添加事件 给爆炸动画添加事件 当主角坦克碰到敌方坦克或者炮弹时显示爆炸效果 下一篇文章 ...
- 微信小游戏制作坦克大战(五)敌方坦克可以发射炮弹
微信小游戏制作坦克大战(五)敌方坦克可以发射炮弹 在资源管理器中复制炮弹,重命名为敌人坦克的炮弹. 修改敌方坦克的积木 给敌方坦克炮弹添加事件 现在,敌方坦克已经可以自动发射炮弹啦. 下一篇文章:微信 ...
- Java飞机小游戏制作简单实现详细小结
567881@ftJava小游戏开发 Java飞机小游戏制作简单实现小结 本人原来是个技术小白,寒假我跟着高淇老师的Java300集开始自学Java,跟着做了一个飞机大战小游戏,已经实现了飞机的自由移 ...
最新文章
- SSH框架整合(代码加文字解释)
- wampserver配置服务
- 相关及其快速算法的C++实现
- 整合shiro出现UnsatisfiedDependencyException,org.springframework.beans.factory.BeanNotOfRequiredTypeExcep
- SpringBoot服务整合(整合邮件服务、定时调度、Actuator监控)
- 关于逐项作用函数的用法
- ThinkPHP5框架接入阿里云短信最新版(原大鱼)的方法
- 29日直播预告丨Oracle PDB Refresh实战分享
- PowerDesigner--创建概念数据模型;并生成逻辑数据模型/物理数据模型/数据库SQL脚本
- Promise 的四种常用方法。
- beego使用php,使用GO语言Beego框架开发一个简易留言板
- CentOS6.5安装python3.7
- python 优点_python语言有什么优势
- List集合之CopyOnWriteArrayList
- google crx Hoxx 下载
- 联想S3机子密码设置
- 在android移动终端运行android应用程序
- python欢迎你、某某某同学_python __xx__的定义和用处
- linux系统安装(CentOS 7) 和软件安装(mysql,tomcat,jdk)
- mongodb 常用语法