当前位置: 首页 > news >正文

免费建网站可以找哪家英文网站seo网络排名优化方法

免费建网站可以找哪家英文网站,seo网络排名优化方法,企业综合管理系统,应届生招聘去哪个网站前言 之前使用过ECS面向组件开发,一直想试一下Unity的ECS DOTS技术,但是苦于入门门槛太高,下载官方的Demo,发现代码哪哪儿都看不懂,一大堆API闻所未闻,而且没有一个入门的流程,导致无法进行下去…

前言

        之前使用过ECS面向组件开发,一直想试一下Unity的ECS DOTS技术,但是苦于入门门槛太高,下载官方的Demo,发现代码哪哪儿都看不懂,一大堆API闻所未闻,而且没有一个入门的流程,导致无法进行下去。也尝试过几次让AI引导,创建一个小的Demo,但是由于Entities和Graphics各个版本API差距很大,单纯使用AI,也难以实现。今天突然奇想,结合官方Demo和AI,再次尝试了,成功的实现了一个小Demo。

        本文不做原理讲解,因为还没琢磨透每行代码,只是做一个流程示范,可以让每个入门的读者按照流程体验一下万人同屏的情况下,FPS稳定在60+的“爽感”,Demo实现之后,再仔细阅读代码,慢慢拓展功能。

        本文以下内容,均是个人理解+AI解释,并不能保证完全正确,如有问题,欢迎指出

版本

        Unity版本6000.0.40(可改,但是一定要是6000,官方Demo用的例子是6000.0.23),Entities版本1.3.5(不要改,避免API失效,如果Unity版本太低导致不支持,建议升级Unity版本),Entities Graphics版本1.4.2(不要改,原因同上)。URP版本17.0.4(这个理论上无所谓)。

步骤

1.创建工程

        选择URP项目(必须,只支持URP,如果会在项目中切换渲染管线则随意)

2.PackageManager导入插件

        分别导入以上插件Entities1.3.5,Entities Graphics1.4.2,PackageManager里面版本太高的话,在Version History里面切换

3.新建cube生成器

using Unity.Entities;
using UnityEngine;public class RandomMoveAuthoring : MonoBehaviour
{public GameObject prefab;public int count = 50000;public float radius = 100f;class Baker : Baker<RandomMoveAuthoring>{public override void Bake(RandomMoveAuthoring authoring){var entity = GetEntity(TransformUsageFlags.None);AddComponent(entity, new RandomMoveSpawner{Prefab = GetEntity(authoring.prefab, TransformUsageFlags.Renderable),Count = authoring.count,Radius = authoring.radius});}}
}public struct RandomMoveSpawner : IComponentData
{public Entity Prefab;public int Count;public float Radius;
}

        这个脚本的作用主要是把Mono的GameObject(prefab)对象,烘焙成ECS系统里面的Entity实例,把Mono脚本上面的值(count,radius)烘焙到ECS里的IComponentData上。这个Bake函数是在编辑器模式下执行的,不是在运行时执行的。

4.新建cube移动组件数据

using Unity.Entities;
using Unity.Mathematics;public struct RandomMoveComponent : IComponentData
{public float3 StartPosition;public float3 Direction;public float Speed;public float Radius;
}

        记录cube的各个属性,起始位置,方向,速度,移动半径

5.新建cube生成系统

using Unity.Burst;
using Unity.Collections;
using Unity.Entities;
using Unity.Mathematics;
using Unity.Transforms;
using UnityEngine;[BurstCompile]
[UpdateInGroup(typeof(InitializationSystemGroup))]
public partial struct RandomMoveSpawnerSystem : ISystem
{public void OnCreate(ref SystemState state){}public void OnUpdate(ref SystemState state){var ecb = new EntityCommandBuffer(Allocator.Temp);foreach (var (spawner, entity) in SystemAPI.Query<RefRO<RandomMoveSpawner>>().WithEntityAccess()){var random = new Unity.Mathematics.Random((uint)UnityEngine.Random.Range(1, int.MaxValue));// 创建 NativeArray 存储实例var instances = new NativeArray<Entity>(spawner.ValueRO.Count, Allocator.Temp);// 实例化 prefab ,这里先用 EntityManager,因为 ECB 不能实例化实体,之后可以改成别的方案state.EntityManager.Instantiate(spawner.ValueRO.Prefab, instances);for (int i = 0; i < instances.Length; i++){float3 start = new float3(random.NextFloat(-spawner.ValueRO.Radius, spawner.ValueRO.Radius),0,random.NextFloat(-spawner.ValueRO.Radius, spawner.ValueRO.Radius));float3 dir = math.normalize(random.NextFloat3Direction());dir.y = 0;// 通过ECB设置组件数据(延迟生效)ecb.SetComponent(instances[i], LocalTransform.FromPosition(start));ecb.AddComponent(instances[i], new RandomMoveComponent{StartPosition = start,Direction = dir,Speed = UnityEngine.Random.Range(1f, 3f),Radius = 10f});}instances.Dispose();// 延迟删除 spawner 实体ecb.DestroyEntity(entity);}ecb.Playback(state.EntityManager);ecb.Dispose();}
}

        根据RandomMoveSpawner的Count数量,生成对应的实例。可以看到,很多新的API,还没理清,就不解释误导人了。

6.新建cube移动系统

原版代码

using Unity.Burst;
using Unity.Entities;
using Unity.Mathematics;
using Unity.Transforms;[BurstCompile]
public partial struct RandomMoveSystem : ISystem
{public void OnUpdate(ref SystemState state){float time = (float)SystemAPI.Time.ElapsedTime;foreach (var (move, transform) in SystemAPI.Query<RefRO<RandomMoveComponent>, RefRW<LocalTransform>>()){float3 pos = move.ValueRO.StartPosition +move.ValueRO.Direction *math.sin(time * move.ValueRO.Speed) *move.ValueRO.Radius;transform.ValueRW.Position = pos;}}
}

        这个代码运行之后,fps只有30,明显不正常,让AI又重新生成了一版

新版代码

using Unity.Burst;
using Unity.Entities;
using Unity.Mathematics;
using Unity.Transforms;[BurstCompile]
public partial struct RandomMoveSystem : ISystem
{[BurstCompile]public partial struct RandomMoveJob : IJobEntity{public float time;public void Execute(in RandomMoveComponent move, ref LocalTransform transform){float3 pos = move.StartPosition +move.Direction *math.sin(time * move.Speed) *move.Radius;transform.Position = pos;}}public void OnUpdate(ref SystemState state){var job = new RandomMoveJob{time = (float)SystemAPI.Time.ElapsedTime};job.ScheduleParallel(); // 并行调度}
}

        使用 IJobEntity + Burst 多线程并行,FPS达到了90左右,完美!

7.代码结束,接下来是编辑器的操作

8.新建cube预制体

        新建一个cube,拖成预制体。新建一个材质,shader选择URP默认的Lit即可。勾选材质上的Enable GPU Instancing(这个之前没勾选的时候,渲染不出来,但是后面又测试的时候,发现不勾选也可以正常渲染,而且可以正常合批,没搞清楚什么情况)

9.烘焙!!!重要

        场景内新建对象,命名Spawner(随意命名)

        Spawner挂载脚本RandomMoveAuthoring

        把刚才新建的cube预制体拖到RandomMoveAuthoring的Prefab栏

        选中Spawner,右键,点击New Sub Scene->From Selection,选择路径保存场景,此时会自动触发RandomMoveAuthoring脚本内的Bake函数,烘焙Mono的数据到ECS系统内,不进行烘焙,ECS是无法获取到Mono内定义的数据的

10.运行

        查看效果

问题记录

1.运行时看不到物体

a.检查渲染管线是否使用的是URP

b.烘焙是否正常,可以在Bake函数加日志,在点击子场景Inspector视图的Open按钮时,会触发Bake函数

c.确定编译过程中,没有报错,有些报错,不影响程序启动,但是会影响程序逻辑

2.FPS比预期的低

查看下Profiler,耗时主要在哪里,如果是EditorLoop,则关闭Scene视图

3.Scene视图不显示物体

关闭Sub Scene,取消图中的 复选框

4.Hierarchy视图,勿删了Sub Scene怎么办

在Hierarchy视图,新建空对象,添加脚本Sub Scene,把之前创建的场景,拖到Sub Scene脚本的Scene Asset栏即可,重置下对象的Transform数据清除警告

总结

        ECS DOTS的入门还是太难了,充斥着大量的新的API,写逻辑还要脱离Mono,跟之前的开发习惯差距巨大,需要慢慢深入,本文内容可能有错的地方,后续如果有理解,再做更新

http://www.ds6.com.cn/news/29789.html

相关文章:

  • 盐城做网站价格网络营销是以什么为基础
  • 将网站的字体设计成百分比的形式要怎样定义怎么宣传自己的产品
  • 安丘网站建设报价百度网站app
  • 自己做的电影网站打开很慢刷赞网站推广ks
  • 制作asp手机网站b2b网站推广优化
  • 网站上线要准备什么竞价排名什么意思
  • 开网站 怎么做网上支付潍坊seo推广
  • 红色餐饮网站源码seo优化教学视频
  • 问什么出现 这个网站正在建设中常见的关键词
  • wordpress iis设置方法关键词优化报价推荐
  • 网页设计班学费关键词优化排名用什么软件比较好
  • 忻州 建网站怎么根据视频链接找到网址
  • 网站开发创新点品牌活动策划
  • 移动版网站怎么做微信软文范例大全100
  • 西安哪有学做淘宝网站百度预测大数据官网
  • 烦恼可以做网站吗网站制作公司排行榜
  • 如何自己建设电影网站学企业管理培训班
  • mt4外汇金融网站建设武汉seo优化排名公司
  • php做直播网站线上宣传方案
  • 企业网站建设费用怎么入账如何做网页制作
  • 做网站建设需要做哪些工作室惠州百度seo找谁
  • 做网站的最终目的百度一下百度网页官
  • 平安建设网站长沙网站建站模板
  • 百度站长平台账号购买深圳网站开发公司
  • 做网站申请个体户搜索网站大全排名
  • 长沙设计网站排名网站优化外包多少钱
  • 沈阳网站建设工作室廊坊百度快照优化排名
  • 如何做p2p网站公众号软文推广多少钱一篇
  • 做戒指网站的logo照片seo排名优化北京
  • 做狗狗网站的背景图网文网站排名