日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Unity游戏开发

發布時間:2023/12/14 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Unity游戏开发 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

腳本編譯

在編輯器下,每次修改完代碼就會自動編譯,最終所有代碼將編譯成DLL文件。DLL最終編譯在Project/Library/ScriptAssemblies目錄下。
腳本分為運行時腳本和編譯時腳本,運行時腳本會被編譯到游戲包中,編輯時腳本僅用于編輯器模式下。腳本的存放的目錄決定了他講編譯在哪個DLL文件中Plugins目錄下的腳本最先被編譯,編譯成Assembly-CSharp-firstpass.dll,Plugins下的Editor編譯在Assembly-CSharp-Editor-firstpass.dll下,其他運行時腳本編譯在Assembly-CSharp.dll下,Editor的編譯在Assembly-CSharp-Editor.dll下,先編譯的腳本無法訪問后編譯的腳本

基本改動不大的代碼塊放到Plugin下,改動大的放在其他位置,這樣改動其他塊的代碼就不會編譯Plugin的代碼

關閉日志輸出

Debug.unityLogger.logEnable = false

監聽日志

Application.logMessageReceived

Font.textureRebuilt字體重建
text.FontTextureChange 刷新Text文本

更換烘焙貼圖(例如更換夜晚白天)

先創建LightmapData對象,最終將需要更換烘焙貼圖放入LightmapSetting.lightmaps中即可
LightmapData data = new LightmapData();
data.lightmapColor = lightmap;
LightmapSetting.lightmaps = new LightmapData[1]{data};

合批

在PlayerSetting中勾選Static Batching和Dynamic Batching
自動靜態合批次:在需要合批的物體上Static勾上Static Batching

運行游戲后,MeshFilter會自動生成一個新的Mesh,如果有相同材質,Shader并且參數一樣,就會合并DrawCall
缺點:
(1) 運行游戲,如果只有一小部分出現在攝像機里,那個整個Mesh都需要參與渲染
(2) 靜態合批最大頂點數是65535,如果頂點數超過了它,Unity就會自動合并出多個Mesh

腳本靜態合批:利用代碼來動態設置需要合批在一起的游戲對象。如果使用代碼合批,不需要勾選Static Batching,只需要調用StaticBatchingUtility.Combine()方法即可,
第一個參數,數組:所需要合批的對象
第二參數,gameobject:合并后放在那個節點下面
該方法必須在Awake周期調用
合并后的Mesh無法單獨位移,只能移動指定的Root節點

動態合批:動態合批是全自動的,我們不需要做任何事情,但它是有要求的,Mesh頂點需要小于300,如果Shader使用了頂點位置、法線、UV0、UV1和切線,Mesh的頂點數必須小于180,一般用于粒子特效中

錄音

Microphone類

編輯器下保留引用實例化預制體

PrefabUtility.InstantiatePrefab();

獲取文件MD5

MD5 md5 = new MD5CryptoServiceProvider():
BitConverter.ToString(md5.ComputeHash(File.ReadAllBytes(“路徑”))).Replace("-","").ToLower()

監聽導入事件

繼承AssetPostprocessor類

代碼調用實現未保存狀態*

通過代碼修改物體上序列化的物體,不會出現未保存的狀態*,通過調用EditorSceneManager.MarkSceneDirty()強制設置場景為未保存狀態,
EditorUtility.SetDirt()設置某個資源變成dirty狀態

打包事件監聽

用來實現打包時版本號(PlayerSettings.bundleVersion)自動增加之類的

繼承接口IPreprocessBuild,IPostProcessBuild

多相機共存,

可以實現
人物的裝備永遠都在相機視線內,就算是故意把槍伸進模型里面也不會發生穿模現象
通過Depth來決定誰在前誰在后
主相機可以指定某個層級剔除
另外新建一個相機只選擇這個層級的物體渲染,并將Clear Flags設置為DepthOnly
如果要讓UI顯示在模型后面,將Canvas的RenderModel設為Screen Space—Camera

多場景編輯

可以實現將多個小場景拼接成一個大場景
編輯器下只需將場景文件拖動Hierarchy視圖中即可,
加載場景,調用SceneManager.LoadSceneAsync(“場景名字”,LoadSceneMode.Additive);
卸載場景:SceneManager.UnloadSceneAsync(名字);
將對象移動到指定場景中:SceneManager.MoveGameObjectToScene();
在多場景中,需要指定一個為激活場景。如果添加游戲物體時不指定場景,都將默認放在激活場景中。
場景激活:SceneManager.SetActiveScene(SceneManager.GetSceneByName(“場景名字”));
場景激活回調:SceneManager.activeSceneChanged
場景加載回調:SceneManager.sceneLoaded
場景卸載回調:SceneManager.sceneUnloaded
多場景烘焙:Lightmapping.BakeMultipleScene()

總結

以上是生活随笔為你收集整理的Unity游戏开发的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。