unity 切換場景不銷毀物體問題的解決
在用unity進行游戲開發(fā)時我們有時需要一些物體在場景切換時不需要被銷毀這時我們可以用官方給的DontDestroyOnLoad()方法,
這個方法可以讓我們在場景切換時不銷毀場景。但如果你又返回這個場景(創(chuàng)建不可銷毀物體的場景)時就會發(fā)現(xiàn)會有兩個這個物體(標記為不可銷毀的物體)。
這個問題有一個較為簡單的解決方法就是:
在物體的Awake()或Star()方法中加入這段代碼。如果找到和自己一樣的名字卻不是自己的物體就將自己銷毀,這樣就解決了這個問題。(別的地方不知道,我的項目是可以用);
if (GameObject.Find("Players").gameObject != this.gameObject) Destroy(this.gameObject);
補充:Unity加載場景、計時器、加載時不銷毀某物體
異步加載場景,SceneManager.LoadSceneAsync(SceneName);需引用 using UnityEngine.SceneManagement;命名空間,
Application.LoadLevel這個方法不再適用;
可以用協(xié)同程序做一個簡單的計時器,詳見代碼;
DontDestroyOnLoad (this.gameObject);方法可以在加載場景時不銷毀指定物體;
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; public class Base : MonoBehaviour { public virtual void ScenesLoad(string SceneName,int AfterSomeMinutesToLoad) { StartCoroutine (Calculagraph(SceneName,AfterSomeMinutesToLoad)); } IEnumerator Calculagraph(string SceneName,int AfterSomeMinutesToLoad) { yield return new WaitForSeconds (AfterSomeMinutesToLoad*60); DontDestroyOnLoad (this.gameObject); SceneManager.LoadSceneAsync(SceneName); } }
補充:Unity小技巧——延時銷毀GameObject
當我們希望延遲一段時間銷毀GameObject,Component,或者 asset 的時候可以利用下面的函數(shù)來實現(xiàn)。
不用自己再去實現(xiàn)延遲計時操作。
Destroy(Object obj, float t = 0.0F);
第二個參數(shù)單位為秒,物體將在t秒后被銷毀。
using UnityEngine; public class ScriptExample : MonoBehaviour { void DestroyGameObject() { Destroy(gameObject); } void DestroyScriptInstance() { // 立刻從gameobject上移除該腳本 Destroy(this); } void DestroyComponent() { // 從gameobject上移除rigidbody腳本 Destroy(GetComponent<Rigidbody>()); } void DestroyObjectDelayed() { // 5秒后銷毀當前gameobject Destroy(gameObject, 5); } // 當用戶按下Ctr鍵后,將會從gameobject上移除boxcollider腳本 void Update() { if (Input.GetButton("Fire1") && GetComponent<BoxCollider>()) { Destroy(GetComponent<BoxCollider>()); } } }
在做編輯器擴展開發(fā)的時候,非運行時環(huán)境,只能使用 Object.DestroyImmediate()
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
C#實現(xiàn)將Word轉(zhuǎn)化分享為電子期刊
曾經(jīng)由一個項目,要求實現(xiàn)制作電子期刊定期發(fā)送給企業(yè)進行閱讀,由編輯人員使用 Microsoft Word先生成PDF文件,然后將生成的PDF文件轉(zhuǎn)化為JPEG文件,最后將JPEG文件生成電子書模式,本文給大家介紹了C#實現(xiàn)將Word轉(zhuǎn)化分享為電子期刊,需要的朋友可以參考下2023-12-12C# Stream 和 byte[] 之間的轉(zhuǎn)換
Stream 和 byte[] 之間的轉(zhuǎn)換2008-03-03WinForm實現(xiàn)程序一段時間不運行自動關(guān)閉的方法
這篇文章主要介紹了WinForm實現(xiàn)程序一段時間不運行自動關(guān)閉的方法,涉及WinForm計時器及進程操作的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-09-09