Unity3D使用NGUI实现简单背包功能
2016-04-23 15:32
579 查看
前话
在许多类型游戏中我们经常会使用到背包,利用背包来设置相应角色属性,多了背包也会让游戏增色拓展不少。那在Unity3D游戏开发中该如何编写背包系统呢?因为有高人开发了NGUI插件,因此我们进行简单编写代码设置即可实现一个简单的背包功能了。
准备工作
新建一个工程PackageDemo导入NGUI包(最新版3.9.8版的正版89刀)
准备好图片素材,使用NGUI将其打包成图集
背包
背包格子
物品
简单背包功能实现
第一步,添加NGUI控件,使用素材
项目目录以及场景列表如下:要注意的是:
Package、Cell和Obj都是NGUI的Sprite控件
Cell01-Cell09都设置了名为“Cell”的tag
UI Root设置了名为“UIRoot”的tag
Package、Cell和Obj都添加了Box Collider组件
第二步,给Package添加NGUI脚本UI Drag Object
添加在脚本使Package可以被拖拽移动。
第三步,给Obj添加自定义脚本MyDragAndDrop
直接在Obj的属性面板add component添加脚本 MyDragAndDrop.cs打开并编辑脚本:
令MyDragAndDrop继承UIDragDropItem
重写OnDragDropRelease方法
更改后的MyDragAndDrop脚本代码如下:
using UnityEngine; public class MyDragAndDrop : UIDragDropItem { //该方法用于获取拖拽的物体释放拖拽时,该物体所碰撞的对象 //所以我们前面需要给Cell和Obj都添加Box Collider protected override void OnDragDropRelease(GameObject surface) { base.OnDragDropRelease(surface); //判断获取碰撞的对象的tag是否为Cell if (surface.tag == "Cell") { //将Obj放到碰撞的Cell的子列表中 transform.parent = surface.transform; //设置Obj的相对于Cell的坐标为0 transform.localPosition = Vector3.zero; } else { //如果碰撞的对象不是Cell,就将Obj放到tag为UIRoot的对象子列表中,解除Obj和Cell父子关系 transform.parent = GameObject.FindGameObjectWithTag("UIRoot").transform; } } }
第三步,测试
到这里简单例子也就完成了。
可以看到,到我拖拽Obj在每个Cell的边缘时,Obj都会自动移至碰撞的Cell内,类似吸附功能。
上面的简单例子实现了物体被背包吸附装入的功能,通过检测Cell的子物体增加相应逻辑就可以实现背包和角色属性关联。
拓展
1.背包内物品栏的物品交换相互位置
给所有物品设置tag为 “Obj” ,如果物品拖拽释放时碰撞获取的对象tag为“Obj”,就设置交换物品的父级对象。2.捡取物品到背包中
一般捡取得物品到背包其排序都是从左到右,从上到下填入空的物品栏中。实现方式是将所有物品栏对象装载到GameObject的数组中。
通过循环判断物品栏是否有子对象,也就是判断物品栏的子列表数值是否大于0
若小于或等于0,就将物品的父对象设置为该物品栏,然后设置其相对父对象坐标为0
还有很多实现大家自由发挥吧
相关文章推荐
- Kinect结合Unity3D引擎开发体感游戏(一)
- 我是运营,我没有假期
- 每个 Linux 游戏玩家都绝不想要的恼人体验
- 在 Fedora 上使用 Steam play 和 Proton 来玩 Windows 游戏
- Steam 让我们在 Linux 上玩 Windows 的游戏更加容易
- 如何使用 Steam Play 在 Linux 上玩仅限 Windows 的游戏
- 新一代iPad适配应用之游戏篇
- VB实现的《QQ美女找茬游戏》作弊器实例
- NGUI实现滑动翻页效果实例代码
- C#实现洗牌游戏实例
- C#实现的算24点游戏算法实例分析
- C#实现简单的井字游戏实例
- C++编写简单的打靶游戏
- C++实现基于控制台界面的吃豆子游戏
- 纯javascript实现的小游戏《Flappy Pig》实例
- 基于javascript实现句子翻牌网页版小游戏
- JavaScript实现俄罗斯方块游戏过程分析及源码分享
- JS小游戏之仙剑翻牌源码详解
- JS小游戏之宇宙战机源码详解