初识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生涯的开始——太空飞船小游戏制作相关推荐

  1. 基于pygame的射击小游戏制作(一)让飞船动起来

    基于pygame的射击小游戏制作(一)让飞船动起来 一.文件结构 alien_invasion.py 是整个系统的主文件,用来创建游戏中的一系列对象,ai_settings存储设置.screen存储显 ...

  2. Unity 之 发布字节抖音小游戏

    Unity 之 发布字节抖音小游戏 一,准备工作 1.1 注册字节开发者后台 1.2 Unity版本说明 1.3 检查AppID是否有效 二,开始集成 2.1 创建项目 2.2 接入SDK 三,发布游 ...

  3. unity小游戏制作之见缝插针

    unity小游戏制作之见缝插针 先看效果图这个游戏是一个入门的小游戏,主要技术就是圆盘的旋转,针跟随圆盘旋转以及分数累加等 游戏先拖入一个圆,更改格式为2D然后建立脚本使其转动 public clas ...

  4. 如何使用 Unity制作微信小游戏,微信小游戏制作方案 最新完整详细教程来袭【持续更新】

    前言 Unity实战篇 | Unity制作微信小游戏,最新详细教程来袭[持续更新] 一.方案特点 二.技术原理 三.转换案例 四.安装与使用方法 4.1 查阅推荐的引擎版本,安装时选择WebGL组件 ...

  5. 基于Unity设计的井字棋小游戏

    资源下载地址:https://download.csdn.net/download/sheziqiong/86871335 资源下载地址:https://download.csdn.net/downl ...

  6. Unity 之 发布WebGL转微信小游戏过程详解

    Unity 之 发布WebGL转微信小游戏 前言 一,准备工作 1.1 下载插件 1.2 下载Unity 1.3 安装微信开发者工具 1.4 创建小程序 二,开始转换 2.1 创建项目 2.2 Mac ...

  7. 微信小游戏制作坦克大战(四)添加敌方坦克,敌方坦克可以随机移动

    微信小游戏制作坦克大战(四)添加敌方坦克,敌方坦克可以随机移动 首先导入敌方坦克素材 重命名为敌方坦克1 敌方坦克也移动到屏幕外面,后面使用克隆体来显示. 我们给敌方坦克添加事件 好的,现在敌方坦克已 ...

  8. 微信小游戏制作坦克大战(六)碰撞检测,主角坦克碰到敌方坦克、炮弹爆炸

    微信小游戏制作坦克大战(六)碰撞检测,主角坦克碰到敌方坦克.炮弹爆炸 导入坦克爆炸效果的图片和声音素材 给主角坦克添加事件 给爆炸动画添加事件 当主角坦克碰到敌方坦克或者炮弹时显示爆炸效果 下一篇文章 ...

  9. 微信小游戏制作坦克大战(五)敌方坦克可以发射炮弹

    微信小游戏制作坦克大战(五)敌方坦克可以发射炮弹 在资源管理器中复制炮弹,重命名为敌人坦克的炮弹. 修改敌方坦克的积木 给敌方坦克炮弹添加事件 现在,敌方坦克已经可以自动发射炮弹啦. 下一篇文章:微信 ...

  10. Java飞机小游戏制作简单实现详细小结

    567881@ftJava小游戏开发 Java飞机小游戏制作简单实现小结 本人原来是个技术小白,寒假我跟着高淇老师的Java300集开始自学Java,跟着做了一个飞机大战小游戏,已经实现了飞机的自由移 ...

最新文章

  1. SSH框架整合(代码加文字解释)
  2. wampserver配置服务
  3. 相关及其快速算法的C++实现
  4. 整合shiro出现UnsatisfiedDependencyException,org.springframework.beans.factory.BeanNotOfRequiredTypeExcep
  5. SpringBoot服务整合(整合邮件服务、定时调度、Actuator监控)
  6. 关于逐项作用函数的用法
  7. ThinkPHP5框架接入阿里云短信最新版(原大鱼)的方法
  8. 29日直播预告丨Oracle PDB Refresh实战分享
  9. PowerDesigner--创建概念数据模型;并生成逻辑数据模型/物理数据模型/数据库SQL脚本
  10. Promise 的四种常用方法。
  11. beego使用php,使用GO语言Beego框架开发一个简易留言板
  12. CentOS6.5安装python3.7
  13. python 优点_python语言有什么优势
  14. List集合之CopyOnWriteArrayList
  15. google crx Hoxx 下载
  16. 联想S3机子密码设置
  17. 在android移动终端运行android应用程序
  18. python欢迎你、某某某同学_python __xx__的定义和用处
  19. linux系统安装(CentOS 7) 和软件安装(mysql,tomcat,jdk)
  20. mongodb 常用语法

热门文章

  1. 和威金作者的聊天记录 (附:VIKING专杀及杀毒思路)
  2. 猫哥教你写爬虫 034--爬虫-BeautifulSoup实践
  3. SpringBoot - 自动装配 源码解析
  4. Golang go-svc包源码分析
  5. 斐波那契数列(兔子数列)
  6. go的内存管理和内存逃逸
  7. 两天两夜,1M图片优化到100kb
  8. 纯干货!盘点各行业程序员必备技能
  9. 不属于微型计算机的技术特标,计算机组成原理汇总
  10. 迷你助手世界隐私条款