unity3d ngui 教程 ngui怎么实现右键穿戴装备

Unity3D使用NGUI实现简单背包功能
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 UnityE
public class MyDragAndDrop : UIDragDropItem {
protected override void OnDragDropRelease(GameObject surface)
base.OnDragDropRelease(surface);
if (surface.tag == "Cell")
transform.parent = surface.
transform.localPosition = Vector3.
transform.parent = GameObject.FindGameObjectWithTag("UIRoot").
第三步,测试
到这里简单例子也就完成了。
可以看到,到我拖拽Obj在每个Cell的边缘时,Obj都会自动移至碰撞的Cell内,类似吸附功能。
上面的简单例子实现了物体被背包吸附装入的功能,通过检测Cell的子物体增加相应逻辑就可以实现背包和角色属性关联。
1.背包内物品栏的物品交换相互位置
给所有物品设置tag为 “Obj” ,如果物品拖拽释放时碰撞获取的对象tag为“Obj”,就设置交换物品的父级对象。
2.捡取物品到背包中
一般捡取得物品到背包其排序都是从左到右,从上到下填入空的物品栏中。
实现方式是将所有物品栏对象装载到GameObject的数组中。
通过循环判断物品栏是否有子对象,也就是判断物品栏的子列表数值是否大于0
若小于或等于0,就将物品的父对象设置为该物品栏,然后设置其相对父对象坐标为0
还有很多实现大家自由发挥吧
我的热门文章
即使是一小步也想与你分享在许多类型游戏中我们经常会使用到背包,利用背包来设置相应角色属性,多了背包也会让游戏增色拓展不少。
那在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 UnityE
public class MyDragAndDrop : UIDragDropItem {
protected override void OnDragDropRelease(GameObject surface)
base.OnDragDropRelease(surface);
if (surface.tag == "Cell")
transform.parent = surface.
transform.localPosition = Vector3.
transform.parent = GameObject.FindGameObjectWithTag("UIRoot").
第三步,测试
到这里简单例子也就完成了。
可以看到,到我拖拽Obj在每个Cell的边缘时,Obj都会自动移至碰撞的Cell内,类似吸附功能。
上面的简单例子实现了物体被背包吸附装入的功能,通过检测Cell的子物体增加相应逻辑就可以实现背包和角色属性关联。
1.背包内物品栏的物品交换相互位置
给所有物品设置tag为 &Obj& ,如果物品拖拽释放时碰撞获取的对象tag为&Obj&,就设置交换物品的父级对象。
2.捡取物品到背包中
一般捡取得物品到背包其排序都是从左到右,从上到下填入空的物品栏中。
实现方式是将所有物品栏对象装载到GameObject的数组中。
通过循环判断物品栏是否有子对象,也就是判断物品栏的子列表数值是否大于0
若小于或等于0,就将物品的父对象设置为该物品栏,然后设置其相对父对象坐标为0
还有很多实现大家自由发挥吧
链接: 密码:zamk
阅读(...) 评论()NGUI(16)
接着上篇继续加功能建立一个脚本拖动给 背景bg上,然后根据需求设定cells和Equipmentname的size,按照如图分别设定其属性,。Equipmentname是不能拖动的只能把sprite的名字输入进去。这个地方的item要把wuping的perfeb拖进去。。。。
这个是要拖给bg的脚本:
using UnityE
using System.C
public class Add_Equip : MonoBehaviour {
public GameObject []
public string []
public GameO
void Update()
//点击键盘X捡到物品添加到背包里
if (Input.GetKeyDown(KeyCode.X))
Debug.Log(&&);
public void Pickup()
int index = Random.Range(0, equipmentname.Length);
string name = equipmentname[index];
bool isFind =//默认没有找到物品
for (int aa = 0; aa & cells.L aa++)
if (cells[aa].transform.childCount == 0)//若cell里面没有物品
Debug.Log(&添加物品&);
GameObject go = NGUITools.AddChild(cells[aa], item);
go.GetComponent&UISprite&().spriteName =
go.transform.localPosition = Vector3.
//每当添加一个就break实现的是一次添加一个
if (cells[aa].transform.childCount & 0)//若格子里有物品
wuping item = cells[aa].GetComponentInChildren&wuping&();
Debug.Log(&cell里的物品&);
if (item.sprite.spriteName == name)//如果添加物品名字是否与现在存在的一样
Debug.Log(&Sprite名字& + name);
item.AddCount();//调用AddCount方法
调用的Addcount方法在下面wuping脚本里(上篇博客的wuping脚本修改):
using UnityE
using System.C
public class wuping : UIDragDropItem {
public UIS//显示图像
public UIL//显示数量
private int
public void AddCount(int number = 1)//数量默认是1
uilabel.text = count + &&;//+“”表示空串将int型的count转化为String类型
protected override void OnDragDropRelease(GameObject surface)
base.OnDragDropRelease(surface);
print(surface);
if (surface.tag == &cell&)//若拖到的是空格子里
this.transform.parent = surface.//拖动wuping放到cell时,让格子(现在的是surface也就是cell)成为所选物体的parent。
this.transform.localPosition = Vector3.//所选物体的local坐标,实现的是放到格子里是放到格子位置的中心。
else if (surface.tag == &wuping&)//若拖到的是已经放了物体的格子里,也就是格子里已有wuping了。
Transform parent = surface.transform.
surface.transform.parent = this.transform.//保留还没有移动wuping前wuping目前所在的cell
surface.transform.localPosition = Vector3.//保留还没有移动wuping前wuping目前所在的cell的位置
this.transform.parent =//新的cell成为移动后的wuping的cell(也就是交换wuping)
this.transform.localPosition = Vector3.
要把上面的wuping脚本给了物品,然后做以下操作,分别拖进去。注意这里的wuping是perfeb,不要忘记Apply。如图:
然后看运行,根据代码看只要按键盘X键就可以添加东西了,点击之后发现并没有出现sprite但是物品的个数是在变化的。然后看一下添加的物品的Sprite属性,发现名字在变化而且就是我们刚才在equipmentname里面添加的名字,说明确实在变化而且也添加到了cell里,只是看不到Sprite 的显示图片。这个怎么办?偶目前还未解决。待完成……
运行结果如图:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:102551次
积分:2435
积分:2435
排名:第13108名
原创:136篇
转载:41篇
评论:21条
(1)(2)(15)(11)(14)(10)(4)(1)(4)(1)(1)(5)(3)(2)(6)(2)(4)(13)(6)(8)(6)(2)(18)(41)}

我要回帖

更多关于 unity ngui下载 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信