Unity学习笔记-切水果小游戏第一发
楼主学习Unity的时间有限,每天最多能抽出1小时看看,主要还是周末的时间了。
最近打算开发几个小游戏练练手。最简单的水果忍者就被我相中了,来吧,骚年,一起来一发。
先分析下切水果的几个要点:
1)手指滑过时的刀光、拖尾等:这个我打算用TrailRenderer来实现。效率先不考虑,能做出来再说。
2)水果的刷新:每隔一段时间,比如2s,刷新若干个水果向上抛物运动。这个用协同程序来完成刷新。抛出的时候向上加一个初速度即可。
3)水果的切割:从刀开始触发碰撞到碰撞结束之后,水果才算被切开。然后水果消失,copy出水果的左右两瓣,各自做水平抛物运动。
先完成这几点吧。虽然和大作有点实现上的出入,但是先做出来再细化吧。
1、刀光、拖尾
我的思路是:创建一个空的obj,给他加上Rigidbody2D、CircleCollider2D、TrailRenderer,然后在脚本中实现当鼠标滑到哪的时候,就把这个obj移动到哪。
设置如下:
代码编写如下:
using UnityEngine;
using System.Collections;public class Knife : MonoBehaviour {private Vector3 m_VecMouse = new Vector3(0,0,0);// Use this for initializationvoid Start () {}// Update is called once per framevoid Update () {if (!Input.GetMouseButton (0)) {return;}Vector3 ptScreen = Camera.main.WorldToScreenPoint (transform.position);m_VecMouse.x = Input.mousePosition.x;m_VecMouse.y = Input.mousePosition.y;m_VecMouse.z = ptScreen.z;transform.position = Camera.main.ScreenToWorldPoint (m_VecMouse);}void OnTriggerEnter2D(Collider2D other) {if (!Input.GetMouseButton (0)) {return;}}void OnTriggerExit2D(Collider2D other) {if (!Input.GetMouseButton (0)) {return;}audio.Play ();}
}
游戏效果如下:
感觉还是能接受的。关键是刀光是我自己ps的,技术有限。
2、水果的刷新
先准备下资源:
楼主到处抠图,找到了一个菠萝的psd,再将2dtk里面的箱子copy过来,修改下。
先准备几个预制体,如下:
预制体放到Resources目录下,主要是方便在脚本中加载。我上一篇博客介绍过。
每个水果准备4个预制体:box是完整的水果的,需要附加刚体、碰撞器、脚本等,box_a和box_b是两瓣水果,只需要刚体就行,box_mark是污渍,就是个贴图。
全部准备完毕,开始编写刷新的脚本,如下:
using UnityEngine;
using System.Collections;public class GameControl : MonoBehaviour {private GameObject[] m_Prefabs;public static readonly string[] FRUIT_DATA = {"box", "pineapple",};// Use this for initializationvoid Start () {m_Prefabs = new GameObject[FRUIT_DATA.Length];for (int i=0; i<FRUIT_DATA.Length; i++) {m_Prefabs[i] = Resources.Load ("Prefabs/"+FRUIT_DATA[i]) as GameObject;}StartCoroutine ("FlushFruit");}// Update is called once per framevoid Update () {}//刷新水果IEnumerator FlushFruit() {yield return new WaitForSeconds (3);while (true) {int iCount = Random.Range(1, 3);for (var i=0; i<iCount; i++) {int iIndex = Random.Range(0,FRUIT_DATA.Length);GameObject fruit = Instantiate(m_Prefabs[iIndex]) as GameObject;float fPosX = Random.Range(-4.0f, 4.0f);fruit.transform.position = new Vector3(fPosX, -4.0f, 0);float fAngle = Random.Range(-180.0f, 180.0f);fruit.transform.Rotate(Vector3.forward * fAngle);float fForce = Random.Range(7.0f, 12.0f);if (fPosX > 0.0f) {fruit.rigidbody2D.velocity = new Vector3(-1.0f, fForce, 0);} else {fruit.rigidbody2D.velocity = new Vector3(1.0f, fForce, 0);}}yield return new WaitForSeconds(1);}}
}
我是先暂停了3秒,才开始刷新水果的。毕竟从菜单场景进入本场景,先准备3s比较好。最后,这里还是可以加入3秒的倒计时显示的。比较人性化。
3、水果的切割效果
其实具体思路,最上面就写清楚了。很简单。被碰撞后,发现是刀,就销毁自己,然后创建两瓣水果,分别抛物+自由落体。
using UnityEngine;
using System.Collections;public class Fruit : MonoBehaviour {private GameObject m_PrefabFruitA;private GameObject m_PrefabFruitB;private GameObject m_PrefabFruitMark;// Use this for initializationvoid Start () {int i = name.IndexOf("(");string sName = name;if (i > 0) {sName = name.Substring (0, i);}m_PrefabFruitA = Resources.Load ("Prefabs/"+sName+"_a") as GameObject;m_PrefabFruitB = Resources.Load ("Prefabs/"+sName+"_b") as GameObject;m_PrefabFruitMark = Resources.Load ("Prefabs/"+sName+"_mark") as GameObject;}// Update is called once per framevoid Update () {transform.Rotate (Vector3.forward * Time.deltaTime * 20);}void OnTriggerExit2D(Collider2D other) {if (other.name == "LeftWall" || other.name == "RightWall" || other.name == "BottomWall") {Destroy (gameObject);return;} else if (other.name != "Knife") {return;}if (!Input.GetMouseButton (0)) {return;}Vector3 ptCur = transform.position;//删除完整的水果Destroy (gameObject);//创建污渍GameObject oFruitMark = Instantiate (m_PrefabFruitMark) as GameObject;oFruitMark.transform.position = ptCur;//给污渍随机一个旋转角度float fAngle = Random.Range (-180.0f, 180.0f);oFruitMark.transform.Rotate (Vector3.forward * fAngle);Destroy (oFruitMark, 5.0f);//左侧水果GameObject oHalfA = Instantiate (m_PrefabFruitA) as GameObject;oHalfA.transform.position = ptCur;fAngle = Random.Range (-180.0f, 180.0f);oHalfA.transform.Rotate (Vector3.forward * fAngle);oHalfA.rigidbody2D.velocity = Vector3.left * 3;Destroy (oHalfA, 3.0f);//右侧水果GameObject oHalfB = Instantiate (m_PrefabFruitB) as GameObject;oHalfB.transform.position = ptCur;fAngle = Random.Range (-180.0f, 180.0f);oHalfB.transform.Rotate (Vector3.forward * fAngle);oHalfB.rigidbody2D.velocity = Vector3.right * 3;Destroy (oHalfB, 3.0f);}
}
不过,好像原版里面,污渍不是这么显示的,是显示在其中一半水果的地方,也可能完全不显示污渍。不过这些是细节了。也不难处理。
还像那么回事吧。
现在还缺的就是界面和计分了。打算先用原生的做下试试。
等做的差不多了,再给来第二发。
最后,源码和资源: http://download.csdn.net/detail/leecrest/7084779。
Unity学习笔记-切水果小游戏第一发相关推荐
- Unity学习笔记[一] RollBall小游戏
目录 一.适配vs 二.初识Unity 2.1 unity核心模块 2.2 Unity基本操作和场景操作 2.3 世界坐标系和局部坐标系 2.4 工具栏 QWER 三.基础知识 3.1 基本组件 3. ...
- Web前端--HTML+CSS+JS实现仿切水果小游戏
目录 代码目录: 主要代码实现: 源码获取 效果演示: 代码目录: 主要代码实现: CSS样式: * {margin: 0;padding: 0;list-style-type: none;touch ...
- 用HTML+CSS+JS写的切水果小游戏它来了
前言 切水果游戏曾经是一款风靡手机的休闲游戏,今天要分享的就是一款网页版的切水果游戏, 由HTML+CSS+JS实现,虽然功能和原版的相差太大,但基本的功能具备,效果逼真.感兴趣的小伙伴可收藏学习(完 ...
- 基于CocosCreator的切水果小游戏(三)
在前面完成了基本的各种功能逻辑编写后,剩下的就主要是游戏得分的相关控制,以及新加了切水果时的刀划过的效果,炸弹爆炸时的光线.白屏效果等等.另外在文章最后面,放上了游戏所有代码以及下载链接. 首先这是整 ...
- 基于CocosCreator的切水果小游戏(一)
刚接触CocosCreator,写个小游戏练练手,熟悉一下cocos creator. 水果忍者的游戏,逻辑部分应该还是比较简单的,主要应该就涉及到水果的运动.分开,刀光效果等等. CocosCrea ...
- 韩顺平 javascript教学视频_学习笔记17_js超级玛丽小游戏
采用面向对象思想设计超级马里奥游戏人物 怎么用通过按键,来控制图片的位置 这个小游戏,用面向对象会很方便,不用面向对象会很麻烦很麻烦,比如以后要讲解的坦克大战的游戏,要是用纯的面向过程或函数式的方式写 ...
- 基于CocosCreator的切水果小游戏(二)
在之前完成开始界面和刀光的制作后,接下来完成水果的分开.掉落部分.另外,在完成一个炸弹的火星特效,完成后大概像这个样子: 切开水果效果: 炸弹的火星效果: 对于水果分开的话,在已有的素材中已经有切割完 ...
- Unity学习制作Flappy Bird小游戏(超详细全教程,可发布到PC、Web、Android平台)
本文中Flappy Bird基于Unity2019.4.7f1完成,源工程已部分代码改为适配安卓 flappy bird:一夜爆红的胖鸟 这是一款简单又困难的手机游戏,游戏中玩家必须控制一只胖乎乎的小 ...
- python购物街价格竞猜_Python学习笔记 - 数字竞猜小游戏
知识点 Python判断字符串的主要用法:str.isalnum():所有字符都是数字或字母 str.isalpha():所有字符都是字母 str.isdigit():所有字符都是数字,并且为整型数字 ...
最新文章
- 跟郎朗媳妇有得一拼的AI,只看弹琴动作,完美复现原声 | CVPR 2020
- 钩子运行机制HOOK
- 转wordpress小工具制作前台后台全解析
- 业内大佬怒喷 Windows 10 Cloud:最大的流氓软件!
- Scala连接mongodb数据库
- framebuffer驱动详解2——framebuffer驱动框架分析
- 典型案例:TL的困局,自己忙不过来,团队没有结果
- matlab 图像分割
- PC QQ客户端播放语音或者短视频消息无声音解决
- mvvm框架 android,mvvm框架原理 android 怎么使用mvvm框架
- 分枝定界法(Branch-and-Cut)
- Android 分享到Instagram
- 通过键盘输入(Java语言)
- 高中日语老师教师资格证考试成功通过前辈备考经验分享
- 在网页上打印时用javascript设置打印区域和不打印区域,分页等
- 私有云是伪命题:真正的私有云 ≈ 公有云
- python培训学费多少钱-天津南开区儿童学编程哪里好_学费多少钱,学什么软件...
- 哈工大深圳计算机学院复试分数线,哈尔滨工业大学深圳研究生院复试线:2011哈尔滨工业大学深圳研究生院复试分数线...
- 微信小程序中的本地存储
- linux查看蓝牙驱动版本号,linux蓝牙驱动代码阅读笔记