Unity3D使用NGUI实现简单背包功能
来源:互联网 发布:cf内部刷枪软件 编辑:程序博客网 时间:2024/05/02 04:44
前话
在许多类型游戏中我们经常会使用到背包,利用背包来设置相应角色属性,多了背包也会让游戏增色拓展不少。
那在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
还有很多实现大家自由发挥吧
1 0
- Unity3D使用NGUI实现简单背包功能
- 使用NGUI实现带有放大功能的scrollview背包
- NGUI背包物品添加功能实现
- NGUI简单背包系统的实现
- [Unity3D]移动端手游背包功能实现&UGUI
- ugui和ngui如何实现拖拽背包功能
- Unity3D的NGUI实现血条跟随功能
- unity3d 使用Quaternion 类实现两个简单功能
- NGUI实现背包系统
- NGUI实现背包效果
- Unity3D NGUI的使用
- [unity]NGUI实现背包拖拽+使用EventDelegate回调
- unity-使用NGUI 两个Button实现左右切换功能
- Unity3d使用UGUI实现长按功能
- [Unity3D]使用GL实现图案解锁功能
- Unity3d使用UGUI实现长按功能
- Unity3D之NGUI简单计算器新手入门
- unity3D之NGUI血条和背包系统
- char、varchar和nvarchar的区别
- iOS——UITableView
- 从一个网页到一个APP-前言(一)
- #用法
- Android四大核心组件之一-----Service(服务)的基本知识
- Unity3D使用NGUI实现简单背包功能
- 深入理解java的抽象类和接口
- 协同过滤-音乐推荐
- css 常用代码片段
- Android四大组件之Content Provider
- C++如何取得int型的最大最小值
- 机房验收收获
- Spring Spel 与 Placeholder
- Tensorflow学习笔记(6)——Logistic实现