阅前提示
适合人群:ALL
阅读方式:浏览
文章主旨在于归纳整理Unity2018新功能,便于宏观了解和定点深入。
Unity2018
Scriptable Render Pipeline
可编程渲染管道
整理如下,待学习:
Unity Surface Shaders and rendering paths
Scriptable Render Pipeline Overview
Shader Graph
安装:
Package Manager => Shader Graph & Render-Pipelines. Lightweight
Create => Rendering => LightweightRenderPipelineAsset
Edit => Project Settings => Graphics => Pipeline Settings
Edit => Render Pipeline => Upgrade
Create => Shader => xxx Graph
Entity Component System
实体+组件+系统
实体:游戏组成的基本单元 , 用来挂载组件 |
---|
组件:单纯的数据,仅仅代表该组件的特性 |
系统:用来处理拥有组件的实体集合,单纯的行为。 |
改变开发模式,面向数据设计,解决 GameObject/MonoBehaviour 处理容量大的瓶颈
适合与Job System 实现 SIMD
/*两种组件方式*/
///混合
public class SimpleHybirdComponent : MonoBehaviour{public int a;}
///纯ECS
public struct SimpleValue : IComponentData{public int a;}
public class SimpleComponent:ComponentDataProxy<SimpleValue>{} // 解决挂载问题
/// 两者都是挂于实体之上,需要有 GameObjectEntity 存在
/*System*/
public class SimpleSystem : ComponentSystem
{
struct Group
{
public SimpleHybirdComponent simpleComponent;
public Transform transform;
}
struct InjectGroup
{
public readonly int Length;
public ComponentArray<SimpleHybirdComponent> components;
}
[Inject] InjectGroup injectG; //注入属性,启动时会被赋值
protected override void OnUpdate()
{
//GetEntities<T> 将会遍历所有实体获取符合组件组的实体
Debug.Log(injectG.Length);
Debug.Log(injectG.components.Length);
foreach (var item in GetEntities<Group>())
{
item.transform.Rotate(Vector3.up * item.simpleComponent.a * Time.deltaTime);
}
}
}
/*System*/
public class JobSimpleSystem : JobComponentSystem
{
/// <summary>
/// 使用IJobProcessComponentData遍历符合条件的所有Entity。
/// 此过程是单进程的并行计算(SIMD)
/// IJobProcessComponentData 是遍历entity的简便方法,并且也比IJobParallelFor更高效
/// </summary>
struct D : IJobProcessComponentData<SimpleValue>
{
/// <summary>
/// 实现接口,在Excute中实现旋转
/// </summary>
public void Execute(ref SimpleValue v)
{
Debug.Log("JobComponentSystem:"+v.a);
}
}
protected override JobHandle OnUpdate(JobHandle inputDeps)
{
var job = new D();
return job.Schedule(this);
}
}
C# Jobs System
帮助编写更简单更安全的多线程代码与Unity交互。
Jobs System 通过创建Job来进行多线程工作,替代线程。
Burst
Burst是一个编译器,它使用LLVM将IL / .NET字节码转换为高度优化的本机代码
Burst主要用于与Job系统高效协作。
您可以通过使用属性[BurstCompile]装饰Job结构,从而在代码中简单地使用burst编译器 。
Improved Prefab Workflows
功能:
Prefab Mode中编辑预制体 |
---|
Nested Prefabs (嵌套式预制体) |
Prefab Overrides (预制件覆盖/重载) |
Prefab Variants (预制件变体) |
使用脚本API操作Prefab |