unity当背包隐藏的时候怎么修改背包unity 默认脚本修改的数据

unity(18)
& & 一般背包系统中,物品是依附在格子里面,即物品为格子的子物体。物品拖拽时主要是将物品拿出,跟随鼠标移动,判断落点位置完成拖拽:如果鼠标释放终点位置下检测到的是空格子,就把物体放在空格子下;如果鼠标释放终点位置下检测到的是其他物品,则交换位置;如果鼠标释放终点位置下检测到的是无效位置,包物体放回原来的位置。
& & 下面这个脚本是挂在物品预制体上的,可以实现拖拽效果;这些内容也都是参考了前辈们的内容,以自己的拙见进行了优化修改,有不当之处,还望指正,初学者一起相互学习。
using UnityE
using System.C
using UnityEngine.UI;
using UnityEngine.EventS
public class PetItemMove : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler, ICanvasRaycastFilter
private static Transform canvasT
private Transform nowP//物品是格子的子物体,nowParent记录的是当前物品属于哪个格子(格子1)
private bool isRaycastLocationValid =//默认射线不能穿透物品
private Camera canvasCamera =
void Start()
public void OnBeginDrag(PointerEventData eventData)//开始拖拽
if (canvasTra == null) canvasTra = GameObject.Find(&Canvas&).
canvasCamera = canvasTra.GetComponentInChildren&Camera&();
//Debug.Log(Input.mousePosition);
nowParent = transform.//nowparent为被拖拽物体的原始父物体
transform.SetParent(canvasTra);//将当前拖拽的物品放在canvas下
isRaycastLocationValid =//ui穿透:置为可以穿透
【拖拽物体移动的时候鼠标下是有物体一直跟随遮挡的,如果不穿透就获取不到放置位置(OnEndDrag中判断是空格子,物体,还是无效位置)】
public void OnDrag(PointerEventData eventData)//拖拽过程中
transform.position = canvasCamera.ScreenToWorldPoint(Input.mousePosition);//鼠标左键按住拖拽的时候,物体跟着鼠标移动
//transform.position = Input.mouseP//鼠标左键按住拖拽物体的时候不显示物体
public void OnEndDrag(PointerEventData eventData)//
GameObject go = eventData.pointerCurrentRaycast.gameO//获取到鼠标终点位置下 可能的物体
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);//将被拖拽的物体1放到鼠标终点下的格子2里面
SetParentAndPosition(go.transform, nowParent);//将鼠标终点格子2里面物体2 放到 原来物体1的格子1里面
if (transform.position == go.transform.position)
Debug.Log(&error&);
else//鼠标终点是:无效位置(所以物体放回原来的位置)
SetParentAndPosition(transform, nowParent);
SetParentAndPosition(transform, nowParent);
isRaycastLocationValid =//ui事件穿透:置为不能穿透
private void SetParentAndPosition(Transform child, Transform parent)//将child放到parent下作为子物体
child.SetParent(parent);
child.position = parent.
public bool IsRaycastLocationValid(Vector2 sp, Camera eventCamera)//UI事件穿透:如置为false即可以穿透,被图片覆盖的按钮可以被点击到
return isRaycastLocationV
下面是运行动态图:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:568次
排名:千里之外
原创:20篇
我想,你总觉得自己活得不快乐的原因,大体应该是:既无法忍受目前的状态,又没有能力改变眼前这一切;你虽然可以像只猪一样懒,缺无法像只猪一样懒得心安理得。如何用一个按钮 控制背包里面不同物品槽里物品得销毁?_unity3d吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:55,941贴子:
如何用一个按钮 控制背包里面不同物品槽里物品得销毁?收藏
点击任何一个物品 点击丢弃 都可以销毁当前点击物品槽里面得物品个数
请问这个该怎么实现?
unity是iOS排行榜上超过50款知名APP的广告变现首选,中国领先的iOS移动广告平台unity收益高,用户体验好,不扣量,擅长在提供出色用户体验的同时带来更高的广告收入
点击物品时记录所选中的格子(view),点击丢弃时清空格子的脚本数据(model)
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或【Unity3D】关于资源包更新的问题
[问题点数:40分,结帖人aspp12333]
【Unity3D】关于资源包更新的问题
[问题点数:40分,结帖人aspp12333]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。关于用数据库做背包这一块表格之间的数据是怎么处理的呢?_unity3d吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:55,941贴子:
关于用数据库做背包这一块表格之间的数据是怎么处理的呢?收藏
我的表格只做一张主角的背包表吗? 但是我的背包需要进来新的道具, 敌人也会掉落道具, 说白了道具其实就是一个ID,那要怎么处理这个ID的,不一样的敌人掉落不一样的道具,难道建立一个道具ID的数组进行随机吗? 大家有什么好的方法推荐一下呢,谢谢~!
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或}

我要回帖

更多关于 unity脚本执行顺序 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信