unity生涯的开始——太空飞船小游戏制作

news/2024/11/24 4:52:09/

初识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);}

在场景里做如下设置:
在这里插入图片描述
在这里插入图片描述

至此,一个太空飞船小游戏基本完成了

在这里插入图片描述

运行游戏:

在这里插入图片描述


http://www.ppmy.cn/news/278323.html

相关文章

html背景只向x轴扩散,地球化学(复习资料)

第一章 1.克拉克值&#xff1a;元素在地壳中的丰度&#xff0c;称为克拉克值。元素在宇宙体或地球化学系统中的平均含量称之为丰度。丰度通常用重量百分数(%)&#xff0c;PPM(百万分之一)或g/t表示。 2.富集矿物:指所研究元素在其中的含量大大超过它在岩石总体平均含量的那种矿…

SpringBoot:SpringBoot约定大于配置?②

前言&#xff1a; 这一句话&#xff0c;有些人看过就当看过了&#xff0c;对这句话的解读很多文章我是不满意的&#xff0c;里面蕴含的知识量和信息是极少人关注到的。 基于此&#xff0c;我讲两句。 一、领悟约定大于配置 字面意思&#xff1a;约定的东西要大于配置&a…

待解之谜——陨石带来了什么

我们看到的流星仅仅只有豌豆大小&#xff0c;从地球大气圈劫后余生的陨星则大得多。每天至少有10颗重量超过1千克的陨星砸到地球表面&#xff0c;但我们几乎看不见。 1799年在佛罗里达角观察到的流星雨 陨石是一种行星际物质碎片&#xff0c;有的灰尘般大小&#xff0c;有的直…

科技周刊第十期:自顶向下还是自底向上?

这里记录每周值得分享的东西&#xff0c;每周五发布。 封面图 美国国家航空航天局&#xff08;NASA&#xff09;在杰泽罗火山口&#xff08;Jezero crater&#xff09;的新家的火星毅力漫游者图片。&#xff08;出处&#xff09; 本周话题&#xff1a;自顶向下还是自底向上&…

据说这是国外最火的55套PS实用教程!

《国外最火的55套PS实用教程》 1、图像合成&#xff1a;创意水墨肖像   这是一个将水墨和人物照片合成的经典案例&#xff0c;教程涉及抠图、笔刷、蒙版、纹理素材使用等基础知识点&#xff0c;小技巧大效果&#xff0c;用腻了App的 滤镜预设&#xff0c;不妨也尝试下更多的…

永恒python奇美拉_石头山能自产甲烷,并自动燃烧,科学家称之为奇美拉火焰

99%科学家都同意——石头山不应该喷火。尽管如此&#xff0c;土耳其南部亚纳特斯公园的一座石山已经稳定地喷火超过2000年了。 这种从石头中喷火的现象&#xff0c;科学上称之为奇美拉&#xff08;神话中能喷火的怪兽&#xff09;火焰&#xff0c;也叫奇美拉渗透&#xff08;Ch…

U3D特效笔记——陨石术特效

第10节 时长:116:51 特效预览&#xff1a; 粒子拖尾的2种制作方法&#xff1a;粒子制作和动画制作 粒子制作 优点&#xff1a;简单缺点&#xff1a;无法预计落下位置制作方法&#xff0c;新建一个粒子&#xff0c;Rate&#xff1a;1&#xff0c;关闭shape&#xff0c;让它落下…

虚拟主机火云服务器区别,太一云大日如来陆压是什么来历在佛门担任什么职务...

中国远古神话中&#xff0c;红云是怎么诞生的&#xff1f;注&#xff1a;以下内容来原于《佛本是道》 红云老祖&#xff0c;是天地初开后天地间第一朵红云得道&#xff0c;有传说是鸿钧老祖善尸所化。 准圣实力&#xff0c;曾经与十二大祖巫、东皇太一、帝俊、镇元子等&#xf…