楼主学习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学习笔记-切水果小游戏第一发相关推荐

  1. Unity学习笔记[一] RollBall小游戏

    目录 一.适配vs 二.初识Unity 2.1 unity核心模块 2.2 Unity基本操作和场景操作 2.3 世界坐标系和局部坐标系 2.4 工具栏 QWER 三.基础知识 3.1 基本组件 3. ...

  2. Web前端--HTML+CSS+JS实现仿切水果小游戏

    目录 代码目录: 主要代码实现: 源码获取 效果演示: 代码目录: 主要代码实现: CSS样式: * {margin: 0;padding: 0;list-style-type: none;touch ...

  3. 用HTML+CSS+JS写的切水果小游戏它来了

    前言 切水果游戏曾经是一款风靡手机的休闲游戏,今天要分享的就是一款网页版的切水果游戏, 由HTML+CSS+JS实现,虽然功能和原版的相差太大,但基本的功能具备,效果逼真.感兴趣的小伙伴可收藏学习(完 ...

  4. 基于CocosCreator的切水果小游戏(三)

    在前面完成了基本的各种功能逻辑编写后,剩下的就主要是游戏得分的相关控制,以及新加了切水果时的刀划过的效果,炸弹爆炸时的光线.白屏效果等等.另外在文章最后面,放上了游戏所有代码以及下载链接. 首先这是整 ...

  5. 基于CocosCreator的切水果小游戏(一)

    刚接触CocosCreator,写个小游戏练练手,熟悉一下cocos creator. 水果忍者的游戏,逻辑部分应该还是比较简单的,主要应该就涉及到水果的运动.分开,刀光效果等等. CocosCrea ...

  6. 韩顺平 javascript教学视频_学习笔记17_js超级玛丽小游戏

    采用面向对象思想设计超级马里奥游戏人物 怎么用通过按键,来控制图片的位置 这个小游戏,用面向对象会很方便,不用面向对象会很麻烦很麻烦,比如以后要讲解的坦克大战的游戏,要是用纯的面向过程或函数式的方式写 ...

  7. 基于CocosCreator的切水果小游戏(二)

    在之前完成开始界面和刀光的制作后,接下来完成水果的分开.掉落部分.另外,在完成一个炸弹的火星特效,完成后大概像这个样子: 切开水果效果: 炸弹的火星效果: 对于水果分开的话,在已有的素材中已经有切割完 ...

  8. Unity学习制作Flappy Bird小游戏(超详细全教程,可发布到PC、Web、Android平台)

    本文中Flappy Bird基于Unity2019.4.7f1完成,源工程已部分代码改为适配安卓 flappy bird:一夜爆红的胖鸟 这是一款简单又困难的手机游戏,游戏中玩家必须控制一只胖乎乎的小 ...

  9. python购物街价格竞猜_Python学习笔记 - 数字竞猜小游戏

    知识点 Python判断字符串的主要用法:str.isalnum():所有字符都是数字或字母 str.isalpha():所有字符都是字母 str.isdigit():所有字符都是数字,并且为整型数字 ...

最新文章

  1. 跟郎朗媳妇有得一拼的AI,只看弹琴动作,完美复现原声 | CVPR 2020
  2. 钩子运行机制HOOK
  3. 转wordpress小工具制作前台后台全解析
  4. 业内大佬怒喷 Windows 10 Cloud:最大的流氓软件!
  5. Scala连接mongodb数据库
  6. framebuffer驱动详解2——framebuffer驱动框架分析
  7. 典型案例:TL的困局,自己忙不过来,团队没有结果
  8. matlab 图像分割
  9. PC QQ客户端播放语音或者短视频消息无声音解决
  10. mvvm框架 android,mvvm框架原理 android 怎么使用mvvm框架
  11. 分枝定界法(Branch-and-Cut)
  12. Android 分享到Instagram
  13. 通过键盘输入(Java语言)
  14. 高中日语老师教师资格证考试成功通过前辈备考经验分享
  15. 在网页上打印时用javascript设置打印区域和不打印区域,分页等
  16. 私有云是伪命题:真正的私有云 ≈ 公有云
  17. python培训学费多少钱-天津南开区儿童学编程哪里好_学费多少钱,学什么软件...
  18. 哈工大深圳计算机学院复试分数线,哈尔滨工业大学深圳研究生院复试线:2011哈尔滨工业大学深圳研究生院复试分数线...
  19. 微信小程序中的本地存储
  20. linux查看蓝牙驱动版本号,linux蓝牙驱动代码阅读笔记

热门文章

  1. matlab中double、im2double、mat2gray区别
  2. 宝鲲财经:炒汇的正确逃顶技巧
  3. It’s about time
  4. 罗德里格斯公式及其推导
  5. 物联网传感技术——谐振式传感器
  6. 2023-JavaSE最新整理面试题-面向对象异常集合专题
  7. 利用FFmpeg转码生成MP4文件
  8. 微信Unionid与Openid的区别
  9. 微分matlab程序,数值微分及其matlab程序.doc
  10. 如何设置网页关键词与页面描述