NGUI实现背包效果

首先,想在unity3d中使用NGUI必须导入资源包,里面的资源超多......自行体会下图。

NGUI实现背包效果_第1张图片NGUI实现背包效果_第2张图片

先不说这些资源有什么用,直接进入正题。创建一个UI Root(相当于UGUI里的Canvas)

NGUI实现背包效果_第3张图片

然后在UI Root下创建一个Panel,再在Panel下创建一个Texture类型的bg

NGUI实现背包效果_第4张图片

查看bg右侧的属性面板,为它选择一个Atlas(图集),并从Atlas里选择一张图片作为背景(关于图集的创建,选中多个Sprite图片)

NGUI实现背包效果_第5张图片

效果如下

NGUI实现背包效果_第6张图片

给bg添加UI Grid组件,如下设置属性。

NGUI实现背包效果_第7张图片

点击NGUI给bg创建9个Sprite子物体,并赋予背景图片,再把每个Sprite的标签改为gezi

NGUI实现背包效果_第8张图片

每个Sprite都添加碰撞体组件

NGUI实现背包效果_第9张图片

接下来,我们给前三个Sprite下创建三个Sprite子物体,选择装备的背景图片,并添加碰撞体,标签改为wupin。

NGUI实现背包效果_第10张图片

接下来我们开始写脚本,起名为MyDrag。这个脚本里只有一个继承自UIDragDropItem的类,没有别的回调函数。(UIDragDropItem估计就是之前导入的资源里的类)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MyDrag : UIDragDropItem {

    protected override void OnDragDropStart()
    {
        base.OnDragDropStart();
        gameObject.GetComponent().depth += 1;//拖拽开始时,物品的深度+1,使它处于所有物品的前方
    }

    protected override void OnDragDropRelease(GameObject surface)
    {
        base.OnDragDropRelease(surface);
        gameObject.GetComponent().depth -= 1;//拖拽结束后,物品的深度-1,回归原始属性
        gameObject.transform.localPosition = Vector3.zero;
        if (surface.tag == "gezi")//如果下方物体的标签是gezi就被拖拽的物体设为surface的子物体
        {
            gameObject.transform.parent = surface.transform;
            gameObject.transform.localPosition = Vector3.zero;
        }
        else if (surface.tag == "wupin")//如果下方物体的标签是wupin,则被拖拽的物体和surface交换父物体

        {
            Transform parent1 = gameObject.transform.parent;
            Transform parent2 = surface.transform.parent;

            surface.transform.parent = parent1;
            gameObject.transform.parent = parent2;
            surface.transform.localPosition = Vector3.zero;
            gameObject.transform.localPosition = Vector3.zero;
        }
    }

把这个脚本赋给3个物体,运行时效果如下。

NGUI实现背包效果_第11张图片NGUI实现背包效果_第12张图片NGUI实现背包效果_第13张图片NGUI实现背包效果_第14张图片NGUI实现背包效果_第15张图片NGUI实现背包效果_第16张图片

再写一个创建物体的脚本,创建出来的物体会优先摆放在比较靠前的空各自

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CreateItem : MonoBehaviour {

    public GameObject pref;
    public UISprite[] spl;
	// Use this for initialization
	void Start () {
		
	}
	
	// Update is called once per frame
	void Update () {
        if (Input.GetKeyDown(KeyCode.Space))
        {

            for (int i = 0; i < spl.Length; i++)
            {
                if (spl[i].transform.childCount !=0)
                {
                    continue;
                }
                else if (spl[i].transform.childCount == 0)
                {
                    GameObject g = Instantiate(pref);
                    g.transform.parent = spl[i].transform;
                    g.transform.localScale = Vector3.one;
                    g.transform.localPosition = Vector3.zero;
                    break;
                }
            }
           
        }
	}
}


把这个脚本赋给bg,再把那9个格子拖给数组,再把黑切的预设体拖给pref

NGUI实现背包效果_第17张图片

效果如下

NGUI实现背包效果_第18张图片NGUI实现背包效果_第19张图片NGUI实现背包效果_第20张图片


你可能感兴趣的:(UGUI,Unity3D)