只做学习之用,无任何商业元素
如有侵权,即删除

首先,载入NGUI包,完成后如下图所示:

新建一个Sprite

然后,设置UIRoot

注意:图中画圈的部分——Scaling Style设置为“Fixed Size On Mobiles“顾名思义,整个画面开启UI整体缩放支持(在手机中)

调整Main Camera的监控范围,使得和UIRoot下的Camera同样大小。

开始新建图集(Fruit)

将图片选中,所有图片就会出现在以后View Sprites下,如图

然后在刚才新建立的Sprite(改名为BackImg)中选择新建立的图集,选择已经准备好的背景图

将BackImg的Anchors

改为

并做好相应的设置——左对左,右对右,上对上,下对下,值设置为0,这样做是为了在任何手机分辨率下保持全屏。

这样,背景图制作完毕,接下来是刀子的制作:
刀子利用贝塞尔曲线(Line Renderer)制作,新建立一个Sprite(改名为KnifeLine),图集设置为”None“,如图

添加Line Renderer

对其进行设置,图中圈内是刀子的图片——格式为Texture

然后在其中添加脚本KnifeLine.cs,使刀子能在屏幕中显示出来
代码如下:

using UnityEngine;
using System.Collections;public class KnifeLine : MonoBehaviour {public static KnifeLine instace;//方便随时访问这个实例//计算刀子是以什么角度切割的public float tan;//设置刀子"头"和"尾"的颜色public Color startColor;public Color nextColor;//设置刀子的"拐点"Vector3 startPosition;Vector3 nextPosition;Vector3 midPositon;bool isNext = false;//刀子在屏幕滑行的判断LineRenderer line; //贝塞尔曲线的定义public int maxCount = 4;//至多有几个拐点int nowCount = 1;//当前拐点_至少有两个拐点(0,1)//最开始的拐点存在时间public float allTime = 0.5f;float time = 0;void Awake(){//在Awake中初始化,方便随时访问这个实例instace = this; }// Use this for initializationvoid Start(){time = allTime;//时间初始化line = GetComponent<LineRenderer>();//找到拥有这个脚本物体的LineRendererline.SetColors(startColor, nextColor);////设置刀子"头"和"尾"的颜色}// Update is called once per framevoid Update(){//如果点击屏幕,且不是切割状态if (Input.GetMouseButton(0) && !isNext){isNext = true;//准备进行滑行//屏幕坐标与世界坐标的转换Vector3 worldPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);startPosition = worldPosition;//设置贝塞尔曲线 点的多少line.SetVertexCount(1);//设置贝塞尔曲线 第0个点的坐标line.SetPosition(0, startPosition);}//处于滑行中else if (Input.GetMouseButton(0)){//切割时间递减,保证刀子轨迹存留时间正常time -= Time.deltaTime;//屏幕坐标与世界坐标的转换Vector3 worldPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);nextPosition = worldPosition;//刀子的切割角度记录tan = Mathf.Atan2(startPosition.y, worldPosition.y);//将此时第"1"个点暂存(还有第"0"个点)if (nowCount == 1){midPositon = worldPosition;}//设置贝塞尔曲线 点的多少line.SetVertexCount(nowCount+1);//设置贝塞尔曲线 第nowCount个点的坐标line.SetPosition(nowCount, nextPosition);//如果刀子痕迹存留时间过长if (time <= 0){//当前贝塞尔曲线的点+1nowCount++;//如果出现新的点if (nowCount > maxCount){//将当前点的标志设置为初始状态nowCount = 1;//将当前第"1"个点设置为新状态的第"0"个点line.SetPosition(0, midPositon);}//刀子轨迹存在时间重置time = allTime;}}//刀子切割完毕,重置状态if (Input.GetMouseButtonUp(0)){nowCount = 1;time = allTime;isNext = false;line.SetVertexCount(0);}}
}

添加在KnifeLine中

此时,运行

接下来是水果的制作
新建立一个Sprite(改名为Apple),图集设置为”Fruit“,选择“apple02”

然后添加组件Rigidbody和Capsule Collider

添加脚本CutFruit.cs

using UnityEngine;
using System.Collections;public class CutFruit : MonoBehaviour {public static CutFruit instace;//方便随时访问这个实例//切开后向左右两边飞的水果物体public GameObject fruitLeft;public GameObject fruitRight;//暂存"切开后向左右两边飞的水果物体"GameObject myFruitLeft;GameObject myFruitRight;//不同方向切,产生不同的水果"渣滓"public GameObject cutFruitZha;public GameObject cutFruitZhi;//如果产生金苹果public GameObject goldApple;void Akake(){instace = this;}// Use this for initializationvoid Start(){}// Update is called once per framevoid Update(){//是否按下鼠标bool isMouseDown = Input.GetMouseButton(0);if (isMouseDown){//射线,准备击打苹果Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);RaycastHit hit;//如果击中if (collider.Raycast(ray, out hit, 20)){//产生"切开后向左右两边飞的水果物体"myFruitLeft = (GameObject)Instantiate(fruitLeft, transform.position, Quaternion.AngleAxis(Random.Range(50, 140), Vector3.forward));myFruitLeft.rigidbody.velocity = new Vector3(-2, 4);myFruitRight = (GameObject)Instantiate(fruitRight, transform.position, Quaternion.AngleAxis(Random.Range(-50, -140), Vector3.forward));myFruitRight.rigidbody.velocity = new Vector3(2, -4);//如果产生的是"金苹果"if (this.gameObject.name == "GoldApple(Clone)"){GameObject fruit = (GameObject)Instantiate(goldApple, transform.position, Quaternion.identity);Destroy(fruit, 2);}//计算角度,产生不同的水果残渣if (Mathf.Abs(KnifeLine.instace.tan) > 0.5 && Mathf.Abs(KnifeLine.instace.tan) < 1.5){GameObject fruit = (GameObject)Instantiate(cutFruitZhi, transform.position, Quaternion.identity);Destroy(fruit, 2);}else{GameObject fruit = (GameObject)Instantiate(cutFruitZha, transform.position, Quaternion.identity);Destroy(fruit, 2);}//切开的水果,水果残渣,过一会都要"注销的"Destroy(myFruitLeft, 2);Destroy(myFruitRight, 2);Destroy(this.gameObject);}}}
}

然后设置为”预制件”

依此类推,制作“香蕉”、“金苹果”、“梨”、“等等”

然后制作“产生水果”
有两种方法,这里选用其中简单的一种
建立一个空物体

添加脚本CreateFruit.cs

using UnityEngine;
using System.Collections;public class CreateFruit : MonoBehaviour
{public static CreateFruit instace;//方便随时访问这个实例//产生时间的设定public float timeMin = 1;public float timeMax = 3;//中间时间设定float midTime = 0;//发射水果水平方向的力public float xMin = 500;public float xMax = 580;//发射水果垂直方向的力public float yMin = 520;public float yMax = 600;//存放水果的图集public UIAtlas fruit;//可切割脚本,没有这个脚本,水果不可切割public CutFruit exampleApple;void Awake(){//在Awake中初始化,方便随时访问这个实例instace = this;}void Start(){//初始化水果发射时间midTime = Random.Range(timeMin, timeMax);}void Update(){midTime -= Time.deltaTime;//产生水果的时间到了if (midTime <= 0){//找到发射水果的地点GameObject parentG = this.transform.gameObject;//建立一个空UISprite,放入水果UISprite a= NGUITools.AddSprite(parentG,fruit,"apple02");//给水果添加缸体,设置重力a.gameObject.AddComponent<Rigidbody>();a.rigidbody.useGravity = true;//给水果添加碰撞器a.gameObject.AddComponent<CapsuleCollider>();a.collider.isTrigger = true;a.GetComponent<CapsuleCollider>().radius = 62.5f;a.GetComponent<CapsuleCollider>().height = 0.65f;//给水果一个初始的力a.rigidbody.AddForce(Random.Range(xMin, xMax), Random.Range(yMin, yMax), 0);//给苹果一个可切割的脚本a.gameObject.AddComponent<CutFruit>();CutFruit cutApple= a.GetComponent<CutFruit>();cutApple.fruitLeft = exampleApple.fruitLeft;cutApple.fruitRight = exampleApple.fruitRight;cutApple.cutFruitZha = exampleApple.cutFruitZha;cutApple.cutFruitZhi = exampleApple.cutFruitZhi;//无论是否被切割,10秒钟后"注销Destroy(a, 10);//重置产生时间midTime = Random.Range(timeMin, timeMax);}}
}

将这个物体拖到不可观察范围(手动调试范围,图中箭头所指)

运行程序:
经过切割后留下的一半苹果和苹果残渣

这只是添加了“苹果”,代码经过简单修改后,即可仿制一个简单的”切水果”游戏。


欢迎关注我的微信个人订阅号

每天多学一点0.0

使用NGUI模仿制作“切水果”相关推荐

  1. 怎么制作切水果游戏呢?我用这种方式实现!

    游戏预览 说明 只做了一个简单的游戏 demo,实现切割的效果,没有做完整的游戏,有兴趣可以自己尝试去完成完整项目. 实现原理 水果的生成.这个可以根据自己需要,调整水果出现的位置,运动的轨迹,本篇因 ...

  2. 简单的切水果游戏制作

    从今天开始,我把我这学期开始做的一些小游戏全部上传到我的百度云中,在文章后面会附上地址,在博客中不再粘贴代码与素材,想下载参考或者玩的朋友可以去我的百度云直接下载就是了. 距上次的围住神经猫,已经快半 ...

  3. [unity]实现切水果游戏

    初学unity, 通过查阅资料以及自己的一些见解完成了自己做的第一款游戏. 现在把代码分享出来, 仅供参考,不足之处还请指正. 游戏中有三个场景,主要用到六个c#脚本: 脚本 作用 buttonCli ...

  4. Unity 游戏实例开发集合 之 CutFruit (切水果(水果忍者)) 休闲小游戏快速实现

    Unity 游戏实例开发集合 之 CutFruit (切水果(水果忍者)) 休闲小游戏快速实现 目录 Unity 游戏实例开发集合 之 CutFruit (切水果(水果忍者)) 休闲小游戏快速实现 一 ...

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

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

  6. 基于HTML5和JS实现的切水果游戏

    切水果游戏曾经是一款风靡手机的休闲游戏,今天要介绍的就是一款网页版的切水果游戏, 由JavaSript和HTML5实现,虽然功能和原版的相差太大,但是基本的功能还是具备了,还是模仿的挺逼真,有一定的J ...

  7. Kinect C++简单切水果的一点总结

    资源下载地址 http://download.csdn.net/detail/zhoupeng39/7204925 一.整体的思路 既然是Kinect开发,首先解决的就是识别的问题,其实网上切水果视频 ...

  8. [HTML5]用JS实现当年疯魔IOS游戏市场的切水果

    切水果游戏曾经是一款风靡苹果手机的休闲游戏,今天要介绍的就是一款网页版的切水果游戏,由JavaScript和HTML5实现,虽然功能和原版的相差很大,但是基本的功能还是具备了,还是模仿挺逼真的.有一定 ...

  9. [Unity3d]水果忍者-切水果功能

    继续今天的切水果游戏之切苹果的实现,主要功能就是,有一个苹果放在场景中,然后通过手滑过苹果,就将苹果切成两半,从原理上分析,就是制作两张贴图,分别表示分开的两半苹果,然后在当前位置出现,并且给这两半苹 ...

最新文章

  1. 桂林电子科技大学 计算机学院,桂林电子科技大学信息科技学院
  2. BugKuCTF 加密 这不是摩斯密码
  3. 经典C语言程序100例之四零
  4. IT第三阶段?“智慧的运算”的未解之谜
  5. ORACLE如何一次性修改用户连接数?
  6. GitLab CI 自动部署netcore web api 到Docker
  7. React之state总结
  8. 地理空间数据Geometry在MySQL中使用(二)
  9. 5 大场景深度探讨何为 Serverless 架构模式?
  10. python通过txt文件将指定图片复制到另一个文件夹
  11. Atitit.软件gui按钮and面板---通讯子系统(区)-- github 的使用....
  12. 浅析智慧照明,实现建筑节能
  13. AGTF30 涡扇发动机说明
  14. XFire野猪书-XFire开发指南第二版
  15. 2021五款头戴式蓝牙耳机分享,高清音质超轻超舒适,平价最强推荐
  16. ubuntu mysql快捷键_ubuntu快捷键设置大全
  17. ICO文件缩略图显示错误
  18. nc6400 在bios中打开SATA模式就会蓝屏呢
  19. Haproxy基础知识 -运维小结
  20. oracle表空间扩容asm,oracle表空间文件系统迁移到ASM

热门文章

  1. 你同学都身价上亿了,你还在纠结早晨几点能起床
  2. 二分查找及时间复杂度
  3. vimdiff 命令使用技巧
  4. 贪吃蛇的纯C语言实现过程
  5. 深耕“有效私域”,雀巢集团携手腾讯重塑零售数字化体验
  6. linux用什么命令查看ip,Linux中ip命令的使用实例
  7. 《周鸿祎自述》新书发布会十大经典语录
  8. PTA-IP地址转换
  9. 空指针引用,导致linux内核panic(重启)
  10. Mac没有右Control的解决办法