IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Unity游戏开发 -> 正文阅读

[游戏开发]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()

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-10-04 13:08:06  更:2021-10-04 13:09:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/28 2:44:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码