🔖快速食用
在场景中创建一个空物体,并挂载如下几个脚本。
网络管理器
其中,需要指定Player Prefab,勾选自动生成玩家可以在连接到服务器时,自动生成玩家对象。
玩家
为玩家添加如下组件:
Network Identity 表示这是一个需要进行网络同步的物体。
NetWork Transform 表示可同步Transfrom
PS:注意勾选认证,让玩家只能控制自己的物体
玩家控制脚本12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970using System;using System.Collections;using System.Collections.Generic;using Mirror;using UniRx;using UnityEngine;Qpublic class PlayerCtr : NetworkBehaviour { ...
好物推荐
未读IOC 控制反转
IOC 提供一个对象生成容器,在我们需要取得某个对象时,不再使用New关键字进行对象生成操作,而是通过IOC容器内部控制来获得对象。
使用这种思想方式,可以让我们无需关心对象的生成方式,只需要告诉容器我需要xxx对象即可,而高旭容器我需要xxx对象的方式就叫做DI依赖注入。
DI依赖注入
这种思想,我是在学习.net core时发现的,一般采用特性注入或者使用构造函数注入。
经过标记的字段会在该类构造时在IOC容器中执行构造获取对应的对象示例。
VContainer
VContainer是在Unity端使用的一种轻量级的DI框架,通过GameLifeScope划分作用域,和普通的web后端的Di框架不同的是,针对Unity的Mono特殊性,提出了GameLifeScope的方式,通过在Game Object上挂载Scope,可以在代码中动态切换使用的实例和Scope。并且提供了一种父子继承Scope方式供用户使用。
Scope 作用域
作用域指函数、变量的作用范围,在Di中一般可以注册singleton单例,Trans复例等
在netcore中有类似下面这样的 ...
UniRx 初体验
链式编程
所谓链式编程——使用. . . 像是链条一样进行编程。
🔖 下面是一个延迟调用的示例:
1234567891011121314151617public class UniRxTest : MonoBehaviour{ private void Start() { Debug.Log("开始时间:"+Time.realtimeSinceStartup); Observable.Timer(TimeSpan.FromSeconds(2)).Subscribe((x) => { Debug.Log("现在时间:" + Time.realtimeSinceStartup); }).AddTo(this); Observable.EveryUpdate().Where(_ => Input.GetKeyDown(KeyCode.A)).Subscribe(_ => { ...
PolygonCollider2D
PolygonCollider2D是Unity用于多边形检测的组件,可以进行不规则UI、2d对象的射线检测。
为UI对象添加如下脚本:
1234567891011121314151617181920212223public class CustomImage : Image{ private PolygonCollider2D _polygon; private PolygonCollider2D Polygon { get { if (_polygon == null) _polygon = GetComponent<PolygonCollider2D>(); return _polygon; } } public override bool IsRaycastLocationValid(Vector2 screenPoint, ...
Unity Ui
未读Unity Ui 合批学习
Stats 统计面板
stats面板可以展示摄像机范围内,所有游戏对象元素的顶点、面片、批处理次数、CPU耗时等。
参数
说明
备注
tris
三角形面数
verts
顶点数
Batches
批处理个数
Saved By batching
批处理被合并后的批处理个数
实际执行的批处理个数Draw Call
CPU
cpu执行耗时
FPS
时间段执行次数
流畅度
天空盒子
新建一个场景发现,有1.7k的三角和5k的顶点。
++ 这些顶点和三角面其实来源于天空盒,天空盒也是一个模型。 ++
修改为适用纯色背景:
可以看到此时,降低到了2个三角面和4个顶点。如下图所示的分割情况.
批处理
我们最常看到的优化技术大概就是批处理了。批处理的实现原理就是为了减少每一帧需要的draw call数目。为了把一个对象渲染到屏幕上,CPU需要检查哪些光源影响了该物体,绑定Shader 被设置它的参数,再把渲染纹理发送给GPU。当场景中包含了大量对象时,这些操作就会非常耗时。一个极端的例子是,如果我们需要渲染一千个 ...
高级纹理
基础纹理:法线纹理、渐变纹理、遮罩纹理等。
高级纹理:CubeMap、Render Texture、Procedure Texture
CubeMap立方体纹理
在图形学中,立方体纹理是环境映射的一种实现方法。
立方体纹理采样
立方体纹理常常用于天空盒、环境映射。
好物推荐
未读
TureShadow 和名称一样——真阴影
其作用就是为图像、文字添加阴影效果,通常我们使用Ps之类的软件为其添加阴影,现在使用这个插件就可以自动动态的实现阴影。
添加TureShadow脚本
MRTK 开发记录
MRTK是微软官方推出的针对MR(混合现实)开发的一套工具集。
同时官方提供了一个MRFT工具进行相关工具包的管理。
MRTK的体系架构:
MRFT
在选定一个Unity项目之后可以使用此工具导入相关的工具。
使用此工具其实是通过修改Unity的包管理器中的Json来管理
我们至少需要安装:
在Unity2021.x之后版本我们官方推荐使用OpenXR工具来管理。
😄当然我们可以选择性的使用。
Unity设置
Unity版本:2020.3.8f1
导入Unity项目中后,可以看到如下提示。
同时我们需要做如下设置:
切换平台到通用平台:
依据导入的选择设置XR相关设置:
我这里没有使用OPen XR 所以没有勾选支持。
可以导入相关的example来查看示例:
使用上下左右移动视角。鼠标右键按住旋转视角。
鼠标左键点击。
可以在这里打开相关的打包工具:
可以看到如下所示的打包工具:
默认是打包生成VS项目:
生成的项目是一个使用c++的Windows UWP项目。
在设置项目中可以设置要获取的权限。
PS: 😿打 ...
MMD
未读通过Blender
下载:https://github.com/absolute-quantum/cats-blender-plugin
安装插件后:
然后选择,Fix Model 修正。
修正后选择Export Modle导出为Fbx即可。
通过Unity插件
安装MMD4unity插件可以直接导入到Unity,不经过Blender,实测在某些模型下会发生一些奇怪的错误。
改变渲染材质
可以使用卡渲来优化渲染效果











