u3d_rpg遊戲開發之物品管理(三)_u3d遊戲開發

來源:互聯網
上載者:User

接下來就是暫時告一段落的最後一個功能了——當滑鼠移至上方於有物品的格子的時候,顯示相應的物品資訊
在第二篇相關文章裡面有兩個空的方法體,其實就是為了實現今天的功能而預留的.所以接下來的代碼就是寫在InventoryItemGrid這個指令碼裡的了.
接下來就讓我們來實現這個功能 1.聲明變數

依然是聲明相應的變數來儲存相應的資料,在u3d中的物品欄的ui下先建立一個Panel,可作為文字背景,然後在Panel下建立Text,Panel是通過在u3d裡面擷取的,而text我這邊是通過代碼擷取的,這裡的text就是用來寫具體的物品的資訊的

    public Image goodsInformationContainer;//用來儲存物品資訊的容器,裡面有text檔案可以顯示物品資訊    public float showTime = 3;//物品資訊顯示的時間長度    private Text goodsInformation_text;//用來顯示物品資訊    private float time=0;//計時器,物品資訊顯示一段時間要消失    private bool isShowInformation = false;//標識是否開始顯示物品資訊
2. 建立ShowGoodsInformation();

我們再來定義一個方法ShowGoodsInformation();這裡我要先提一下如何通過代碼寫ui的位置,因為,物品資訊顯示的位置肯定要在物品的旁邊,當滑鼠移至上方於物品時,就要在它旁邊顯示相應的物品資訊,所以當我們讓panel顯示出來的時候,要對確定其位置.所以這個方法需要一個參數,即格子位置的參數RectTransform

    /// <summary>    /// 在字典尋找該物品,然後顯示物品資訊    /// </summary>    /// <param name="center">顯示物品資訊的位置</param>    private void ShowGoodsInformation(RectTransform center)    {        //如果id不等於0,就表示格子是有物品的        if (this.id != 0)        {            goodsInformationContainer.gameObject.SetActive(true);//使panel顯示            goodsInformationContainer.gameObject.GetComponent<RectTransform>().anchoredPosition = center.anchoredPosition + new Vector2(342.4f, -261.7f);//panel顯示的位置            ObjectInfo info = new ObjectInfo();//用來儲存物品資訊            info = ObjectsInfo._instance.GetObjectInfoById(id);//在字典裡查出這個物品並放到info            goodsInformation_text = goodsInformationContainer.GetComponentInChildren<Text>();//擷取panel下的text            //根據物品類型將物品資訊寫入text            switch(id/1000)            {            ///因為物品都是四位元,藥品最高位是1,裝備物品最高位是2,之類的,所以根據id/1000即可分辨是哪類物品,然後顯示相應資訊                case 1:                    ObjectInfo_Drug info_Drug=(ObjectInfo_Drug)info;                    goodsInformation_text.text="物品名稱:"+info.name+"\n回血量:"+info_Drug.hp+"\n回藍量:"+info_Drug.mp+"\n出售價格:"+info_Drug.price_sell;                    break;                case 2:                    ObjectInfo_Equip info_Equip = (ObjectInfo_Equip)info;                    goodsInformation_text.text = "物品名稱:" + info_Equip.name + "\n出售價格:" + info_Equip.price_sell;                    break;                case 3:                    ObjectInfo_Mat info_Mat = (ObjectInfo_Mat)info;                    goodsInformation_text.text = "物品名稱:" + info_Mat + "\n出售價格:" + info_Mat.price_sell;                    break;            }        }    }

其中確定Panel顯示位置的那行代碼中的Vector2需要自己去嘗試,找出相應的位移量然後加進去,因為我們穿進來的參數是格子ui的位置,而顯示的這個Panel是根據這個位置來位移的. 3. ShowGoodsInformation()的使用

好,有了以上的方法,那我們什麼時候去調用呢?一開始我們就定義了一個布爾isShowInformation ,當然是有用的,當它為真的時候就可以在Update()方法裡調用我們寫的這個方法了,而isShowInfomation要在什麼時候讓它為真呢?很明顯,當滑鼠移至上方在格子上的時候
那麼就需要讓我們的InventoryItemGrid繼承至IPointerEnterHandler和IPointerExitHandler這兩個介面,然後實現他們的方法

    /// <summary>    /// 實現介面方法,當滑鼠位于格子上時發生    /// </summary>    /// <param name="eventData"></param>    void IPointerEnterHandler.OnPointerEnter(PointerEventData eventData)    {        isShowInformation = true;    }    /// <summary>    /// 實現介面方法,當滑鼠離開格子時發生    /// </summary>    /// <param name="eventData"></param>    void IPointerExitHandler.OnPointerExit(PointerEventData eventData)    {        time+=showTime;    }

這個time+=showTime又是要幹嘛呢?其實當滑鼠移至上方於物品時,顯示物品資訊的時間得是有限的,比如懸停在格子上,它顯示出物品資訊,總不能一直顯示著,在這裡,當time>3時,也就是顯示三秒後,panel又隱藏起來,而當滑鼠離開格子時,這就實現了提前消失,以方便用來顯示接下來滑鼠會懸停的格子上的物品資訊. 4. Update()方法內容

直接上代碼了:

    void Update()    {        if (isShowInformation)        {            ShowGoodsInformation(this.GetComponent<RectTransform>());//調用方法顯示panel            time += Time.deltaTime;//開始累計時間            //如果顯示的時間到了,就隱藏panel,並重設時間,改變標識符            if (time > showTime)            {                isShowInformation = false;                time -= showTime;                goodsInformationContainer.gameObject.SetActive(false);            }        }    }

至此”u3d_rpg遊戲開發之物品管理”暫時完結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.