随笔分类 - Unity3D
摘要:当我们想要在多个Component之间共享数据时,会想到哪些方案呢? (1)SritptableObject (2)NativeArray (3)ISharedDataComponent (4)BlobAsset (5)unsafe void* (6)... 不错,这些都是常用手段,但是区别甚大,并
阅读全文
摘要:各个工作线程的随机数种子是稳定的,RandomSystem的实现如下: using Unity.Entities; using Unity.Jobs; using Unity.Burst; using Unity.Collections; using Unity.Jobs.LowLevel.Unsa
阅读全文
摘要:将一个方块的AnimationClip数据导出,然后以BlobAsset的方式在JobSystem中并行计算,以提升效率: (1)编辑态,将AnimationClip转为SriptableObject数据,进行存储; (2)运行时,将ScriptableObject数据转换为BlobAsset对象,
阅读全文
摘要:按照一般的写法,write会产生race condition,所以需要通过依赖关系按顺序执行: using UnityEngine; using Unity.Jobs; using Unity.Collections; using Unity.Collections.LowLevel.Unsafe;
阅读全文
摘要:定义: 使用WriteGroup标记了同一个component的components就属于一个WriteGroup: public struct W : IComponentData { public int Value; } [WriteGroup(typeof(W))] public struc
阅读全文
摘要:结构性修改Structural changes: 任何导致entity的原型(archetype)变化,或者entity在chunk中的存储位置变化的修改,都叫做结构性修改。 以下操作皆为结构性修改: 创建或销毁entity 添加或移除component 修改shared component的值 同
阅读全文
摘要:ECS systems的主要任务就是读取一系列的components数据,计算以后将结果写入其他的components。那么如何高效地读写数据就是很重要的,而有效的方法就是利用cpu的多核特性来并行地读取和处理数据。 ECS提供了多种完成这个任务的方式,每一种都有自己的规则和约束: API 说明 J
阅读全文
摘要:Systems 提供logic,驱动数据的变更。 Unity ECS会自动在运行时收集所有的systems并进行实例化。 Systems在World中以group的方式来组织,你可以控制将一个system放到哪个group以及这个system在group中的执行顺序(通过system attribu
阅读全文
摘要:Components ECS的Component基于以下这些interface来实现: 类型 说明 IComponentData 常用组件,或者chunk components IBufferElementData 用于将dynamic buffer和entity关联 DynamicBuffer<T
阅读全文
摘要:Entities是一个ID Entities就是游戏中的“对象”或者“单位”,在ECS里面它表示一组数据的组合。 Systems为它提供行为。 Components为之提供数据存储。 一个Entity就是一个ID,Entity的ID是稳定的,你可以用它来存储对一个component或entity的引
阅读全文
摘要:ECS概念 核心思想:Data-Oriented Tech Stack,不同于传统的Object-Oriented方式。 E:entities C:components——data S:systems——behaviour 上图中System读取Translation和Roation,让后将运算结果
阅读全文
摘要:概述 设计目的:简单安全地使用多线程,随便就能写出高性能代码 收益:FPS更高,电池消耗更低(Burst编译器) 并行性:C# Job System和Unity Native Job System共享工作线程worker threads,也就是它们不会创建超过CPU cores数量的线程,也就不会导
阅读全文
摘要:直接加载非Readable的Texture,是不能访问其像素数据的: // 加载 var tex = AssetDatabase.LoadAssetAtPath<Texture2D>(assetPath); var data = tex.GetPixels(); 上面的代码汇报如下错误: the t
阅读全文
摘要:ComputeShader: GPGPU:General Purpose GPU Programming,GPU通用计算,利用GPU的并行特性。大量并行无序数据的少分支逻辑适合GPGPU。平台或接口:DirectCompute,OpenCL,CUDA等。 定义:GPGPU编程,运行在GPU上脱离于常
阅读全文
摘要:Unity编辑器功能丰富易上手,其实编辑器提供的大多数菜单操作,在代码里面都是能够找到对应接口的,但是这些接口都没有对我们开放,怎么办? 很简单,直接使用反射调用即可。 首先使用Reflector或ILSpy将UnityEditor和UnityEngine进行反编译(有源码的可以直接查看源码更好),
阅读全文
摘要:测试一:使用member function创建action会产生gc,不管该函数是否访问外部变量: private System.Action memberAct = null; // gc 112B private void ActionWithMethod() { memberAct = new
阅读全文
摘要:一个空场景,添加如下代码: 可以看到每帧有一个固定的内存gc,可以用useGUILayout开关来关闭其gc消耗:
阅读全文
摘要:一个AssetBundle同时只能加载一次,所以实际使用中一般会伴随着AssetBundle包的管理。 下面是一个简单的AssetBundle管理器,提供了同步和异步加载函数: 当然bundle也可以通过WWW或其他的方式来加载,这一块Unity5到没有什么变化,具体使用方式可以参考我以前的博客。
阅读全文
摘要:下面代码列出了对于assetbundle资源的常用操作,其中有针对bundle、asset、gameobject三种类型对象的操作,实际使用中尽量保证成对使用。 这一块的操作比较繁琐,但只要使用正确,是可以保证资源完全没有泄露的。 由于bundle相互之前会有依赖,所以在使用一个bundle包之前,
阅读全文