《组合变身小宠物游戏》PetItemMove物品在格子中拖拽效果(修改更新中)【初学者】

原创 2016年08月29日 15:48:15
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.EventSystems;


public class PetItemMove : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler, ICanvasRaycastFilter
{
    private static Transform canvasTra;
    private Transform nowParent;//一般来说,物品是格子的子物体,nowParent记录的是当前物品属于哪个格子
    private bool isRaycastLocationValid = true;//默认射线不能穿透物品


    void Start()
    {


    }
    public void OnBeginDrag(PointerEventData eventData)
    {
        if (canvasTra == null) canvasTra = GameObject.Find("Canvas").transform;


        nowParent = transform.parent;
        transform.SetParent(canvasTra);//将当前拖拽的物品置前
        isRaycastLocationValid = false;
    }


    public void OnDrag(PointerEventData eventData)
    {
        transform.position = Input.mousePosition;
    }


    public void OnEndDrag(PointerEventData eventData)
    {
        GameObject go = eventData.pointerCurrentRaycast.gameObject;


        if (go != null)
        {
            Debug.Log(go.name);
            if (go.tag.Equals("Grid"))//放置到空格子
            {
                SetParentAndPosition(transform, go.transform);
            }
            else if (go.tag.Equals("PlayerPetItem"))//交换位置,注意可能需要把物品下的子物体的Raycast Target关掉
            {
                SetParentAndPosition(transform, go.transform.parent);
                SetParentAndPosition(go.transform, nowParent);
            }
            else
            {
                SetParentAndPosition(transform, nowParent);
            }
        }
        else
        {
            SetParentAndPosition(transform, nowParent);
        }
        isRaycastLocationValid = true;
    }


    private void SetParentAndPosition(Transform child, Transform parent)
    {
        child.SetParent(parent);
        child.position = parent.position;
    }


    public bool IsRaycastLocationValid(Vector2 sp, Camera eventCamera)
    {
        return isRaycastLocationValid;
    }

}


版权声明:本文为博主“爱吃木鱼的猫”原创文章,转载请注明出处 http://blog.csdn.net/u012761191

相关文章推荐

unity背包系统中物体拖拽效果实现(初学者)

一般背包系统中,物品是依附在格子里面,即物品为格子的子物体。物品拖拽时主要是将物品拿出,跟随鼠标移动,判断落点位置完成拖拽:如果鼠标释放终点位置下检测到的是空格子,就把物体放在空格子下;如果鼠标释放终...

使用UGUI实现背包物体的拖拽,交换等操作

本实例通过UGUI实现背包的简单功能,物品的拖拽,交换,拖放位置处理,还有针对背包多页面的滑动翻页的处理。 具体的代码如下。 首先是UIItem类,这个背包内各种物体的类: using ...

unity _game窗口图片精灵拖拽(背包物品,或者技能)

using System; using System.Collections; using System.Collections.Generic; using UnityEngine; //引入命名空...

Unity中实现背包物品拖动和更换位置

using UnityEngine;using System.Collections; using UnityEngine.UI; using UnityEngine.EventSystems;p...

unity实现物品或技能图标的拖拽功能

在设计背包或者技能栏的时候,通常采用MVC模式。 Model脚本读取存放在数据库中的物品或技能的相关资源(Icon,prefabs) view脚本将读取的资源显示在背包或技能栏中。 而Contr...

Unity UGUI 实现简单拖拽功能

这一篇博客我们来使用 UGUI 实现图片的拖拽功能。 说到拖拽,那必然离不开坐标,UGUI 的坐标有点不一样,它有两种坐标,一种是屏幕坐标,还有一种就是 UI 在Canvas内的坐标(暂时叫做ugu...

[UGUI]UGUI深度管理

UGUI的深度管理非常简单直观,规则如下: 如果同时存在多个Canvas,Sort Order值大的显示在前 同一个Canvas中,多个同级子元素,按照在Hirerachy中的上下顺序,靠下方的显示在...

unityUGUI拖拽物品的实现方法

/* 该脚本绑在要拖拽的物体上 */ using System; using System.Collections; using System.Collections.Generic; u...

【Unity&NGUI】背包系统物品的累加

写到背包系统物品的累加以及多背包显示,里面涉及很多代码,因此,把重复的代码,尽量用一个变量表示 由于写背包系统的时候,只要是触发器,和碰撞器,就会使得物体变成其子物体 于是添加了两个字符串变量 A...

《组合变身小宠物游戏》DataRecord(修改更新中)【初学者】

using UnityEngine; using System.Collections; using System.Collections.Generic; using System.Secur...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)