背包效果-使用NGUI实现物品的拖拽效果Drag

效果实现如图

对象层级关系图


  • 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实现物品的拖拽效果Drag的更多相关文章

  1. Unity实现放大缩小以及相机位置平移实现拖拽效果

    放大缩小功能是游戏开发中用到的功能,今天就来讲一下Unity中放大缩小怎么实现. 1.IDragHandler, IBeginDragHandler, IEndDragHandler这三个接口是Uni ...

  2. jQuery的DOM操作实例(2)——拖拽效果&&拓展插件

    一.原生JavaScript编写拖拽效果 二.jQuery编写的拖拽效果 三.在jQuery中拓展一个拖拽插件

  3. React.js实现原生js拖拽效果及思考

    一.起因&思路 不知不觉,已经好几天没写博客了...近来除了研究React,还做了公司官网... 一直想写一个原生js拖拽效果,又加上近来学react学得比较嗨.所以就用react来实现这个拖 ...

  4. js拖拽效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. WinForm支持拖拽效果

    有一个MSDN客户提问在WinForm中如何实现拖拽效果——比如在WinForm中有一个Button,我要实现的效果是拖拽这个Button到目标位置后生成一个该控件的副本. 其实这个操作主要分成三步走 ...

  6. js div浮动层拖拽效果代码

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. JS实现漂亮的窗口拖拽效果(可改变大小、最大化、最小化、关闭)

    转自<JS实现漂亮的窗口拖拽效果(可改变大小.最大化.最小化.关闭)>:http://www.jb51.net/article/73157.htm   这篇文章主要介绍了JS实现漂亮的窗口 ...

  8. JQ实现3D拖拽效果

    <!DOCTYPE HTML> <html onselectstart='return false'> <head> <meta http-equiv=&qu ...

  9. 用JS实现版面拖拽效果

    类似于这样的一个版面,点击标题栏,实现拖拽效果. 添加onmousedown事件 通过获取鼠标的坐标(clientX,clientY)来改变面板的位置 注意:面板使用绝对定位方式,是以左上角为参考点, ...

随机推荐

  1. 关于stringWithFormat: - 两段NSString如何合成一段

    http://blog.sina.com.cn/s/blog_6b1e4a0601019pib.html str = [NSString stringWithFormat:@"%@,%@&q ...

  2. 最大独立集 HDU 1068

    题目大意:有n个人,两个人之间有相互的关系,问最大的关系数目. 思路:n-(最大匹配数/2).因为这里给出的是n个人之间的两两关系 //看看会不会爆int!数组会不会少了一维! //取物问题一定要小心 ...

  3. Windows GTK+ 环境搭建(详解)

    来源:http://blog.sina.com.cn/s/blog_a6fb6cc901017ygy.html Windows GTK+ 环境搭建 最近要做界面的一些东西,但是对微软提供的类库MFC不 ...

  4. sql查询百分号的方法

    select * from [tablename] where [col] like '%100/%%' escape '/'

  5. jquery带小图的图片轮换效果

    右边显示大图,左边显示小图 <style> ul{ list-style:none; padding:0px; margin:0px;} li{ list-style:none; padd ...

  6. merge 语句的语法

    /*Merge into 详细介绍 MERGE语句是Oracle9i新增的语法,用来合并UPDATE和INSERT语句. 通过MERGE语句,根据一张表或子查询的连接条件对另外一张表进行查询, 连接条 ...

  7. xcconfig 文件配置文件 问题

    与公司 QA 聊天,已不止一次被吐槽说移动端从开发环境转到生产环境时,还要靠修改代码来配置对应的环境参数.她认为,从 App 转测试之后,就不应该再修改代码,可以把所有的环境配置都整合到配置文件中,这 ...

  8. Swift 学习笔记 (三) 之循环引用浅析

    原创:转载请注明出处 110.自动引用计数实践 下面的例子展示了自动引用计数的工作机制.例子以一个简单的Person类开始,并定义了一个叫name的常量属性: class Person {     l ...

  9. Android提高第十九篇之"多方向"抽屉--转

    本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处! 在android上要实现类似Launch的抽屉效果,大家一定首先会想起SlidingDrawer.Slidin ...

  10. AutoTile 自动拼接(二) 学习与实践

    开始代码前,我们要做点准备工作. 下面 跟着我做. 首先我 扣了一个 图. 这个是 做 水的资源,所以是动态的,我把其余两张也扣了出来. 看起来一样,不是,这样看肯定 看不出所以然,你们先放到u3d中 ...