标签:
在许多类型游戏中我们经常会使用到背包,利用背包来设置相应角色属性,多了背包也会让游戏增色拓展不少。
那在Unity3D游戏开发中该如何编写背包系统呢?因为有高人开发了NGUI插件,因此我们进行简单编写代码设置即可实现一个简单的背包功能了。
背包
背包格子
物品
项目目录以及场景列表如下:
要注意的是:
添加在脚本使Package可以被拖拽移动。
直接在Obj的属性面板add component添加脚本 MyDragAndDrop.cs
打开并编辑脚本:
更改后的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的子物体增加相应逻辑就可以实现背包和角色属性关联。
给所有物品设置tag为 “Obj” ,如果物品拖拽释放时碰撞获取的对象tag为“Obj”,就设置交换物品的父级对象。
一般捡取得物品到背包其排序都是从左到右,从上到下填入空的物品栏中。
实现方式是将所有物品栏对象装载到GameObject的数组中。
通过循环判断物品栏是否有子对象,也就是判断物品栏的子列表数值是否大于0
若小于或等于0,就将物品的父对象设置为该物品栏,然后设置其相对父对象坐标为0
链接:http://pan.baidu.com/s/1dF0kSlN 密码:zamk
标签:
原文地址:http://blog.csdn.net/pwc1996/article/details/51226555