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

Unity實(shí)現(xiàn)各種樣式的血條

這篇具有很好參考價(jià)值的文章主要介紹了Unity實(shí)現(xiàn)各種樣式的血條。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

我將講述三種不同類型血條UI的實(shí)現(xiàn)

第一種是常見的進(jìn)度條樣式的血條實(shí)現(xiàn):

進(jìn)度條式的血條樣式如圖示

unity2d制作人物愛心生命值,unity,游戲引擎,ui,Powered by 金山文檔

要實(shí)現(xiàn)進(jìn)度條式的血條,我們需要使用到unity的UI中的滑動(dòng)條,它分為Slider滑動(dòng)條,Background滑動(dòng)條的背景,F(xiàn)ill Area填充條,這個(gè)組件就類似于進(jìn)度條不過帶了一個(gè)可以按住滑動(dòng)的滾鈕(Handle Slide Area),這里所用的血條UI去除了這個(gè)組件,可以根據(jù)你的實(shí)際使用需求選擇性刪除它。

unity2d制作人物愛心生命值,unity,游戲引擎,ui,Powered by 金山文檔

在Slider對(duì)象上,你可看到Slider欄最底下有個(gè)value選項(xiàng),改變它的數(shù)值,你就能看到進(jìn)填充條的變化,Slider的子組件Fill Area/Fill上有Rect TransForm如果你沒有將左右設(shè)置為0,那么它不會(huì)將整個(gè)背景欄全部遮完,簡(jiǎn)單理解就是這里的左右相當(dāng)于修改了圖像變換的起始位置。(如果你難以理解,建議應(yīng)該學(xué)習(xí)一定的unity的UI知識(shí)后再來)

根據(jù)value會(huì)變換情況得知,我們只需要寫一個(gè)腳本,將最大值設(shè)置為對(duì)象的最大生命值,最小值默認(rèn)為0,使得value的值和對(duì)象的血量保持一致即可實(shí)現(xiàn)血條變換效果。

//這部分是敵人對(duì)象上部分的代碼
  ? [Range(0, 1000)]
    public int max_blood;//最大血量

    private int current_blood;//當(dāng)前血量

? ? //該腳本掛載在AI敵人對(duì)象上,代碼僅供參考
? ? private Blood blood;//控制敵人對(duì)象血條的對(duì)象,Blood是另一個(gè)腳本,unity中沒有這個(gè)類

? ? void Strat()
? ? {
? ? blood = GetComponentInChildren<Blood>();//獲取敵人對(duì)象的血條組件
? ? //Blood腳本是掛載在敵人子對(duì)象的slider上的,實(shí)際情況根據(jù)你自己的設(shè)置位置選擇獲取方式
? ? 
? ? //這樣可以匹配不同的敵人的血量來顯示
? ? blood.Set_MaxHP(max_blood);//設(shè)置滑動(dòng)條的最大值最小值等(一般不用改最小值)
? ? }

? ? //控制AI血條值改變的方法,該方法在任何子彈碰撞到該物體時(shí)的OnCollisionStay2D下調(diào)用
? ? public void Change_HP(int change)//change是要修改的血量,正負(fù)皆可
    {
? ? ? ? //返回修改后的血量,將值控制在0到max_blood之間
        current_blood = Mathf.Clamp(current_blood + change, 0, max_blood);

? ? ? ? //在blood對(duì)象中控制修改數(shù)值
        blood.Set_CurentHP(current_blood);

? ? ? ? //如果血量小于0就銷毀對(duì)象(正常情況應(yīng)該是先播放死亡動(dòng)畫,關(guān)閉碰撞,再銷毀)
        if (current_blood <= 0)
        {
            Destroy(gameObject);
        }
    }
//掛載在Slider上的腳本
public class Blood : MonoBehaviour
{
? ? //slider對(duì)象
    private Slider slider;
? ? 
? ? //由于敵人對(duì)象初始化時(shí)執(zhí)行Set_MaxHP,如果不放在Awake就會(huì)導(dǎo)致slider還為null報(bào)錯(cuò)
? ? //這里不懂,可以參考以前的文章
    void Awake()
    {
        slider = GetComponent<Slider>();
    }
? ? 
? ? //設(shè)置最大值得范圍,并將當(dāng)前值也設(shè)為最大值(默認(rèn)敵人生成時(shí)是滿血)
    public void Set_MaxHP(int max_vlaues)
    {
        slider.maxValue = max_vlaues;
        slider.value = max_vlaues;
    }
? ? 
? ? //修改數(shù)值,使value保持和當(dāng)前生命值一致
    public void Set_CurentHP(int current_vlaues)
    {
        slider.value = current_vlaues;
    }
}

第二種是多個(gè)圖片式的血條實(shí)現(xiàn):

圖片血條就是玩家每受到一次傷害就減少一顆心這樣的效果,用的是UI中的圖像選項(xiàng),效果如圖:

unity2d制作人物愛心生命值,unity,游戲引擎,ui,Powered by 金山文檔

那么問題是如何做到,如果是直接將心的圖片刪除,那么會(huì)回血上的不便。我們?cè)谑褂胾nity時(shí),可能經(jīng)常用到設(shè)置圖像可視性,當(dāng)我們減血,只要把最高位上的心設(shè)置為不可見,這樣當(dāng)我們想要回復(fù)時(shí),只需要再設(shè)置回可見,就能達(dá)到效果。

//玩家部分腳本
? ? private Blood_image blood_Line;//控制圖形血量,初始化由你自己方式和放置的位置來寫,我不再給出
? ? 
? ? private int Max_blood;//最大血量大小

? ? private int Current_blood;//具體的血量大小
? ? 
? ? //控制圖形血量變化,如果傳入的set是true說明是加血,否則是減血
? ? //提醒一下這種方式僅針對(duì)為每一次傷害或者回血為1的情況,如果大于1則不能使用此方法
? ? public void ChangeHP(bool set)
    {
? ? ? ? //修改圖片的可視性,這個(gè)位置的索引正好就是blood
        if(set){
? ? ? ? ? ? //限制當(dāng)前血量在范圍內(nèi)
? ? ? ? ? ? Mathf.Clamp(Current_blood + 1, 0, Max_blood);
? ? ? ? ? ? //blood不能直接傳,因?yàn)榧友撬肝恢玫氖鞘冀K不是當(dāng)前需要修改的位置
? ? ? ? ? ? //這一步即使blood已經(jīng)是最大血量是由于是重復(fù)設(shè)為true所以也不會(huì)有問題
? ? ? ? ? ? blood_image.Active(Current_blood - 1, set);? 
? ? ? ? }
? ? ? ? else{
? ? ? ? ? ? Current_blood -= 1;//減則是另外一回事,因?yàn)檫@里每次改的是1,和最后的判斷死亡
? ? ? ? ? ? //故不需要使用Mathf.Clamp()
? ? ? ? ? ? blood_image.Active(Current_blood, set);
? ? ? ? }
? ? ? ? if(blood == 0){
? ? ? ? ? ? //無關(guān)部分,省略
? ? ? ? }
    }
//blood上的腳本
public class Blood_image : MonoBehaviour
{
    public GameObject[] Blood;//控制血圖片對(duì)象組

    void Start()
    {
        //由于我是在編輯器界面直接給Blood添加每個(gè)圖片的對(duì)象的,所有沒有初始化的代碼
? ? ? ? //根據(jù)你的實(shí)際情況可以選擇為添加制的
    }
? ? 
? ? //設(shè)置圖片可視性
    public void Active(int index, bool set)
    {
? ? ? ? //根據(jù)傳入對(duì)應(yīng)的位置來修改圖片的可視性
        Blood[index].SetActive(set);
    }
}

這種血條的問題在于如果對(duì)象屬于擁有高生命值時(shí),我們不可能繪制一堆心心在界面上,一種解決這種問題的方法是設(shè)置圖片的透明度或者大小,當(dāng)這個(gè)圖片的透明度為0或者大小為0時(shí)對(duì)下一張圖片繼續(xù)同樣操作即可。

第三種是畸形血條樣式的實(shí)現(xiàn):

一種常見的畸形血條就是環(huán)形血條,這個(gè)更多是作為技能冷卻條而不是血條,我這里就是技能條的類型,但是可以做成血條,基本的思路是一樣的,如圖左上角。

unity2d制作人物愛心生命值,unity,游戲引擎,ui,Powered by 金山文檔

設(shè)置環(huán)形血條也用的是UI中的圖像選項(xiàng),只不過將其的遮罩方式改為了填充方式(根據(jù)你的需求可以設(shè)置不同的方式,比如這里的環(huán)形遮罩方式是Radial360)當(dāng)你修改了填充度時(shí),圖像就會(huì)根據(jù)填充度環(huán)形的填充,1時(shí)整個(gè)圖像全部顯示,0.5只顯示上半部分(這個(gè)受你設(shè)置的起始點(diǎn)影響),類推一下,你就會(huì)發(fā)現(xiàn)這個(gè)實(shí)現(xiàn)原理其實(shí)和進(jìn)度條幾乎一樣,所以我就不廢話了,放碼!文章來源地址http://www.zghlxwxcb.cn/news/detail-768814.html

unity2d制作人物愛心生命值,unity,游戲引擎,ui,Powered by 金山文檔
//具體原理基本和slider一樣便不再重復(fù)
public class Blood_Circle : MonoBehaviour
{
    private Image image;
? ? 
? ? //由于fillAmount的范圍只能設(shè)為0~1,因此可以使用Current_blood/Max_blood來計(jì)算
    public void SetValue(float value)
    {
        image.fillAmount = value;
    }
}

到了這里,關(guān)于Unity實(shí)現(xiàn)各種樣式的血條的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • unity2d實(shí)現(xiàn)一個(gè)全方位的無限隨機(jī)地圖

    要實(shí)現(xiàn)一個(gè)全方位的無限隨機(jī)地圖,可以考慮以下步驟: 1.創(chuàng)建一個(gè)空的場(chǎng)景,并添加一個(gè)相機(jī)和一個(gè)玩家對(duì)象。 2.創(chuàng)建一個(gè)TileMap,它將作為你的地圖板塊。你可以使用隨機(jī)數(shù)生成算法生成各種類型的地形,如森林、草地、沙漠等等,并使用TileMap將它們組裝在一起來創(chuàng)建你

    2024年02月07日
    瀏覽(23)
  • unity2d里實(shí)現(xiàn)鼠標(biāo)拖拽物體的功能

    在 Unity 中實(shí)現(xiàn)鼠標(biāo)拖拽物體的功能需要使用到 Unity 的 Physics 系統(tǒng)。 要實(shí)現(xiàn)鼠標(biāo)拖拽物體,你需要在場(chǎng)景中添加以下內(nèi)容: 一個(gè) Rigidbody 2D 組件,用于控制物體的運(yùn)動(dòng)。 一個(gè) Box Collider 2D 組件,用于檢測(cè)鼠標(biāo)與物體的碰撞。 一個(gè)腳本,用于監(jiān)聽鼠標(biāo)的輸入,并在鼠標(biāo)按下時(shí)拖

    2024年02月11日
    瀏覽(20)
  • 【Unity2D】實(shí)現(xiàn)打怪掉落物品(如爆金幣等)的功能

    【Unity2D】實(shí)現(xiàn)打怪掉落物品(如爆金幣等)的功能

    本文章記錄實(shí)現(xiàn)打怪掉落物品的功能,以下代碼為2D實(shí)現(xiàn),3D模式稍加修改即可。 目錄 一、代碼部分 二、注意事項(xiàng) 三、效果展示 創(chuàng)建一個(gè)C#腳本命名為Item,并將該腳本掛載到需要掉落的物品上。 1.需要禁用掉落物品與自身和其他人物之間的碰撞(否則可能被物品撞飛)。

    2024年02月11日
    瀏覽(28)
  • 【用unity實(shí)現(xiàn)100個(gè)游戲之14】Unity2d做一個(gè)建造與防御類rts游戲(附項(xiàng)目源碼)

    【視頻】:https://www.udemy.com/course/awesome-builder-defender-game-in-unity/?couponCode=CMCOURSEDEC23 注意 :本文為學(xué)習(xí)筆記記錄,推薦支持原作者,去看原視頻自己手敲代碼理解更加深入

    2024年02月05日
    瀏覽(34)
  • Unity2D 實(shí)現(xiàn)UGUI滾動(dòng)鼠標(biāo)滑輪以鼠標(biāo)位置點(diǎn)為中心縮放圖片

    Unity2D 實(shí)現(xiàn)UGUI滾動(dòng)鼠標(biāo)滑輪以鼠標(biāo)位置點(diǎn)為中心縮放圖片

    ?先放參考文章: Unity3d UGUI以鼠標(biāo)位置點(diǎn)為中心縮放圖片(含項(xiàng)目源碼) https://blog.csdn.net/qq_33789001/article/details/117749837 再放實(shí)現(xiàn)效果: 說說事情緣由,項(xiàng)目需要用到這個(gè)效果,所以上網(wǎng)找了個(gè)參考文章,后來不知道為什么失效了,所以想著自己改改,看看是什么毛病。 貼原

    2024年02月11日
    瀏覽(20)
  • 【用unity實(shí)現(xiàn)100個(gè)游戲之15】開發(fā)一個(gè)類保衛(wèi)蘿卜的Unity2D塔防游戲4(附項(xiàng)目源碼)

    【用unity實(shí)現(xiàn)100個(gè)游戲之15】開發(fā)一個(gè)類保衛(wèi)蘿卜的Unity2D塔防游戲4(附項(xiàng)目源碼)

    本期緊接著上一篇,本期主要內(nèi)容是實(shí)現(xiàn)商店、購(gòu)買、出售、升級(jí)等功能。 新增TurretSettings 配置不同炮塔參數(shù) 繪制商店UI 新增TurretCard,渲染商品數(shù)據(jù),如果前面有繪制價(jià)格文本,還可以渲染價(jià)格文本,這里我就偷懶不弄了 掛載腳本,并配置 新增TurretShopManager,商店管理器

    2024年01月21日
    瀏覽(30)
  • 【用unity實(shí)現(xiàn)100個(gè)游戲之15】開發(fā)一個(gè)類保衛(wèi)蘿卜的Unity2D塔防游戲1(附項(xiàng)目源碼)

    【用unity實(shí)現(xiàn)100個(gè)游戲之15】開發(fā)一個(gè)類保衛(wèi)蘿卜的Unity2D塔防游戲1(附項(xiàng)目源碼)

    當(dāng)今,塔防游戲已經(jīng)成為游戲市場(chǎng)上備受歡迎的一類游戲類型?!侗Pl(wèi)蘿卜》作為其中的經(jīng)典之作,深受玩家喜愛。本項(xiàng)目旨在基于《保衛(wèi)蘿卜》的玩法和特點(diǎn),開發(fā)一個(gè)Unity2D塔防游戲,讓玩家可以在游戲中體驗(yàn)到精彩的策略對(duì)抗與刺激的關(guān)卡挑戰(zhàn)。 本項(xiàng)目將通過Unity引擎進(jìn)

    2024年02月04日
    瀏覽(25)
  • 【用unity實(shí)現(xiàn)100個(gè)游戲之15】開發(fā)一個(gè)類保衛(wèi)蘿卜的Unity2D塔防游戲5(附項(xiàng)目源碼,完結(jié))

    【用unity實(shí)現(xiàn)100個(gè)游戲之15】開發(fā)一個(gè)類保衛(wèi)蘿卜的Unity2D塔防游戲5(附項(xiàng)目源碼,完結(jié))

    本期是本項(xiàng)目的最后一篇,主要內(nèi)容是配置環(huán)境、生成不同敵人、結(jié)束重開。 我用的環(huán)境素材 https://assetstore.unity.com/packages/2d/environments/2d-sugar-world-asset-pack-urp-256585

    2024年02月05日
    瀏覽(31)
  • Unity2D學(xué)習(xí)筆記-Tilemap

    Unity2D學(xué)習(xí)筆記-Tilemap

    tilemap算是接觸了幾次,但是無論是看視頻還是看文章都一知半解,這次把編輯地圖的開始步驟搞清楚。 首先要知道tilemap是做什么的。 這里提到的Tilemap其實(shí)不止是Tilemap:Tilemap本身是地圖編輯器(雖然我更傾向于理解為“場(chǎng)景”,不過編輯地圖才是核心)。之前學(xué)的印象是,

    2023年04月09日
    瀏覽(26)
  • Unity2d游戲項(xiàng)目--小狐貍

    Unity2d游戲項(xiàng)目--小狐貍

    (一) 在文件夾中找到back圖片,并在檢查器面板中將back圖片的每單位像素?cái)?shù)設(shè)置為16。 (文件所在地) (面板設(shè)置) (二) 將圖片拖入到場(chǎng)景中 (一) 生成矩形的瓦片地圖 (二) 打開平鋪調(diào)色板 (三) 新建并命名為map,在原目錄新建一個(gè)文件夾,用于存放你在這個(gè)瓦

    2024年02月03日
    瀏覽(31)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包