[Unity]NGUI代码实现背包效果

作者: 肖浩呗 | 来源:发表于2015-09-18 11:27 被阅读1206次

[Unity]技术学习路线图(长期更新)

效果实现如图

效果图.gif

对象层级关系图

层级关系.png
  • PacketCell - Right

    • 对象作为单元格背景
  • PacketContainer

    • 对象作为单元格容器
  • PacketLabel

    • 对象作为单元格物体
  • PacketCell - Left

    • 对象作为单元格背景
  • PacketContainer

    • 对象作为单元格容器
  • PacketLabel

    • 对象作为单元格物体
  • 'Label - Middle'

    • 用来显示当前文字处于哪个位置

物体能够被拖拽的几个条件

  • 碰撞器 BoxCollider
  • 拖拽功能 UIDragDropItem

创建第一个拖拽功能的空子类

using System;
using UnityEngine;

/// <summary>
/// 第一个自己创建的拖拽功能
/// </summary>
public class MyFirstDragDropItem:UIDragDropItem
{
    
}

容器可以监测正在被拖拽物体是否到自己对象位置的几个条件

  • 碰撞器 BoxCollider
  • 容器功能 UIDragDropContainer

GMUser.cs

using System;

/// <summary>
/// 用户管理器
/// </summary>
public class GMUserManager
{
    //存储当前正在玩游戏的玩家信息
    private static GMUser user = null;
    //公开访问器
    public static GMUser User{ 
        get {
            if (GMUserManager.user == null) {
                GMUserManager.user = new GMUser ();
            }

            return GMUserManager.user;
        }
    }
}

public class GMUser
{
    //游戏用户的姓名
    public string Name{set;get;}
    public GMUser ()
    {
        //设置每个用户的默认姓名是Right
        this.Name = "Right";
    }
}

MyFirstDragDropItem.cs

using System;
using UnityEngine;

/// <summary>
/// 第一个自己创建的拖拽功能
/// </summary>
public class MyFirstDragDropItem:UIDragDropItem
{

    private GameObject sourceParent;
    /// <summary>
    /// 重写父类的拖拽开始函数
    /// </summary>
    protected override void OnDragDropStart ()
    {
        //当拖拽开始时存储原始的父对象
        this.sourceParent = this.transform.parent.gameObject;
        base.OnDragDropStart ();
    }
    /// <summary>
    /// 重写父类的拖拽释放函数
    /// </summary>
    protected override void OnDragDropRelease (GameObject surface)
    {
        //如果不是拖拽到场景表面的话
        if (!surface.name.Equals ("UI Root")) {
            //寻找surface对象的父对象
            GameObject cell = surface.transform.parent.gameObject;

            //判断当前单元格的对象姓名
            if (cell.name.Equals ("PacketCell - Left")) {
                GMUserManager.User.Name = "Left";
            } 
            if (cell.name.Equals ("PacketCell - Right")) {
                GMUserManager.User.Name = "Right";
            }
        } else {
            //其他的错误位置时,重置父子关系
            this.transform.parent = this.sourceParent.transform;
        }

        //最终调用父类的功能
        base.OnDragDropRelease(surface);
        //调整位置
        this.transform.localPosition = new Vector3(0,0,0);
    }
}

Test.script

挂载在MainCamera对象上的脚本

using UnityEngine;
using System.Collections;

public class TestScript : MonoBehaviour {

    //指向游戏中间的那个label控件
    public UILabel  label;
    // Use this for initialization
    void Start () {
    
    }
    
    // Update is called once per frame
    void Update () 
    {
        this.label.text = GMUserManager.User.Name;
    }
}

工程存放位置

相关文章

  • [Unity]NGUI代码实现背包效果

    [Unity]技术学习路线图(长期更新) 效果实现如图 对象层级关系图 PacketCell - Right对象作...

  • NGUI背包系统

    NGUI背包系统实现装备的拾取、拖拽,交换以及数量的叠加 步骤一:实现游戏装备的拖拽 首先导入NGUI插件,导入后...

  • 18NGUI之背包系统

    NGUI背包系统的制作## 一、背包系统的搭建## 二、格子里面物品(预制物的制作)## 格子里面的物体需要实现可...

  • NGUI背包

    首先,导入NGUI插件 1、创建一个Sprite,创建一个空物体,也可以是图片,我这里创建的是空物体,2、创建一个...

  • Unity3D插件之NGUI核心 UI 组件和功能详细使用步骤

    一、NGUI 介绍 1.NGUI 插件安装 首先创建一个新的 Unity 工程项目,导入 NGUI 插件资源包。 ...

  • Unity NGUI制作技能冷却效果

    第一次发布文章,文笔不好,还请见谅。 最近在学习NGUI,虽然已经没多少人用这个框架了,不过个人觉得,既...

  • NGUI整体框架介绍

    NGUI作为Unity的一个UI工具,从Unity开始时就跟着迭代发展。到现在,最新版本已经是NGUI Next ...

  • NGUI 渲染顺序概述

    以下内容基于 NGUI v.3.11.2 。示例是在 Unity 5.5 中测试。 渲染结构 NGUI 用 Pan...

  • Unity学习笔记 - uGUI

    uGUI就是Unity原生自带的UI制作系统,unity 4.6之后才有的。据说比NGUI好用,毕竟是unity亲...

  • NGUI Label 自定义材质球无效

    1)NGUI Label 自定义材质球无效 2)代码保存预制体出现图片丢失的问题 3)升级Unity版本,粒子系统...

网友评论

    本文标题:[Unity]NGUI代码实现背包效果

    本文链接:https://www.haomeiwen.com/subject/nsmbcttx.html