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

unity2D橫版游戲教程8-音效

這篇具有很好參考價(jià)值的文章主要介紹了unity2D橫版游戲教程8-音效。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

簡(jiǎn)單介紹一下unity audio,auido包括三個(gè)東西,分別是Aduio Listener,Audio Source,Audio Clips。Audio Listener就相當(dāng)于耳朵,是用來(lái)聽聲音的,Audio Source就相當(dāng)于播放器,一個(gè)音源,可以播放聲音,具體播放什么聲音就靠Audio Clips

通常Audio Listener只有一個(gè),默認(rèn)情況下Audio Listener就在Main Camera中,是固定的

unity2D橫版游戲教程8-音效

?接下來(lái)就要在游戲場(chǎng)景中擺放各種聲音的內(nèi)容,然后播放讓Audio Listener來(lái)聽

所以我們要導(dǎo)入音頻資源

unity2D橫版游戲教程8-音效

?導(dǎo)入之后我們?cè)賹?dǎo)入一下bgm資源

unity2D橫版游戲教程8-音效

?然后我們就要播放聲音了

我們?cè)贖ierarchy欄創(chuàng)建一個(gè)空項(xiàng)目命名為SoundManager,我們用這個(gè)項(xiàng)目來(lái)管理我們游戲的所有音效

然后我們要寫一下代碼來(lái)控制聲音,所以創(chuàng)建一個(gè)C#腳本命名為SoundManager,然后我們將這個(gè)腳本掛到空項(xiàng)目SoundManager上

unity2D橫版游戲教程8-音效

?我們還需要給這SoundManager項(xiàng)目添加一個(gè)Audio Source來(lái)播放音效

我們讓SoundManager項(xiàng)目可以掛載所有我們需要的聲音效果,每當(dāng)我使用某個(gè)音效的時(shí)候,我們將Audio Clip放到Audio Source里面然后將它播放,每切換到不同的聲音時(shí)我們放進(jìn)去不同的Audio Clip

unity2D橫版游戲教程8-音效

?然后我們寫一下代碼,我們要先獲得自身的Audio Source的引用,然后我們需要很多的Audio Clip來(lái)存儲(chǔ)我們的音效,這里有跳躍的聲音,受傷的聲音,吃櫻桃的聲音,還有敵人死亡時(shí)的聲音,敵人死亡的音效我們后面在單獨(dú)做,我們這里主要針對(duì)人物來(lái)設(shè)置音效

unity2D橫版游戲教程8-音效

?我們回到unity設(shè)置一下這幾個(gè)引用

unity2D橫版游戲教程8-音效

?有很多音效可以自己挑選

接下來(lái)我們創(chuàng)建不同的函數(shù)來(lái)將不同的音效輸入到Audio Source播放

unity2D橫版游戲教程8-音效

?當(dāng)我們?nèi)宋锾S或者吃到櫻桃就會(huì)播放SoundManager腳本中的函數(shù)

怎么從playercontroller訪問(wèn)SoundManager的函數(shù)呢,前面我們消滅敵人那里我們是生成了一個(gè)Enemy的實(shí)例,然后獲得自身的組件調(diào)用死亡函數(shù)。這里我們不這么做,因?yàn)檫@么做我們需要在三個(gè)地方執(zhí)行這樣的操作,這樣不是很方便。

這里我們使用靜態(tài)類的方法生成一個(gè)實(shí)例,然后在其他的代碼就可以直接調(diào)用這個(gè)類中的函數(shù)了

我們先回到SoundManager類,我們要先將SoundManager這個(gè)類原地進(jìn)行實(shí)例化,這樣我們就可以用這個(gè)實(shí)體訪問(wèn)這個(gè)類中的所有函數(shù)

unity2D橫版游戲教程8-音效

?我們這里創(chuàng)建了一個(gè)SoundManager靜態(tài)實(shí)例的對(duì)象,然后我們?cè)贏wake函數(shù)里面將自身賦值給instance,這樣instance就是自身的靜態(tài)實(shí)例,可以訪問(wèn)SoundManager類的所有對(duì)象。

Awake函數(shù)與start函數(shù)類似,不過(guò)Awake函數(shù)會(huì)在start函數(shù)前調(diào)用,Awake函數(shù)是腳本對(duì)象實(shí)例化后被調(diào)用的,而start函數(shù)是在對(duì)象的第一幀調(diào)用的,這里就不細(xì)說(shuō)了

然后我們?cè)趐layercontroller設(shè)置一下播放時(shí)的代碼

跳躍時(shí)音效

unity2D橫版游戲教程8-音效

?吃到櫻桃時(shí)的音效

unity2D橫版游戲教程8-音效

?受到傷害時(shí)的音效

unity2D橫版游戲教程8-音效

?這樣就設(shè)置好了

還有背景音樂(lè)還沒(méi)有設(shè)置,我們?cè)赟oundManager項(xiàng)目那里再創(chuàng)建一個(gè)Audio Source組件,我們把它的Audio Clip設(shè)置我們想要的bgm就行,循環(huán)播放記得勾選loop

unity2D橫版游戲教程8-音效

?之后這個(gè)Audio Source我們就不用管了

下面我們把敵人死亡時(shí)的音效給添加上去,我們給Enemy_Frog添加一個(gè)AudioSource,選擇合適的死亡音效添加到它的Audio Clip,記得把play on awake取消勾選,不然游戲一運(yùn)行就會(huì)播放這個(gè)音效

unity2D橫版游戲教程8-音效

?然后我們?cè)贓nemy腳本里面在死亡的函數(shù)里面播放這個(gè)音效即可

unity2D橫版游戲教程8-音效

?這樣就ok了,我們回到游戲里實(shí)驗(yàn)一下就行了

最后貼一下SoundManager,Enemy還有playercontroller的代碼

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

public class SoundManager : MonoBehaviour
{
    public static SoundManager instance;//生成靜態(tài)實(shí)例
    public AudioSource audioSource;//播放器
    public AudioClip hurtAudio, jumpAudio, cherryAudio;//不同的音效資源

    private void Awake()
    {
        instance = this;
    }

    //不同音效的函數(shù)
    public void JumpAudio()
    {
        audioSource.clip = jumpAudio;
        audioSource.Play();
    }
    public void HurtAudio()
    {
        audioSource.clip = hurtAudio;
        audioSource.Play();
    }
    public void CherryAudio()
    {
        audioSource.clip = cherryAudio;
        audioSource.Play();
    }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Enemy : MonoBehaviour
{
    protected Animator anim;
    private AudioSource deathSource;

    protected virtual void Start()
    {
        anim = GetComponent<Animator>();
        deathSource = GetComponent<AudioSource>();
    }

    //播放完死亡動(dòng)畫銷毀敵人
    public void DeathFall()
    {
        Destroy(gameObject);
    }
    
    //關(guān)閉碰撞器
    public void Death()
    {
        //先把敵人的碰撞器關(guān)閉,這樣敵人就可以掉下去了
        GetComponent<Collider2D>().enabled = false;
        //播放死亡動(dòng)畫
        anim.SetTrigger("death");
        //播放死亡音效
        deathSource.Play();
    }
}

?

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

public class playercontroller : MonoBehaviour
{
    private Rigidbody2D rb;//獲得Rigidbody2D組件
    private Collider2D coll;//獲得Collider2D組件
    private Animator anim;//獲得動(dòng)畫組件
    public float speed, jumpForce;//公開,設(shè)置速度和跳躍力
    public LayerMask ground;//獲得地面圖層
    public Transform groundCheck;//檢測(cè)角色是否碰到地面
    private bool isJump, isGround;//判斷是否按下空格鍵,判斷是否在地面
    private int jumpCount;//用來(lái)設(shè)置角色是幾段跳
    private int cherries;//計(jì)數(shù)變量
    public Text cherryText;//櫻桃計(jì)數(shù)的UI組件
    private bool isHurt;//受擊判斷

    //初始化
    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
        coll = GetComponent<Collider2D>();
        anim = GetComponent<Animator>();
    }

    void Update()
    {
        //如果按下空格鍵并且在地面上
        if (Input.GetKeyDown(KeyCode.Space) && jumpCount > 0)
        {
            isJump = true;
        }
    }
    private void FixedUpdate()
    {
        isGround = Physics2D.OverlapCircle(groundCheck.position, 0.1f, ground);
        if(!isHurt)
        {
            Movement();
        }
        Jump();
        SwitchAnim();
    }

    //基礎(chǔ)移動(dòng)
    void Movement()
    {
        float horizontal = Input.GetAxisRaw("Horizontal");
        rb.velocity = new Vector2(horizontal * speed, rb.velocity.y);//設(shè)置x軸的移動(dòng)
        //設(shè)置角色的轉(zhuǎn)向問(wèn)題
        if (horizontal != 0)
        {
            transform.localScale = new Vector3(horizontal, 1, 1);
            anim.SetBool("run", true);
        }
        else
            anim.SetBool("run", false);
    }

    //跳躍
    void Jump()
    {
        //如果在地面設(shè)置二段跳
        if (isGround)
        {
            jumpCount = 2;
        }
        //按下跳躍鍵且在地面上
        if (isJump && isGround)
        {
            rb.velocity = new Vector2(rb.velocity.x, jumpForce);
            SoundManager.instance.JumpAudio();
            jumpCount--;
            isJump = false;
        }
        //按下跳躍鍵且不在地面上且jumpCount大于0
        else if (isJump && !isGround && jumpCount > 0)
        {
            rb.velocity = new Vector2(rb.velocity.x, jumpForce);
            SoundManager.instance.JumpAudio();
            jumpCount--;
            isJump = false;
        }
    }

    //切換動(dòng)畫
    void SwitchAnim()
    {
        //如果在下落狀態(tài)
        if (rb.velocity.y < 0 && !isGround)
        {
            anim.SetBool("fall", true);
            anim.SetBool("jump", false);
        }
        //如果在跳躍狀態(tài)
        if (!isGround && rb.velocity.y > 0)
        {
            anim.SetBool("jump", true);
        }
        //如果人物受擊
        else if (isHurt)
        {
            anim.SetBool("hurt", true);
            if (Mathf.Abs(rb.velocity.x) < 0.1f)
            {
                anim.SetBool("hurt", false);
                isHurt = false;
            }
        }
        //如果在地面上
        else if (coll.IsTouchingLayers(ground))
        {
            anim.SetBool("fall", false);
        }   
    }

    //判斷是否碰到物品
    private void OnTriggerEnter2D(Collider2D collision)
    {
        if(collision.tag=="Collection")
        {
            Destroy(collision.gameObject);
            cherries++;
            cherryText.text = "櫻桃:" + cherries;
            SoundManager.instance.CherryAudio();
        }
    }

    //消滅敵人
    private void OnCollisionEnter2D(Collision2D collision)
    {
        //判斷是否碰到敵人
        if(collision.gameObject.tag=="Enemy")
        {
            //消滅敵人
            Enemy enemy = collision.gameObject.GetComponent <Enemy>();//獲得敵人父類引用
            if(anim.GetBool("fall"))//判斷是否下落跳到敵人頭上消滅敵人
            {
                enemy.Death();//調(diào)用父類函數(shù)
                rb.velocity = new Vector2(rb.velocity.x, jumpForce);
                anim.SetBool("jump", true);
            }
            //如果人物在敵人的左邊
            else if(transform.position.x<collision.gameObject.transform.position.x)
            {
                rb.velocity = new Vector2(-8, rb.velocity.y);
                isHurt = true;
                SoundManager.instance.HurtAudio();
            }
            //如果人物在敵人的右邊
            else if(transform.position.x>collision.gameObject.transform.position.x)
            {
                rb.velocity = new Vector2(8, rb.velocity.y);
                isHurt = true;
                SoundManager.instance.HurtAudio();
            }
        }
    }
}

如有錯(cuò)漏之處,敬請(qǐng)指正!?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-474362.html

到了這里,關(guān)于unity2D橫版游戲教程8-音效的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(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)文章

  • 6.Unity2D 橫版 受擊反饋+跟隨血條+延時(shí)/延遲扣血+協(xié)程的應(yīng)用

    6.Unity2D 橫版 受擊反饋+跟隨血條+延時(shí)/延遲扣血+協(xié)程的應(yīng)用

    總目錄 https://blog.csdn.net/qq_54263076/category_11900070.html?spm=1001.2014.3001.5482 ?1. 受擊反饋 用 Unity 探究 2D 游戲的打擊感_技術(shù)宅也愛玩游戲的博客-CSDN博客_unity擊退 引言這是我畢業(yè)設(shè)計(jì)的一部分emmm……我的畢設(shè)和格斗游戲相關(guān),而對(duì)于打擊感的研究算是其中我比較在意的一環(huán)?,F(xiàn)在

    2023年04月08日
    瀏覽(54)
  • 13.Unity2D 橫版 可上下左右移動(dòng)的雙向平臺(tái)(雙向行走+可移動(dòng)+單獨(dú)判定)+隨機(jī)平臺(tái)生成

    13.Unity2D 橫版 可上下左右移動(dòng)的雙向平臺(tái)(雙向行走+可移動(dòng)+單獨(dú)判定)+隨機(jī)平臺(tái)生成

    ? ? 總目錄 https://blog.csdn.net/qq_54263076/category_11900070.html?spm=1001.2014.3001.5482 大多數(shù)平臺(tái)教程全是碰撞體的可移動(dòng)平臺(tái),并沒(méi)有可跳上的平臺(tái),并且要求按下鍵會(huì)從平臺(tái)上跳下來(lái)。有也只是通過(guò)控制平臺(tái)的“2D平臺(tái)效果碰撞體”組件的單向平臺(tái)的旋轉(zhuǎn)偏移來(lái)做,但是這樣會(huì) 出現(xiàn)一

    2024年02月04日
    瀏覽(21)
  • 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)
  • Unity2D繪制游戲地圖

    Unity2D繪制游戲地圖

    首先,我們選擇我們的地圖素材(由于筆者在前段時(shí)間已經(jīng)進(jìn)行切割,最近才開始整理這一段,所以這個(gè)是用的老素材,可能有朋友就會(huì)覺(jué)得切割前后不一致,但是思路是一樣的,大家學(xué)習(xí)思路即可) ?接著,我們找到右上角的Slice進(jìn)行圖片切割,我這邊簡(jiǎn)單介紹一下這個(gè)切

    2024年02月08日
    瀏覽(30)
  • Unity2D小狐貍教程筆記

    Unity2D小狐貍教程筆記

    下載 https://unity.cn/releases 默認(rèn)顯示方式 window - layout - default SampleScene : Project - 文件目錄 Scene -游戲畫面 asset store - 素材商店 在asset store下載素材 sunnyland shift + sapace 放大窗口 1.背景導(dǎo)入 每個(gè)格子16像素: Pixels Per Unit 16px 2.繪制瓷磚式地圖 新建瓦片圖層:左上角/右鍵 2D object

    2024年01月24日
    瀏覽(32)
  • Unity2D 商業(yè)游戲案例 - 夢(mèng)幻西游(第二季 框架設(shè)計(jì)篇)

    Unity2D 商業(yè)游戲案例 - 夢(mèng)幻西游(第二季 框架設(shè)計(jì)篇)

    01 Unity2D 回合制游戲案例 - 夢(mèng)幻西游(第一季 戰(zhàn)斗邏輯篇) 01 Unity2D 回合制游戲案例 - 夢(mèng)幻西游(第一季 戰(zhàn)斗邏輯篇)【B站的第一季的部分視頻】 02 Unity2D 商業(yè)游戲案例 - 夢(mèng)幻西游(第二季 框架設(shè)計(jì)篇) 03 Unity2D 商業(yè)游戲案例《夢(mèng)幻西游》(番外篇 - 場(chǎng)景系統(tǒng)) 。。。。。

    2024年02月05日
    瀏覽(78)
  • 【用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)
  • 【用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)目將通過(guò)Unity引擎進(jìn)

    2024年02月04日
    瀏覽(25)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包