国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Unity 3D期末大作業(yè)--背包系統(tǒng)

這篇具有很好參考價(jià)值的文章主要介紹了Unity 3D期末大作業(yè)--背包系統(tǒng)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Unity游戲背包系統(tǒng)的實(shí)現(xiàn)

一、項(xiàng)目概述

1. 功能描述

該部分主要實(shí)現(xiàn)了游戲中玩家在個(gè)人背包和游戲角色之間切換裝備,能夠從背包中將裝備裝到游戲角色上也能夠?qū)⒂螒蚪巧难b備卸下放入背包。

卸下裝備放入背包
unity3d 背包系統(tǒng),3D游戲,unity,3d,游戲引擎
將背包中裝備賦給游戲角色
unity3d 背包系統(tǒng),3D游戲,unity,3d,游戲引擎

2. 實(shí)現(xiàn)思路

本功能無需3D效果,只需要在UI上進(jìn)行涉及即可,因此主要涉及知識為Unity UI組件的使用以及C#基礎(chǔ)編程。

主要文件結(jié)構(gòu)如下:
unity3d 背包系統(tǒng),3D游戲,unity,3d,游戲引擎

背包、裝備欄物品切換的實(shí)現(xiàn) :在背包和裝備欄上每個(gè)存放物品的格子設(shè)置一個(gè)空對象,并給他們添加Image組件,通過掛載編輯好的腳本可以實(shí)現(xiàn)Image上Sprite的改變,從而實(shí)現(xiàn)每個(gè)物品格子顯示空內(nèi)容還是某個(gè)裝備。
例如這是背包中第一個(gè)裝備格子的屬性:
unity3d 背包系統(tǒng),3D游戲,unity,3d,游戲引擎
裝備欄格子同上(腳本不同)。

裝備在狀態(tài)欄和背包之外的移動(dòng)
為了實(shí)現(xiàn)這個(gè)效果,可以效仿前面的思路,設(shè)置一個(gè)空對象,有Image組件,當(dāng)裝備從狀態(tài)欄/背包中脫離但還沒放置到背包/狀態(tài)欄上時(shí),該空對象的Image則顯示剛剛脫離裝備格子的裝備,其他時(shí)間該空對象不顯示。且該對象隨著鼠標(biāo)移動(dòng)。
unity3d 背包系統(tǒng),3D游戲,unity,3d,游戲引擎

二、項(xiàng)目實(shí)現(xiàn)

1. 背包裝備格子的處理:

由于給裝備格子添加了Button組件,只需要在掛載的腳本中實(shí)現(xiàn)按鈕點(diǎn)擊事件的處理即可。
該事件處理主要考慮兩個(gè)因素:1.被點(diǎn)擊的裝備格子是空格子還是有裝備的 2.此時(shí)是否還有裝備從狀態(tài)欄/背包中卸下但還是放置到某個(gè)格子里


using System.Collections;
using System.Collections.Generic;
using MyGameManager;
using UnityEngine;
using UnityEngine.UI;

public class bag : MonoBehaviour
{

    private MyGameSceneManager gsm;
    private Image bag_image;
    public int cli_type;
    public Sprite attack;
    public Sprite deffence;
    public Sprite move;
    public Sprite UIMask;

    void Awake()
    {
        gsm = MyGameSceneManager.GetInstance();
        bag_image = GetComponent<Image>();
    }

    public void On_bag_Button()
    {
        Debug.Log("in bag clicked .....");
        Debug.Log(cli_type);
        Debug.Log(bag_image.sprite);
        int clickType = gsm.GetClicked().GetClickType();
        if (bag_image.sprite != UIMask && clickType == 0)
        {
            Debug.Log(cli_type);

            bag_image.sprite = UIMask;
            gsm.GetClicked().SetClickType(cli_type);
            cli_type = 0;
        }
        else if (bag_image.sprite == UIMask)
        {
            if (clickType == 1)
                bag_image.sprite = attack;
            else if (clickType == 2)
                bag_image.sprite = deffence;
            else if (clickType == 3)
                bag_image.sprite = move;
            cli_type = clickType;
            gsm.GetClicked().SetClickType(0);
        }
    }

    // Use this for initialization
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {

    }
}

2. 狀態(tài)欄裝備格子的處理

考慮與背包格子相同的因素即可。
另外,狀態(tài)欄的三個(gè)格子對應(yīng)不同類型的裝備,每個(gè)格子只能裝備對應(yīng)類別的裝備。



using System.Collections;
using System.Collections.Generic;
using MyGameManager;
using UnityEngine;
using UnityEngine.UI;

public class left : MonoBehaviour
{

    private MyGameSceneManager gsm;
    private Image left_img;
    public int click_type;
    public Sprite zhuangbei;
    public Sprite UIMask;
    

    void Awake()
    {
        gsm = MyGameSceneManager.GetInstance();
        left_img = GetComponent<Image>();
    }

    public void On_left_Button()
    {
        Debug.Log("in left clicked .....");
        int clickType = gsm.GetClicked().GetClickType();
        if (left_img.sprite == zhuangbei && clickType == 0)
        {
            Debug.Log("equip: " + click_type);
            left_img.sprite = UIMask;
            gsm.GetClicked().SetClickType(click_type);
        }
        else if (left_img.sprite == UIMask)
        {
            if (clickType == click_type)
            {
                left_img.sprite = zhuangbei;
                gsm.GetClicked().SetClickType(0);
            }
        }
    }

    // Use this for initialization
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {

    }
}

3.卸下的裝備隨鼠標(biāo)移動(dòng)

裝備隨鼠標(biāo)移動(dòng)需要在空對象掛載的腳本中使用 Update()函數(shù)。不斷判斷當(dāng)前是否有裝備從格子中卸下,根據(jù)狀態(tài)修改空對象的Iamge組件。


using System.Collections;
using System.Collections.Generic;
using MyGameManager;
using UnityEngine;
using UnityEngine.UI;

public class clickedImage : MonoBehaviour
{

    private MyGameSceneManager gsm;
    private Image click_image;
  
    private int click_type = 0;
    public Sprite basep;
    public Sprite attack;
    public Sprite jinghua;
    public Sprite deffence;
    public Sprite move;
    public Color None;
    public Color NotNone;
    public Camera cam;


    void Awake()
    {
        gsm = MyGameSceneManager.GetInstance();
        gsm.SetMouse(this);
        click_image = GetComponent<Image>();
    }

    public int GetClickType()
    {
        return click_type;
    }

    public void SetClickType(int cli_type)
    {
        click_type = cli_type;
    }


    // Use this for initialization
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        Debug.Log("strat click_type:  ");
        Debug.Log(click_type);
        Debug.Log(transform.position.x);
        Debug.Log(transform.position.y);
        Debug.Log(transform.position.z);
        if (click_type == 0)
        {
            
            click_image.sprite = basep;
            // click_image.color = None;
        }
        else
        {
            // click_image.color = NotNone;
            if (click_type == 1)
                click_image.sprite = attack;
            else if (click_type == 2)
                click_image.sprite = deffence;
            else if (click_type == 3)
                click_image.sprite = move;
            
            Vector3 screenP =Camera.main.WorldToScreenPoint(transform.position);
            Vector3 mp = Input.mousePosition;
            mp.z=screenP.z;
            // Vector3 mmp = cam.ScreenToWorldPoint(mp);
            // transform.position = new Vector3(mp.x - 450, mp.y - 200, 0);
            transform.position = Camera.main.ScreenToWorldPoint(mp);
            // transform.position = mp+new Vector3(-370,-140,0);
            Debug.Log("mp: " + mp);

            // Debug.Log("mmp: " + mmp);
            Debug.Log("position: "+transform.position);
            Debug.Log(Camera.main.ScreenToWorldPoint(mp));

        }

    }
}

4. GameManager類

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ActionManager : MonoBehaviour
{

    // Use this for initialization
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {

    }
}

namespace MyGameManager
{

    public class MyGameSceneManager : System.Object
    {
        private static MyGameSceneManager _game_scene_manager;
        private static clickedImage _Clicked;

        public static MyGameSceneManager GetInstance()
        {
            if (_game_scene_manager == null)
            {
                _game_scene_manager = new MyGameSceneManager();
            }
            return _game_scene_manager;
        }

        public void SetMouse(clickedImage _clicked)
        {
            if (_Clicked == null)
            {
                _Clicked = _clicked;
            }
        }

        public clickedImage GetClicked()
        {
            return _Clicked;
        }
    }

}

三、效果展示

unity3d 背包系統(tǒng),3D游戲,unity,3d,游戲引擎
unity3d 背包系統(tǒng),3D游戲,unity,3d,游戲引擎

相關(guān)連接:

Github:/termHomework

bilibili 視頻展示文章來源地址http://www.zghlxwxcb.cn/news/detail-742125.html

到了這里,關(guān)于Unity 3D期末大作業(yè)--背包系統(tǒng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Unity3D學(xué)習(xí)之UI系統(tǒng)——NGUI

    Unity3D學(xué)習(xí)之UI系統(tǒng)——NGUI

    資源商店搜索 學(xué)習(xí)版自行搜索 導(dǎo)入即可 創(chuàng)建UI 創(chuàng)建NGUI后,掛載在UI Root 和其 子Camera的腳本 分辨率自適應(yīng)模式的基礎(chǔ) 3.1.1 分辨率概念 3.1.2 Root的作用 3.1.3 root腳本各組件 Minimun Height 和 Maximum Height 用于拖動(dòng)窗口時(shí),如果窗口變得很小了,UI不縮放的話,會(huì)擋住游戲,使用Flex

    2024年03月17日
    瀏覽(58)
  • Unity3D學(xué)習(xí)之UI系統(tǒng)——UGUI

    Unity3D學(xué)習(xí)之UI系統(tǒng)——UGUI

    3.2.1 Screen Space -Overlay 覆蓋模式 3.2.2 Screen Space - Camera 攝像機(jī)模式 創(chuàng)建專門的攝像機(jī)渲染UI 并讓主攝像機(jī)不渲染UI層 3.2.3 World Space 寬高 * 縮放系數(shù) = UI界面大小 參考分辨率 圖片格式要改為Sprite 恒定像素模式計(jì)算公式 會(huì)根據(jù)當(dāng)前分辨率 和 參考分辨率的比率自動(dòng)計(jì)算UI的縮放量

    2024年02月21日
    瀏覽(118)
  • Unity3D粒子系統(tǒng)之基礎(chǔ)屬性介紹(一)

    Unity3D粒子系統(tǒng)之基礎(chǔ)屬性介紹(一)

    下文將介紹如何用Unity3D的粒子系統(tǒng)。 (1)Duration:粒子的發(fā)射周期 圖中的5.00表示在5秒后會(huì)進(jìn)入下一個(gè)粒子的發(fā)射周期。如果勾選Looping,則5秒后也就是第一個(gè)周期結(jié)束時(shí)粒子會(huì)停止發(fā)射。Prewarm是預(yù)熱系統(tǒng),只有在勾選Looping后才有效,開始播放粒子是已經(jīng)發(fā)射了一段時(shí)間的

    2024年02月03日
    瀏覽(31)
  • Unity3D學(xué)習(xí)之UI系統(tǒng)——GUI

    Unity3D學(xué)習(xí)之UI系統(tǒng)——GUI

    設(shè)置Screen Type和Center Type 最終實(shí)現(xiàn)效果: 3.1.1 GUI 共同點(diǎn) 3.1.2 文本控件 可以傳圖片 在unity中拖入圖片 可以把Rect 設(shè)置成public 的變量,在控件中設(shè)置 文字和圖片均顯示 toolTip 獲取當(dāng)前選中的空間的附帶信息 GUI Style 控制樣式 3.1.3 按鈕控件 必須要按下并抬起才算被點(diǎn)擊 長按按鈕

    2024年01月22日
    瀏覽(100)
  • 【unity小技巧】unity3d環(huán)境帶霧的晝夜系統(tǒng)變化

    【unity小技巧】unity3d環(huán)境帶霧的晝夜系統(tǒng)變化

    鏈接:https://pan.baidu.com/s/1qlFSJSju6ZjwCylwkh14eA?pwd=veww 提取碼:veww 眩光其實(shí)可以簡單的理解為太陽或月亮 想要相機(jī)顯示眩光,需要在相機(jī)添加Flare Layer組件 配置參數(shù) 配置20 25 30 70 75 80位置的燈光顏色,具體的需要根據(jù)自己的天空盒 環(huán)境等,調(diào)配出適合的顏色和過渡 效果 加眩光

    2024年02月22日
    瀏覽(18)
  • Unity3d 制作一個(gè)簡單的NPC對話系統(tǒng)

    Unity3d 制作一個(gè)簡單的NPC對話系統(tǒng)

    ? 最近在自己寫一個(gè)比較小的項(xiàng)目,雖然自己是一個(gè)策劃,但是程序方面我覺得也是很有必要學(xué)一學(xué)的。 ? 經(jīng)過了接近一年的學(xué)習(xí),也終于是可以獨(dú)自寫一些小的系統(tǒng)了。 ? 這次自己寫了一個(gè)比較簡單的NPC對話系統(tǒng),供大家參考。 進(jìn)入對話區(qū)域 開始對話 Inspector面板可調(diào)

    2023年04月08日
    瀏覽(31)
  • Unity3D在車載導(dǎo)航系統(tǒng)的應(yīng)用場景淺談

    Unity3D在車載導(dǎo)航系統(tǒng)的應(yīng)用場景非常廣泛,它可以為車載導(dǎo)航系統(tǒng)帶來更加逼真、直觀和準(zhǔn)確的使用體驗(yàn)。以下是幾個(gè)具體的應(yīng)用場景: 3D地圖導(dǎo)航:Unity3D的實(shí)時(shí)3D渲染能力使得車載導(dǎo)航系統(tǒng)可以實(shí)現(xiàn)3D地圖導(dǎo)航功能。通過Unity3D,可以生成超寫實(shí)風(fēng)格的3D地圖,提供更加逼真

    2024年01月23日
    瀏覽(97)
  • unity3d 布娃娃系統(tǒng)插件 PuppetMaster 木偶師

    unity3d 布娃娃系統(tǒng)插件 PuppetMaster 木偶師

    PuppetMaster包含一個(gè)非常易于使用的視覺布娃娃創(chuàng)建工具,用于人形角色,將角色的動(dòng)畫的姿勢映射到木偶的的肌肉使其同步,并保持在那里,直到動(dòng)畫在下一幀覆蓋它。 ? 1. 將 人形 角色模型拖動(dòng)到場景并附加 BipedRagdollCreator . cs 組件。點(diǎn)擊 “Create a Ragdoll” 按鈕 , 點(diǎn)擊 “ D

    2023年04月08日
    瀏覽(25)
  • Unity3D基礎(chǔ)入門之粒子系統(tǒng)(屬性介紹+火焰粒子系統(tǒng)案例制作)

    Unity3D基礎(chǔ)入門之粒子系統(tǒng)(屬性介紹+火焰粒子系統(tǒng)案例制作)

    一、屬性介紹 1、主面板Particle System (1)Duration:粒子發(fā)射周期 圖中,5.00即在發(fā)射5秒后進(jìn)入下一個(gè)粒子發(fā)射周期。若沒有勾選Looping,則5秒后粒子會(huì)停止發(fā)射。 (2)Looping:粒子按照周期循環(huán)發(fā)射 讓粒子發(fā)射時(shí)間循環(huán)起來,一直發(fā)射粒子。 (3)Prewarm:預(yù)熱系統(tǒng) 開始播放粒

    2024年02月04日
    瀏覽(26)
  • Unity3D學(xué)習(xí)之UI系統(tǒng)——用NGUI制作游戲登陸界面

    Unity3D學(xué)習(xí)之UI系統(tǒng)——用NGUI制作游戲登陸界面

    會(huì)省略一些東西,可以看我的NGUI的博客 設(shè)置UI分辨率自適應(yīng) 設(shè)置Root 的層級 和攝像機(jī)渲染的層級為UI 主攝像機(jī)不渲染UI 一般都是美術(shù)給一個(gè)示意圖,然后按示意圖上拼面板 3.1.1 制作圖集 制作兩個(gè)新圖集 3.1.2 拖面板 檢查DrawCall 3.1.3 面板基類 創(chuàng)建面板基類, 首先設(shè)置成單例

    2024年02月19日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包