此方法只是用于学习和实验所以细节不必要求

一、Ui设置。

画布配置如下:

布局:

说明:

画布里面首先建立一个panel命名为weapon1,在其内部再建立4个panel用于装备的卡槽,装备以image来显示,并且添加自定义hp脚本(hp脚本主要配置物品的名称、稀有度、说明)。message主要用来显示武器信息。image配置如下:

weapon1配置此处使用两种方法来检测鼠标事件(1.直接添加event trigger组建绑定函数  2.在dragManager代码中监听):

二、代码。

dragManager

//继承接口实现鼠标进入和移除事件
public class dragManager : MonoBehaviour,IPointerEnterHandler,IPointerExitHandler
{
//定义偏移量,用来记录鼠标和装备图片的偏移
public Vector3 offet;
//提示武器信息即message
public GameObject g;
//是否拖放成功
private bool massger; public Action a;
public Action b;
//拖拽武器
public GameObject game;
// Start is called before the first frame update
void Start()
{ } // Update is called once per frame
void Update()
{
if (a != null)
a();
// print(game.activeSelf);
}
//开始拖拽确定物体
public void beginDrag()
{
for (int i = ; i < transform.childCount; i++)
{
RectTransform rect =(RectTransform) transform.GetChild(i);
if (rect.rect.Contains(Input.mousePosition - rect.position) && rect.GetChild().gameObject.activeSelf)
{
offet = Input.mousePosition - rect.position;
g = rect.GetChild().gameObject;
return;
}
}
}
//释放
public void endDrag()
{
massger = false;
for (int i = ; i < transform.childCount; i++)
{
RectTransform rect = (RectTransform)transform.GetChild(i);
if (rect.rect.Contains(Input.mousePosition - rect.position) && !rect.GetChild().gameObject.activeSelf && g!=null)
{
rect.GetChild().GetComponent<Image>().sprite=g.GetComponent<Image>().sprite;
g.GetComponent<UnityEngine.UI.Image>().sprite = null;
g.gameObject.SetActive(false);
rect.GetChild().gameObject.SetActive(true);
massger = true;
g.GetComponent<RectTransform>().localPosition = Vector3.zero;
g = null;offet = Vector3.zero;
return;
}
}
if (!massger && g!=null)
{
g.GetComponent<RectTransform>().localPosition = Vector3.zero;
g = null; offet = Vector3.zero;
}
}
//拖拽中
public void draging()
{
if (g != null)
{
g.GetComponent<RectTransform>().position = Input.mousePosition - offet;
}
}
//鼠标进入
public void OnPointerEnter(PointerEventData eventData)
{
a += NewMethod;
} private void NewMethod()
{
for (int i = ; i < transform.childCount; i++)
{
RectTransform rect = (RectTransform)transform.GetChild(i);
if (rect.rect.Contains(Input.mousePosition - rect.position) && rect.GetChild().gameObject.activeSelf)
{
Text t = game.transform.GetChild().GetComponent<Text>();
hp h= rect.GetChild().GetComponent<hp>();
string s= "<color=" + h.color + ">"+ h.name +"</color>\n"+h.description;
t.text =s.ToString(); break;
}
}
game.transform.position = new Vector3(Input.mousePosition.x + game.GetComponent<RectTransform>().rect.width / ,
Input.mousePosition.y - game.GetComponent<RectTransform>().rect.height / , );
if(!game.activeSelf)game.SetActive(true);
} //鼠标移出
public void OnPointerExit(PointerEventData eventData)
{
b += NewMethod2;
b();
}
private void NewMethod2()
{
game.SetActive(false);
b = null;
a = null;
}
}

三、运行结果有点丑,但只是实验用。

四、解决个别问题。屏幕放大图片信息一直闪烁。

将text的Raycast Target取消勾选。

unity 之 背包系统的更多相关文章

  1. Siki_Unity_3-3_背包系统

    Unity 3-3 背包系统(基于UGUI) 任务1&2&3:演示.介绍.类图分析 背包面板.箱子面板.锻造合成面板.装备佩戴面板.商店面板等 面板的显示和隐藏.保存和加载.拾起物品. ...

  2. unity游戏设计之背包系统

    这次任务是模仿上图的样子,制作一个类似的背包系统. 上面的链接为:http://www.tasharen.com/ngui/exampleX.html 我们的目标是: 1.实现背包系统的UI界面 2. ...

  3. Unity 背包系统的完整实现(基于MVC框架思想)

    前言: 项目源码上传GitHub:Unity-knapsack 背包系统: 背包系统是游戏中非常重要的元素,几乎每一款游戏都有背包系统,我们使用背包系统可以完成装备栏的数据管理,商店物体的数据管理等等 ...

  4. 【Unity】基于MVC模式的背包系统 UGUI实现

    前言 本文基于MVC模式,用UGUI初步实现了背包系统. Control层包括了点击和拖拽两种逻辑. 博文首发:http://blog.csdn.net/duzixi 下载地址:https://git ...

  5. [Unity3D]Unity资料大全免费分享

     都是网上找的连七八糟的资料了,整理好分享的,有学习资料,视频,源码,插件……等等 东西比较多,不是所有的都是你需要的,可以按  ctrl+F 来搜索你要的东西,如果有广告,不用理会,关掉就可以了,如 ...

  6. NGUI简单背包系统的实现

    一.利用txt文件存储游戏物品信息 首先在asset下创建一个txt文件,这里我们命名为objectsInfoList.txt,并将其拖放到unity Project视图中. 其中txt中我们先存放一 ...

  7. 【UGUI】 (三)------- 背包系统(上)之简易单页背包系统及检索功能的实现

    背包系统,无论是游戏还是应用,都是常常见到的功能,其作用及重要性不用我多说,玩过游戏的朋友都应该明白. 在Unity中实现一个简易的背包系统其实并不是太过复杂的事.本文要实现的是一个带检索功能的背包系 ...

  8. 一些值得学习的Unity教程 (很实用的包括源码)

    ***********************项目源码******************************** 1. 降临 2. 沉睡缤纷乐 3. 千炮捕鱼 4. Photon官方FSP示例 ...

  9. Unity从实践中学习(1)

    首先在实际中unity的开发之中快捷键应该是相当重要的一个部分,这里先引用csdn的一个博客,https://blog.csdn.net/qq_34552886/article/details/697 ...

随机推荐

  1. LODOP打印项水平居中

    LODOP控制打印项水平居中,可以用如下语句,该语句控制的是打印项本身在纸张中水平居中.LODOP.SET_PRINT_STYLEA(0,"Horient",2);这个根据大的打印 ...

  2. linux : 各个发行版中修改python27默认编码为utf-8

    该方法可解决robot报错:'ascii' codec can't encode character u'\xf1' in position 16: ordinal not in  range(128 ...

  3. jvm面试常见题

    背景:jvm相关题目面试必问,后面要深入的进行总结. JVM 面试知识整理 jvm调优命令 调优工具 Minor GC ,Full GC 触发条件 Minor GC触发条件:当Eden区满时,触发Mi ...

  4. Oracle Spatial分区应用研究之一:分区与分表查询性能对比

    1.名词解释 分区:将一张大表在物理上分成多个分区,逻辑上仍然是同一个表名. 分表:将一张大表拆分成多张小表,不同表有不同的表名. 两种数据组织形式的原理图如下: 图 1分表与分区的原理图 2.实验目 ...

  5. OpenJudge 4152 最佳加法表达式

    总时间限制: 1000ms 内存限制: 65536kB 描述 给定n个1到9的数字,要求在数字之间摆放m个加号(加号两边必须有数字),使得所得到的加法表达式的值最小,并输出该值.例如,在1234中摆放 ...

  6. USACO19DEC题解

    Bronze A Cow Gymnastics 题目:https://www.luogu.com.cn/problem/P5831 题解:用数组存一下出现位置,O(n^2)枚举一下就好. 代码: #i ...

  7. 【转帖】vim/sed/awk/grep等文件批处理总结

    vim/sed/awk/grep等文件批处理总结 https://www.cnblogs.com/cangqiongbingchen/p/9760544.html Vim相关操作 1.基础 * 和 # ...

  8. Prometheus入门到放弃(6)之AlertManager进阶

    前面几个篇幅,我们介绍了alertmanger报警配置,在实际运维过程中,我们都会遇到,报警的重复发送,以及报警信息关联性报警.接下来我们就介绍下通过alertmanger对告警信息的收敛.一.告警分 ...

  9. Python小知识点+保留字

    注意 !/usr/bin/python # -- coding: UTF-8 -- #中文编码 Python空行:函数之间或类的方法之间用空行分隔,表示一段新的代码的开始 Python注释:单行注释采 ...

  10. Linux远程管理命令

    关机\重启 shutdown 选项 时间 参数 -r 重启 例子: shutdown 1分钟后关机 shutdown now 立刻关机 shutdown –r now 立即重启 shutdown 20 ...