游戏背包简易版(2)

本文介绍了一个简单的Unity游戏背包系统的实现过程,包括鼠标悬停显示物品信息和点击物品显示使用面板的功能。通过继承接口IPointerEnterHandler和IPointerExitHandler,实现了物品信息的展示,并给出了Use和Sell类的示例代码,用于物品的使用和售卖操作。作者分享了作为新手的学习心得,并表示将努力提高代码的规范性。
摘要由CSDN通过智能技术生成

继续把背包做完吧!此版本只适合练手,不适合用在开发上面,但是比较简单,想看上半部分,可去小编博客查看。

上次做到可以随机生成,现在要做把鼠标放到生成的预设物上可跳出一个面板显示该物品的详细信息。这就需要继承接口了!!

,大概就是这个效果,写一个脚本挂在预设物上面。


//....................................................................................BackPackShow.............................................................

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


public class BackPackShow : MonoBehaviour,IPointerEnterHandler,IPointerExitHandler {          //需要继承的两个接口,在引用之前需要添加命名空间

//消息和使用面板
    public GameObject messagePanel;
    public GameObject usePanel;

  //文本,定义成静态可在别的脚本调用
    public static Text number;

//点击按钮

    public Button button;


void Start ()

    {

//初始化

        messagePanel = GameObject.Find("BG").gameObject.transform.FindChild("messagePanel").gameObject;
        usePanel = GameObject.Find("BG").gameObject.transform.FindChild("usePanel").gameObject;
        button = transform.GetComponent<Button>();
        button.onClick.AddListener(OnClick);
}


void Update ()
    {
   
}

//点击事件
    public void  OnClick()
    {
        usePanel.SetActive(true);            //点击就会跳出使用面板
        number = transform.GetChild(1).GetComponent<Text>();   //定义的文本就代表了生成预设物的第一个子物体,为了别的脚本的调用的
        for (int i = 0; i < SavaData.saveDataList.baseBackPackList.Count; i++)

        {

            if (transform.GetChild(0).GetComponent<Text>().text == SavaData.saveDataList.baseBackPackList[i].name)
            {
        usePanel.transform.GetChild(0).GetComponent<Text>().text = SavaData.saveDataList.baseBackPackList[i].name;
        usePanel.transform.GetChild(1).GetComponent<Text>().text = SavaData.saveDataList.baseBackPackList[i].Des;
            }
        }
    }

//鼠标放在生成预设物的上面就会执行下面的方法
    void IPointerEnterHandler.OnPointerEnter(PointerEventData eventData)
    {
        for (int i = 0; i < SavaData.saveDataList.baseBackPackList.Count; i++)
        {
            if (transform.GetChild(0).GetComponent<Text>().text == SavaData.saveDataList.baseBackPackList[i].name)
            {
                messagePanel.SetActive(true);
   messagePanel.transform.position = new Vector3(transform.position.x + 180,transform.position.y, transform.position.z);
   messagePanel.transform.GetChild(0).GetComponent<Text>().text = SavaData.saveDataList.baseBackPackList[i].name;
   messagePanel.transform.GetChild(1).GetComponent<Text>().text = SavaData.saveDataList.baseBackPackList[i].Des;
            }
        }
    }

//鼠标离开生成预设物的上面就会执行下面的方法
    void IPointerExitHandler.OnPointerExit(PointerEventData eventData)
    {
        messagePanel.SetActive(false);
    }
}


到此就可以实现鼠标放上去可显示具体物品信息,点击该物品可跳出使用面板了。

最后就是使用和售卖了:


//............................................................................................UsePanel..........................................................................

public class Use : MonoBehaviour {
//使用面板
    public GameObject sellPanel;

//关闭方法

    public void Close()
    {
        gameObject.SetActive(false);
    }

//使用按钮方法
    public void UseButton()
    {
        BackPackShow.number.text = (int.Parse(BackPackShow.number.text) - 1).ToString();   //预设物的number文本每点击一次就-1
        if (int.Parse(BackPackShow.number.text)<0)             //当它小于零就执行关闭和删除父物体
        {
            Close();
            Destroy(BackPackShow.number.transform.parent.gameObject);
        }
    }

//售卖按钮方法
    public void SellButton()
    {
        sellPanel.SetActive(true);               //这里只是为了跳转去售卖页面
        gameObject.SetActive(false);
    }

}




//........................................................................................sellPanel...........................................................................................

public class Sell : MonoBehaviour {

//指数量的文本
    public Text number;

//数量
    public int count;

//指预设物上面的代表数量的文本
    public int numberCount;


    void Awake()
    {
        numberCount = int.Parse(BackPackShow.number.text);
    }


void Update () 

{

        numberCount = int.Parse(BackPackShow.number.text);
        number.text = count.ToString();
    }

//减号按钮上的方法
    public void jianClick()
    {

        if (count>0)                     //当数量>0才可以减

        {
            count--;
        }
    }

//加号按钮上的方法
    public void jiaClick()
    {
        if (count<numberCount)                 //当数量<预设物的数量才可以减
        {
            count++;
        }
    }

//售卖按钮上的方法
    public void sellClick()
    {
        BackPackShow.number.text = (int.Parse(BackPackShow.number.text) - count).ToString(); 
        if (int.Parse(BackPackShow.number.text)<=0)
        {
            
            Destroy(BackPackShow.number.transform.parent.gameObject);
            Close();
        }
    }


    public void Close()
    {
        gameObject.SetActive(false);
    }

}


一口气写完了,不然怕又要拖到猴年马月了,所以要赶紧写完,我发现别的博主都可以把代码写的很规范,不知道是怎么弄的,毕竟还是新手,我会多研究研究,尽量写的整齐规范一些,好看的更清楚,这次我发现了可以给字加颜色(愚蠢的我写了4篇才发现),那就给注释加个颜色吧!,希望喜欢的人能给我点个赞鼓励一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值