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

京网站制作公司广州安卓程序开发

京网站制作公司,广州安卓程序开发,正能量网站,快速网站建设费用最近DOTS发布了正式的版本,同时基于DOTS的理念实现了一套高性能的物理引擎,今天我们来给大家分享和介绍一下这个物理引擎的使用。 Unity.Physics的设计哲学 Unity.Physics是基于DOTS设计思想的一个高性能C#物理引擎的实现, 包含了物理刚体的迭代计算与碰撞检测等查…

  最近DOTS发布了正式的版本,同时基于DOTS的理念实现了一套高性能的物理引擎,今天我们来给大家分享和介绍一下这个物理引擎的使用。

Unity.Physics的设计哲学

  Unity.Physics是基于DOTS设计思想的一个高性能C#物理引擎的实现, 包含了物理刚体的迭代计算与碰撞检测等查询。Unity.Physics的设计理念与PhyX和Havok有所不同,它们追求的是全特性的物理模拟,而Unity.Physics追求的是最常用的一些物理机制的实现,相比传统的物理引擎,它实现的是物理引擎的核心子集,这样导致比传统的物理引擎实现起来更简单与高效,同时能满足大部分的需求。

  传统的物理引擎在迭代计算的时候为了保证物理引擎计算结果的稳定性,缓存了很多的状态,这样就给整个系统设计增加了复杂度与开销。比如传统物理引擎还考虑到了网络游戏的情况下,你整个物理引擎的回滚与向前迭代计算。Unity.Physics就丢弃掉了这些,使得更容易控制和更高效。Unity.Physics物理引擎的迭代与计算都是基于Job与ECS机制的,由于没有cache计算中的物理状态,导致它的性能会比传统的物理引擎在某些方面性能要好。Unity.Physics的里面的物理参数与数据描述与传统的Havok物理引擎兼容,这样如果我们的项目中要追求物理引擎的全面性与稳定性,我们可以很容易的使用Havok等商业的物理引擎。在Unity DOTS里面,如果你获得了物理引擎Havok的授权,你可以直接在Unity DOTS中使用Havok物理引擎。

  Unity.Physics的源码目录结构如下:

  • Base: 包含了Unity.Pysics物理引擎使用的基本数据容器与数学计算;
  • Collistion: 包含了所有的碰撞检测与空间检测的算法代码;
  • DFG:包含了DataFlowGraph数据,在碰撞世界里面执行碰撞与设想检测;
  • Dynamics:包含了所有的物理引擎的运动计算,约束计算,迭代计算;
  • ECS: 包含了将ECS的组件数据导入,导出到Unity.Physics引擎中;
  • Extensions: 包含了一些工具性质的代码,扩展的一些组件,调试工具等;   

Unity.Physics的物理引擎的全局设置

  要对Unity DOTS的物理引擎做全局设置,我们可以给DOTS里面的SubScene添加一个”PhysicsStep”的组件实例。如下图所示:   

  • Simulation Type: 下拉选项包含Unity Physics, Havok Physics, None,你可以来选择物理引擎的内核,如果你获得了Havok的商业授权,你就可以看到Havok Physics的选项。
  • Gravity: 设置整个物理世界的张力加速度;
  • Solver Iteration Count: 设置每次迭代计算的次数,次数越大,计算结果越精确稳定,但是也消耗更多的性能;
  • Multi Threaded: 是否基于多线程来进行迭代物理计算,如果勾选上,物理引擎会使用较多的线程来进行迭代计算,否则就使用少量的线程来迭代计算。

Unity DOTS 物理引擎简单的案例

  接下来利用Unity DOTS来实现一个简单的物理引擎的案例,编写一个脚本TargetAuthoring.cs, 代码如下:

using Unity.Entities;
using UnityEngine;public struct Target : IComponentData
{public Entity TargetEntity;public float MaxDistance;
}public class TargetAuthoring : MonoBehaviour
{public GameObject TargetGameObject;public float MaxDistance;
}public class TargetAuthoringBaker : Baker<TargetAuthoring>
{public override void Bake(TargetAuthoring authoring){var component = new Target{MaxDistance = authoring.MaxDistance,TargetEntity = GetEntity(authoring.TargetGameObject)};AddComponent(component);}
}

  再新建一个MovingBodyAuthoring.cs的文件,代码如下:

using Unity.Entities;
using Unity.Mathematics;
using Unity.Physics;
using Unity.Transforms;
using UnityEngine;public struct MovingBody : IComponentData
{public float Velocity;
}public class MovingBodyAuthoring : MonoBehaviour
{public float Velocity;
}class MovingBodyAuthoringBaker : Baker<MovingBodyAuthoring>
{public override void Bake(MovingBodyAuthoring authoring){var component = new MovingBody{Velocity = authoring.Velocity};AddComponent(component);}
}public partial struct MovingBodySystem : ISystem
{public void OnUpdate(ref SystemState state){foreach (var(target, transform, moving, velocity) in SystemAPI.Query<RefRO<Target>, RefRO<LocalTransform>, RefRW<MovingBody>, RefRW<PhysicsVelocity>>().WithAll<MovingBody>()){var targetPosition = SystemAPI.GetComponent<LocalTransform>(target.ValueRO.TargetEntity).Position;var direction = math.normalize(targetPosition - transform.ValueRO.Position);if (math.distance(targetPosition, transform.ValueRO.Position) < target.ValueRO.MaxDistance)velocity.ValueRW.Linear = moving.ValueRO.Velocity * direction;elsevelocity.ValueRW.Linear = new float3(0, 0, 0);}}
}

打开SubScene场景,创作3个物体,一个地面(Cube),一个球体(Sphere),一个立方体节点(Target)。在球体上挂TargetAuthoring与MoveBodyAuthoring两个组件,并设置MoveBodyAuthoring的Velocity与MaxDistance为1与5,设置TargetAuthoring组件的的TargetGameObject为Target节点对象。   

   

运行,效果如下:

  

  今天的分享就到这里,需要本篇文章完整的项目工具与源码的同学可以+ 企.鹅.裙 428 540 563 


  下面是DOTS的VIP课程前18节视频,免费观看

Unity DOTS进阶与项目实战(B站18集)

第001课DOTS的环境安装与准备事项

第002课 DOTS的核心机制与概述

第003课DOTS的SubScene

第004课Component的概述与普通组件的Baker

第005课System与SystemGroup概述

第006课DOTS中的ECS核心概念总结

第007课Baking系列之Baking与Baker详解

第008课Baking系列之BakingSystem与BakingWorld详解

第009课FilterBakingOutput与PrefabsInBaking

第010课BlobAsset核心机制分析

第011课Aspect核心机制分析

第012课 StructChange核心机制详解

第013课Managed与Unmanaged Component详解与性能分析

第014课ShareComponent核心机制与性能分析

第015课CleanupComponent核心分析

第016课 Dynamic Buffer Component详解与分析

第017课Tag与Chunk Component详解与分析

第018课Enableable与Singleton组件详解与分析

http://www.15wanjia.com/news/167179.html

相关文章:

  • 扶风做网站网站更新维护页面
  • 建一个网站都需要什么app制作步骤
  • 技术社区网站开发应用汇
  • 织梦网站更改wordpress网站收录插件
  • 知乎 拒绝 朋友 做网站深圳百度总部
  • 企业网站推广方法有哪些鞋店网站建设方案
  • 西宁网站建设加q479185700wordpress 迷
  • app比网站的优势网站在政务新媒体建设方案
  • 公司网站建设维护的岗位网络营销成功案例ppt免费
  • 主要网站域名三种常见的网络营销方式
  • php做网站基本流程淄博桓台学校网站建设方案
  • 网站如何提高用户量上上上海网站设计
  • 个人律师网站模板外包装设计网站
  • 深圳专业做网站排名公司哪家好怎么创建网页文件
  • 网站搭建一般要微信官方小程序商城
  • 定制网站建设哪家便宜wordpress大型门户
  • 望江县城乡建设局网站沈阳中讯国际网站建设
  • 微网站与微信公众号宜宾团购网站建设
  • 减粘装置反应塔的特点廊坊百度seo公司
  • 自己电脑做的网站如何映射到公网自己公司做公益网站怎么弄
  • 国家工商网站查询wordpress所有分类目录的地址
  • 网站流量太大海外酒店 网站建设
  • 网站备案的具体流程网站开发怎么做才有利于seo
  • 护肤品网站建设策划书如何做网站的伪静态页面
  • 做网站怎样赚钱html编辑器文字居中
  • 艺术家网站源码莱州市招聘网站
  • 创业网站建设政策wordpress 大前端主题
  • 拖拽建设网站源码专业h5网站建设教程
  • 重庆巴南网站制作百度云网站备案流程
  • 网站建设自助搭配系统律师事务所免费咨询