[Unity]背包效果-使用NGUI实现物品的拖拽效果Drag
背包效果-使用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的更多相关文章
- Unity实现放大缩小以及相机位置平移实现拖拽效果
放大缩小功能是游戏开发中用到的功能,今天就来讲一下Unity中放大缩小怎么实现. 1.IDragHandler, IBeginDragHandler, IEndDragHandler这三个接口是Uni ...
- jQuery的DOM操作实例(2)——拖拽效果&&拓展插件
一.原生JavaScript编写拖拽效果 二.jQuery编写的拖拽效果 三.在jQuery中拓展一个拖拽插件
- React.js实现原生js拖拽效果及思考
一.起因&思路 不知不觉,已经好几天没写博客了...近来除了研究React,还做了公司官网... 一直想写一个原生js拖拽效果,又加上近来学react学得比较嗨.所以就用react来实现这个拖 ...
- js拖拽效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- WinForm支持拖拽效果
有一个MSDN客户提问在WinForm中如何实现拖拽效果——比如在WinForm中有一个Button,我要实现的效果是拖拽这个Button到目标位置后生成一个该控件的副本. 其实这个操作主要分成三步走 ...
- js div浮动层拖拽效果代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- JS实现漂亮的窗口拖拽效果(可改变大小、最大化、最小化、关闭)
转自<JS实现漂亮的窗口拖拽效果(可改变大小.最大化.最小化.关闭)>:http://www.jb51.net/article/73157.htm 这篇文章主要介绍了JS实现漂亮的窗口 ...
- JQ实现3D拖拽效果
<!DOCTYPE HTML> <html onselectstart='return false'> <head> <meta http-equiv=&qu ...
- 用JS实现版面拖拽效果
类似于这样的一个版面,点击标题栏,实现拖拽效果. 添加onmousedown事件 通过获取鼠标的坐标(clientX,clientY)来改变面板的位置 注意:面板使用绝对定位方式,是以左上角为参考点, ...
随机推荐
- 关于stringWithFormat: - 两段NSString如何合成一段
http://blog.sina.com.cn/s/blog_6b1e4a0601019pib.html str = [NSString stringWithFormat:@"%@,%@&q ...
- 最大独立集 HDU 1068
题目大意:有n个人,两个人之间有相互的关系,问最大的关系数目. 思路:n-(最大匹配数/2).因为这里给出的是n个人之间的两两关系 //看看会不会爆int!数组会不会少了一维! //取物问题一定要小心 ...
- Windows GTK+ 环境搭建(详解)
来源:http://blog.sina.com.cn/s/blog_a6fb6cc901017ygy.html Windows GTK+ 环境搭建 最近要做界面的一些东西,但是对微软提供的类库MFC不 ...
- sql查询百分号的方法
select * from [tablename] where [col] like '%100/%%' escape '/'
- jquery带小图的图片轮换效果
右边显示大图,左边显示小图 <style> ul{ list-style:none; padding:0px; margin:0px;} li{ list-style:none; padd ...
- merge 语句的语法
/*Merge into 详细介绍 MERGE语句是Oracle9i新增的语法,用来合并UPDATE和INSERT语句. 通过MERGE语句,根据一张表或子查询的连接条件对另外一张表进行查询, 连接条 ...
- xcconfig 文件配置文件 问题
与公司 QA 聊天,已不止一次被吐槽说移动端从开发环境转到生产环境时,还要靠修改代码来配置对应的环境参数.她认为,从 App 转测试之后,就不应该再修改代码,可以把所有的环境配置都整合到配置文件中,这 ...
- Swift 学习笔记 (三) 之循环引用浅析
原创:转载请注明出处 110.自动引用计数实践 下面的例子展示了自动引用计数的工作机制.例子以一个简单的Person类开始,并定义了一个叫name的常量属性: class Person { l ...
- Android提高第十九篇之"多方向"抽屉--转
本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处! 在android上要实现类似Launch的抽屉效果,大家一定首先会想起SlidingDrawer.Slidin ...
- AutoTile 自动拼接(二) 学习与实践
开始代码前,我们要做点准备工作. 下面 跟着我做. 首先我 扣了一个 图. 这个是 做 水的资源,所以是动态的,我把其余两张也扣了出来. 看起来一样,不是,这样看肯定 看不出所以然,你们先放到u3d中 ...