Unity背包系统设计,3D背包实现

作业:

UI 效果制作(你仅需要实现以下效果之一)

  • 进入  NGUI 官方网站,使用 UGUI 实现以下效果

实现效果

unity背包系统架构 unity3d背包系统_3D

参考博客:

背包系统制作: https://blog.kinpzz.com/2016/05/21/unity3d-ugui-Inventory/

人物模型改变:https://blog.uwa4d.com/archives/avartar.html

这次作业,我融合和两篇博客的精髓,实现了官方样例的功能。

通过拖曳装备,可以改变人物身上的模型。完成度十分高。

背包系统的制作过程,师兄的博客里已经十分详细,不再赘述。

接下来介绍一下人物模型的改变。

在人物模型的改变中,将人物模型生成的类Director.cs设置为单例模式。

在Director.cs中:改变武器,只需要按照下面的例子,引用函数即可(身体的其他部位雷同)

登录后复制


public void ChangeWeapon(int num)
    {
		if (!weapon_list[num])
		{
			for (int j = 0; j < weapon_list.Length; j++)
			{
				weapon_list[j] = false;
			}
			weapon_list[num] = true;

			character.ChangeWeapon("ch_we_one_hou_" + index[num]);
		}
	}
	
	

在DragItem.cs中,拖动位置的识别,是通过对应位置的名称改变的。所以Wear,和collection中Image名称一定要对应!不可以改变。Bag中的名称无所谓。

unity背包系统架构 unity3d背包系统_unity背包系统架构_02

在DragItem.cs中,例如Weapon1只能拖动到Weapon位置,或者Weapon0和Weapon1位置。

登录后复制


if (curEnter == null)
        {
            myTransform.position = originalPosition;
        }
        else if (curEnter.GetComponent<DragItem>().inWear || inWear)
        {
            string Pre_thisName = this.name.Substring(0, this.name.Length - 1);
            string Pre_curEnterName = curEnter.name.Substring(0, this.name.Length - 1);
            //移动至物品格子上
            if (curEnter.name == Pre_thisName)
            {
                UnityEngine.Debug.Log("移动至物品格子上");
                UnityEngine.Debug.Log(this.name);
                UnityEngine.Debug.Log(this.transform.position);
                UnityEngine.Debug.Log(curEnter.name);
                UnityEngine.Debug.Log(curEnter.transform.position);
                if (this.transform.position.x < 0)
                {
                    string name = this.name;
                    string num_s = name.Substring(name.Length - 1, 1);
                    int num = Convert.ToInt32(num_s);
                    changeBody(num, Pre_thisName, Pre_curEnterName);
                } 
                
                myTransform.position = curEnter.transform.position;
                originalPosition = myTransform.position;
                curEnter.GetComponent<Image>().color = lastEnterNormalColor;//当前格子恢复正常颜色

                curEnter.GetComponent<DragItem>().inWear = !curEnter.GetComponent<DragItem>().inWear;
                inWear = !inWear;
            }
            else if (Pre_curEnterName == Pre_thisName)
            {
                //移动至包裹中的其它物品上
                UnityEngine.Debug.Log("移动至包裹中的其它物品上");
                /*curEnter.name == eventData.pointerDrag.name &&*/
                if (curEnter != eventData.pointerDrag)
                {
                    UnityEngine.Debug.Log("交换:this.name:" + this.name);
                    UnityEngine.Debug.Log(this.transform.position);
                    UnityEngine.Debug.Log("交换:curEnter:" + curEnter.name);
                    UnityEngine.Debug.Log(curEnter.transform.position);
                    if (this.transform.position.x < 0)
                    {
                        string name = this.name;
                        string num_s = name.Substring(name.Length - 1, 1);
                        int num = Convert.ToInt32(num_s);
                        changeBody(num, Pre_thisName, Pre_curEnterName);
                    }
                    else if (this.transform.position.x > 0)
                    {
                        string name = curEnter.name;
                        string num_s = name.Substring(name.Length - 1, 1);
                        int num = Convert.ToInt32(num_s);
                        changeBody(num, Pre_thisName, Pre_curEnterName);
                    }
                    
                    Vector3 targetPostion = curEnter.transform.position;
                    curEnter.transform.position = originalPosition;
                    myTransform.position = targetPostion;
                    originalPosition = myTransform.position;

                    curEnter.GetComponent<DragItem>().inWear = !curEnter.GetComponent<DragItem>().inWear;
                    inWear = !inWear;
                }
                else//拖拽至其它对象上面(包裹上的其它区域)
                {
                    myTransform.position = originalPosition;
                }
            } else
            {
                myTransform.position = originalPosition;
            }
        } else
        {
            myTransform.position = originalPosition;
        }
        
        

  

免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空