Unity3D使用NGUI实现简单背包功能
前话
在许多类型游戏中我们经常会使用到背包,利用背包来设置相应角色属性,多了背包也会让游戏增色拓展不少。
那在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
还有很多实现大家自由发挥吧
源码
链接:http://pan.baidu.com/s/1dF0kSlN 密码:zamk
Unity3D使用NGUI实现简单背包功能的更多相关文章
- NGUI实现一个背包功能
界面布局是这样的,一个400*400的背景,然后在其上是16张小图片,每个小图片格子可以用来放置拾取的物品.有两个预制体,一个是可放置的小格子,一个是拾取的物品(包含一个此物品有多少的Label). ...
- 每次都能让人头大的 Shader -- 从一次简单的功能说起
最近有个功能, 要渲染从主相机视角看到的另一个相机的可视范围和不可见范围, 大概如下图 : 简单来说就是主相机视野和观察者相机视野重合的地方, 能标记出观察者相机的可见和不可见, 实现原理就跟 Sha ...
- System.DateUtils 1. DateOf、TimeOf 简单修饰功能
编译版本:Delphi XE7 { Simple trimming functions } // 简单修饰功能 function DateOf(const AValue: TDateTime): TD ...
- python3实现简单爬虫功能
本文参考虫师python2实现简单爬虫功能,并增加自己的感悟. #coding=utf-8 import re import urllib.request def getHtml(url): page ...
- 插件介绍 :cropper是一款使用简单且功能强大的图片剪裁jQuery插件。
简要教程 cropper是一款使用简单且功能强大的图片剪裁jQuery插件.该图片剪裁插件支持图片放大缩小,支持鼠标滚轮操作,支持图片旋转,支持触摸屏设备,支持canvas,并且支持跨浏览器使用. c ...
- SharePoint 2013 "通知我"简单的功能
简单的功能 "通知我"内部列表或文档库中的主要项目.加入/删除/修改等操作,用户的E- mail通知设定功能:设置列表或文档库通知的能力,有可能设置通知为一个单一的项目.这是Sha ...
- unity3d和php后台简单交互--一
unity3d开发时,用PHP作为后台是个不错的选择.对一些数据吞吐量不是很大的游戏,比如某个游戏的排名,登录等等,一般的php程序能够胜任了,并且php语言简单,开发容易对数据库尤其是mysql的支 ...
- Victor 串口 VCL 控件 - 简单实用, 功能强大的 C++ Builder 串口控件!
源:Victor 串口 VCL 控件 - 简单实用, 功能强大的 C++ Builder 串口控件! 2014年02月06日发布控件的重要更新版本: Victor 串口控件 1.5.0.2 版本 (包 ...
- 基于django的自定义简单session功能
基于django的自定义简单session功能 简单思路: 1.建立自定义session数据库 2.登入时将用户名和密码存入session库 3.将自定义的随机session_id写入cookie中 ...
随机推荐
- [19/04/20-星期六] Java的动态性_字节码操作(Javassist类库(jar包),assist:帮助、援助)
一.概念 [基本] /** * */ package cn.sxt.jvm; import javassist.ClassPool; import javassist.CtClass; import ...
- 【node.js】REPL(交互式解释器)
Node 自带了交互式解释器,可以执行以下任务: 读取 - 读取用户输入,解析输入了Javascript 数据结构并存储在内存中. 执行 - 执行输入的数据结构 打印 - 输出结果 循环 - 循环操作 ...
- JNI由浅入深_9_JNI 异常处理
1 .本地代码中如何缓存和抛出异常 下面的代码中演示了如何声明一个会抛出异常的本地方法.CatchThrow这个类声明了一个会抛出IllegalArgumentException异常的名叫doit的本 ...
- [转载]单点登录SSO:概述与示例
原文地址: https://www.cnblogs.com/baibaomen/p/sso.html 目录 概述 演示一:零改造实施单点登录 演示二: 单点注销 演示三:集成AD认证 演示四:客户端单 ...
- log4j与logback包冲突原因及解决,不可忽视的Warning
场景 一个简单的spring-boot程序,需要用kafka做消息队列,于是在maven中引入kafka依赖,一切看似没问题,在启动时,打印出Warning信息: SLF4J: Class path ...
- DG不同步,MRP0进程打不开
问题描述:主库备库之前正常连接,但是昨天磁盘空间满了之后,由于不知什么原因将备库重做日志删了,今天早上发现DG不同步的报警. 当时思路如下:1.通过select thread#,low_sequenc ...
- BUAA OO 2019 第二单元作业总结
目录 总 架构 controller model view 优化算法 Look 算法 多种算法取优 预测未来 多线程 第五次作业 第六次作业 第七次作业 代码静态分析 UML 类图 类复杂度 类总代码 ...
- JS判断两个数字的大小
javascript中定义的var类型是弱类型,默认是String类型,在比较两个数字大小的时候默认比较的是两个字符串,比如,在比较10和2时,按数字做比较10是比2大,可是按默认的字符串比较时,第一 ...
- MySQL5.7.24安装笔记
一.下载mysql-5.7.24 wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.24-el7-x86_64.tar.gz 二 ...
- Java代码生成器CodeX4J介绍
用代码生成器生成一些固定的或有规律的代码,可以有效的提高工作效率.我写了个开源的,放在了GitHub上,希望能对有需要的朋友有所帮助. GitHub代码地址https://github.com/jac ...