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

Unity游戲開發(fā):場景切換的實現(xiàn)

這篇具有很好參考價值的文章主要介紹了Unity游戲開發(fā):場景切換的實現(xiàn)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

在unity中可以將不同場景的背景和道具放置在不同的Scene當中,通過對Scene的加載和卸載來實現(xiàn)場景之間的切換。同時創(chuàng)建一個基礎(chǔ)場景(Control Scene)來對整個游戲系統(tǒng)進行管理,在基礎(chǔ)場景(Control Scene)中不放置背景圖片或者游戲道具而只添加各種控制單元和Canvas。

一、實現(xiàn)邏輯

unity多個場景切換,Unity游戲開發(fā),unity,游戲,游戲引擎,c#,游戲程序
在場景切換的實現(xiàn)過程中需要定義兩個腳本,一個放在基礎(chǔ)場景中作為控制管理單元,另一個添加到每一個場景中作為執(zhí)行單元。
在每個場景中為場景切換的觸發(fā)點單獨添加一個空物體,為了能夠檢測到鼠標的點擊為其添加一個Collider并設(shè)置為Trigger。此外在Teleport腳本中也定義了當前所在的場景和需要切換到的場景。每當鼠標點擊場景切換的觸發(fā)點時,Teleport向Transition Manager發(fā)出請求并調(diào)用Transition函數(shù)來實現(xiàn)場景切換。

    public void TeleportToScene()
    {
        TransitionManager.Instance.Transition(fromSceneName, toSceneName);
    }

unity多個場景切換,Unity游戲開發(fā),unity,游戲,游戲引擎,c#,游戲程序

二、代碼實現(xiàn)

2.1 Transition Manager

狀態(tài)參數(shù)的定義

    [SceneName] public string startScene;

    public bool isFading;//是否在進行場景切換
    public CanvasGroup canvasGroup;//用來在切換場景時禁用鼠標點擊功能
    public float fadeDuration;//漸變持續(xù)時間

    public bool canTransition;//是否可以切換場景

場景切換的實現(xiàn)

    /// <summary>
    /// 場景切換API
    /// </summary>
    /// <param name="from"></param>
    /// <param name="to"></param>
    public void Transition(string from,string to)
    {
        if (!isFading&&canTransition)//不在場景切換漸變并且可以切換
            StartCoroutine(TransitionToScene(from, to));
    }

    /// <summary>
    /// 場景切換
    /// </summary>
    /// <param name="from"></param>
    /// <param name="to"></param>
    /// <returns></returns>
    private IEnumerator TransitionToScene(string from,string to)
    {
        yield return Fade(1);
        if (from != string.Empty)//當前場景不為空才能卸載
        {
            EventHandler.CallBeforeSceneUnloadEvent();

            yield return SceneManager.UnloadSceneAsync(from);//卸載當前場景
        }
        yield return SceneManager.LoadSceneAsync(to, LoadSceneMode.Additive);//疊加方式加載轉(zhuǎn)換場景

        Scene newScene = SceneManager.GetSceneAt(SceneManager.sceneCount - 1);//獲取新加載場景
        SceneManager.SetActiveScene(newScene);//激活新加載場景

        EventHandler.CallAfterSceneLoadedEvent();
        yield return Fade(0);
    }

漸入漸出效果的實現(xiàn)

    /// <summary>
    /// 實現(xiàn)場景切換的漸入漸出效果
    /// </summary>
    /// <param name="targetAlpha"></param>
    /// <returns></returns>
    private IEnumerator Fade(float targetAlpha)
    {
        isFading = true;

        canvasGroup.blocksRaycasts = true;//禁用鼠標

        float speed = Mathf.Abs(targetAlpha - canvasGroup.alpha) / fadeDuration;//漸變速度

        while(!Mathf.Approximately(canvasGroup.alpha, targetAlpha))
        {
            canvasGroup.alpha = Mathf.MoveTowards(canvasGroup.alpha, targetAlpha, speed * Time.deltaTime);
            yield return null;
        }

        canvasGroup.blocksRaycasts = false;
        isFading = false;
    }

2.2 Teleport

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

/// <summary>
/// 該腳本掛在每個子場景中,在場景切換時調(diào)用TransitionManager的Transition方法
/// </summary>
public class Teleport : MonoBehaviour
{
    [Header("切換的場景")]
    [SceneName] public string fromSceneName;
    [SceneName] public string toSceneName;

    public void TeleportToScene()
    {
        TransitionManager.Instance.Transition(fromSceneName, toSceneName);
    }

}

2.3 Cursor Manager

將場景切換觸發(fā)點Tag設(shè)置為"Teleport",并通過實時檢測來確實是否進行場景切換。
unity多個場景切換,Unity游戲開發(fā),unity,游戲,游戲引擎,c#,游戲程序

    /// <summary>
    /// 點擊物品的活動反饋
    /// </summary>
    /// <param name="clickObject">點擊的物品</param>
    public void ClickAction(GameObject clickObject)
    {
        switch(clickObject.tag)
        {
            case "Teleport":
                var teleport=clickObject.GetComponent<Teleport>();
                teleport?.TeleportToScene();
                break;
        }
    }

通過OverlapPoint判斷物體是否和鼠標碰撞

    /// <summary>
    /// 物品是否在鼠標位置
    /// </summary>
    /// <returns></returns>
    private Collider2D ObjectAtMousePos()
    {
        return Physics2D.OverlapPoint(mouseWorldPos);
    }    

最后在Update里面實時更新檢測文章來源地址http://www.zghlxwxcb.cn/news/detail-558154.html

    private void Update()
    {
        canClick = ObjectAtMousePos();//物品是否能夠點擊

        if(canClick&&Input.GetMouseButtonDown(0))
        {
            //檢測鼠標和物體的交互情況
            ClickAction(ObjectAtMousePos().gameObject);
        }
    }

到了這里,關(guān)于Unity游戲開發(fā):場景切換的實現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 使用團結(jié)引擎開發(fā)Unity 3D射擊游戲

    使用團結(jié)引擎開發(fā)Unity 3D射擊游戲

    ? ? ? ?本案例是初級案例,意在引導(dǎo)想使用unity的初級開發(fā)者能較快的入門,體驗unity開發(fā)的方便性和簡易性能。 ? ? ? 本次我們將使用團結(jié)引擎進行開發(fā),幫助想體驗團結(jié)引擎的入門開發(fā)者進行較快的環(huán)境熟悉。 ? ? ?本游戲是一個俯視角度的射擊游戲。主角始終位于屏幕

    2024年01月19日
    瀏覽(110)
  • Unity、UE、Cocos游戲開發(fā)引擎的區(qū)別

    Unity、Unreal Engine(UE)和Cocos引擎是三個常用的游戲開發(fā)引擎,它們在功能和特性上有一些區(qū)別。以下是它們之間的主要區(qū)別: 編程語言:Unity使用C#作為主要的編程語言,開發(fā)者可以使用C#腳本進行游戲邏輯編寫。Unreal Engine主要使用C++作為編程語言,但也支持藍圖系統(tǒng),允許

    2024年02月22日
    瀏覽(99)
  • Unity使用進度條加載實現(xiàn)場景切換(簡單方法)

    Unity使用進度條加載實現(xiàn)場景切換(簡單方法)

    ?我們實現(xiàn)場景切換時一般使用方法: ?這種方法可以實現(xiàn)場景頁面的直接切換,但在切換場景前想加這種進度條的方式該如何實現(xiàn)呢? 接下來小編為大家講解一種非常簡單的方法供參考。 1.找一張實現(xiàn)頁面切換的背景圖片(任何圖片都可),記得將其改為“精靈模式”。

    2024年02月13日
    瀏覽(25)
  • unity場景轉(zhuǎn)換(實現(xiàn)開始游戲和返回游戲)

    unity場景轉(zhuǎn)換(實現(xiàn)開始游戲和返回游戲)

    1、新建兩個場景,一個命名為start,另一個命名為game,如下圖 2、打開start,創(chuàng)建一個平面和一個按鈕(右鍵,UI,Button),平面繞X軸旋轉(zhuǎn)-90度,按鈕的text設(shè)置為開始游戲,把按鈕拖到場景中合適的位置,如下圖 3、編寫代碼start,把它賦給Canvas,注意是賦給Canvas,不是給按鈕,代

    2024年02月11日
    瀏覽(22)
  • 項目實訓(xùn)--Unity多人游戲開發(fā)(十一、PUN框架--游戲場景篇(加載與同步))

    項目實訓(xùn)--Unity多人游戲開發(fā)(十一、PUN框架--游戲場景篇(加載與同步))

    本地加載 有許多方法,舉幾個例子: 本地加載 本地異步加載(場景內(nèi)容過多時,防止卡頓異步加載) 多人游戲加載場景 pun2插件加載 這個異步加載起初是覺得場景內(nèi)容如果過多會引起卡頓。所以把這個應(yīng)用在了單機模式上。 至于多人游戲加載場景,可能用不到而且也沒法

    2024年02月01日
    瀏覽(107)
  • unity多個物體多種材質(zhì)切換效果實現(xiàn)方法(方法比較笨,還有不足之處多多指導(dǎo))

    unity多個物體多種材質(zhì)切換效果實現(xiàn)方法(方法比較笨,還有不足之處多多指導(dǎo))

    多種材質(zhì)切換:獲取物體的MeshRenderer組件上所有的材質(zhì)球,并將其存放到數(shù)組中;創(chuàng)建另一個數(shù)組存放需要新材質(zhì)球,通過循環(huán)遍歷將將需要替換的材質(zhì)球存放在創(chuàng)建好的數(shù)組內(nèi)。 比如說同時給象棋的棋盤和棋子切換不同材質(zhì),具體步驟如下: 1.分別導(dǎo)入棋盤、棋子模型;黑

    2024年02月17日
    瀏覽(17)
  • Unity 開發(fā)人員轉(zhuǎn)CGE(castle Game engine)城堡游戲引擎指導(dǎo)手冊

    Unity 開發(fā)人員轉(zhuǎn)CGE(castle Game engine)城堡游戲引擎指導(dǎo)手冊

    一、簡介 2. Unity相當于什么GameObject? 3. 如何設(shè)計一個由多種資產(chǎn)、生物等組成的關(guān)卡? 4. 在哪里放置特定角色的代碼(例如生物、物品)?Unity 中“向 GameObject 添加 MonoBehaviour”相當于什么? 5.Unity子目錄相當于什么Assets? 6. 支持哪些模型格式? 7. 支持FBX模型格式嗎? 8.

    2024年02月07日
    瀏覽(26)
  • Unity切換場景保存上一個場景的數(shù)據(jù),Unity切換場景的案例,Unity切換場景再返回數(shù)據(jù)丟失的解決方案

    Unity在切換場景之后在再次返回上不會保存上一個場景的數(shù)據(jù)的。 但是大多數(shù)時候我們是需要這些數(shù)據(jù)的,這應(yīng)該如何解決呢? 文件鏈接:我將解決方案打包了,點我下載,免費,或者私信我發(fā)你 首先將需要存儲到一個class中,這里以學(xué)生為例子 然后我們再創(chuàng)建一個腳本,

    2024年02月02日
    瀏覽(21)
  • 游戲開發(fā)常用引擎工具介紹對比區(qū)別(UE4,Unity,Cocos,LayaAir,[egret-白鷺])

    游戲開發(fā)常用引擎工具介紹對比區(qū)別(UE4,Unity,Cocos,LayaAir,[egret-白鷺])

    是一套為開發(fā)實時技術(shù)而存在的引擎工具。目前廣泛應(yīng)用于3D建模渲染、游戲開發(fā)中。它完善的工具套件以及簡易的工作流程能夠使開發(fā)者快速修改或查看成果,對于代碼的依賴性很低。而完整公開的源代碼則能讓使用者自由修改和擴展引擎功能。 是面向開發(fā)人員的 3D/2D 游戲

    2024年02月13日
    瀏覽(92)
  • 吐槽laya:H5小游戲開發(fā)應(yīng)該用什么引擎好?laya、cocos還是unity?

    我看有人推薦laya,放在H5小游戲的前三排名,這壓根不靠譜。 laya只能算個半成品,整體非常垃圾,如果是首次選擇游戲引擎,至少轉(zhuǎn)去cocos,實在選laya,那也沒辦法了。 下面說說laya有什么問題,如果只是一些簡單的bug什么的,我是不會花這個時間吐槽的,但是如下的問題實

    2024年02月13日
    瀏覽(31)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包