国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

DOTS Unity.Physics物理引擎的核心分析與詳解

這篇具有很好參考價(jià)值的文章主要介紹了DOTS Unity.Physics物理引擎的核心分析與詳解。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

最近DOTS發(fā)布了正式的版本,同時(shí)基于DOTS的理念實(shí)現(xiàn)了一套高性能的物理引擎,今天我們來給大家分享和介紹一下這個(gè)物理引擎的使用。

Unity.Physics的設(shè)計(jì)哲學(xué)

Unity.Physics是基于DOTS設(shè)計(jì)思想的一個(gè)高性能C#物理引擎的實(shí)現(xiàn), ?包含了物理剛體的迭代計(jì)算與碰撞檢測等查詢。Unity.Physics的設(shè)計(jì)理念與PhyX和Havok有所不同,它們追求的是全特性的物理模擬,而Unity.Physics追求的是最常用的一些物理機(jī)制的實(shí)現(xiàn),相比傳統(tǒng)的物理引擎,它實(shí)現(xiàn)的是物理引擎的核心子集,這樣導(dǎo)致比傳統(tǒng)的物理引擎實(shí)現(xiàn)起來更簡單與高效,同時(shí)能滿足大部分的需求。

?傳統(tǒng)的物理引擎在迭代計(jì)算的時(shí)候?yàn)榱吮WC物理引擎計(jì)算結(jié)果的穩(wěn)定性,緩存了很多的狀態(tài),這樣就給整個(gè)系統(tǒng)設(shè)計(jì)增加了復(fù)雜度與開銷。比如傳統(tǒng)物理引擎還考慮到了網(wǎng)絡(luò)游戲的情況下,你整個(gè)物理引擎的回滾與向前迭代計(jì)算。Unity.Physics就丟棄掉了這些,使得更容易控制和更高效。Unity.Physics物理引擎的迭代與計(jì)算都是基于Job與ECS機(jī)制的,由于沒有cache計(jì)算中的物理狀態(tài),導(dǎo)致它的性能會(huì)比傳統(tǒng)的物理引擎在某些方面性能要好。Unity.Physics的里面的物理參數(shù)與數(shù)據(jù)描述與傳統(tǒng)的Havok物理引擎兼容,這樣如果我們的項(xiàng)目中要追求物理引擎的全面性與穩(wěn)定性,我們可以很容易的使用Havok等商業(yè)的物理引擎。在Unity DOTS里面,如果你獲得了物理引擎Havok的授權(quán),你可以直接在Unity DOTS中使用Havok物理引擎。

Unity.Physics的源碼目錄結(jié)構(gòu)如下:

Base: 包含了Unity.Pysics物理引擎使用的基本數(shù)據(jù)容器與數(shù)學(xué)計(jì)算;

Collistion: 包含了所有的碰撞檢測與空間檢測的算法代碼;

DFG:包含了DataFlowGraph數(shù)據(jù),在碰撞世界里面執(zhí)行碰撞與設(shè)想檢測;

Dynamics:包含了所有的物理引擎的運(yùn)動(dòng)計(jì)算,約束計(jì)算,迭代計(jì)算;

ECS: 包含了將ECS的組件數(shù)據(jù)導(dǎo)入,導(dǎo)出到Unity.Physics引擎中;

Extensions: 包含了一些工具性質(zhì)的代碼,擴(kuò)展的一些組件,調(diào)試工具等;

DOTS Unity.Physics物理引擎的核心分析與詳解,unity,全文檢索,游戲引擎

Unity.Physics的物理引擎的全局設(shè)置

要對(duì)Unity DOTS的物理引擎做全局設(shè)置,我們可以給DOTS里面的SubScene添加一個(gè)”PhysicsStep”的組件實(shí)例。如下圖所示:

DOTS Unity.Physics物理引擎的核心分析與詳解,unity,全文檢索,游戲引擎

Simulation Type: 下拉選項(xiàng)包含Unity Physics, Havok Physics, None,你可以來選擇物理引擎的內(nèi)核,如果你獲得了Havok的商業(yè)授權(quán),你就可以看到Havok Physics的選項(xiàng)。

Gravity: 設(shè)置整個(gè)物理世界的張力加速度;

Solver Iteration Count: 設(shè)置每次迭代計(jì)算的次數(shù),次數(shù)越大,計(jì)算結(jié)果越精確穩(wěn)定,但是也消耗更多的性能;

Multi Threaded: 是否基于多線程來進(jìn)行迭代物理計(jì)算,如果勾選上,物理引擎會(huì)使用較多的線程來進(jìn)行迭代計(jì)算,否則就使用少量的線程來迭代計(jì)算。

Unity DOTS?物理引擎簡單的案例

接下來利用Unity DOTS來實(shí)現(xiàn)一個(gè)簡單的物理引擎的案例,編寫一個(gè)腳本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);    }}

再新建一個(gè)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;            else                velocity.ValueRW.Linear = new float3(0, 0, 0);        }    }}

打開SubScene場景,創(chuàng)作3個(gè)物體,一個(gè)地面(Cube),一個(gè)球體(Sphere),一個(gè)立方體節(jié)點(diǎn)(Target)。在球體上掛TargetAuthoring與MoveBodyAuthoring兩個(gè)組件,并設(shè)置MoveBodyAuthoring的Velocity與MaxDistance為1與5,設(shè)置TargetAuthoring組件的的TargetGameObject為Target節(jié)點(diǎn)對(duì)象。如圖所示:

Baker完成后得到Entity,如圖所示:

DOTS Unity.Physics物理引擎的核心分析與詳解,unity,全文檢索,游戲引擎

運(yùn)行效果如下:

DOTS Unity.Physics物理引擎的核心分析與詳解,unity,全文檢索,游戲引擎

今天的分享就到這里,需要本篇文章完整的工具與源碼的同學(xué)可以點(diǎn)擊"閱讀全文"

鏈接:https://pan.baidu.com/s/1A3QaHpXYDXqVSJKaoZwcPQ?pwd=w741

提取碼:w741文章來源地址http://www.zghlxwxcb.cn/news/detail-841320.html

到了這里,關(guān)于DOTS Unity.Physics物理引擎的核心分析與詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Unity DOTS《群體戰(zhàn)斗彈幕游戲》核心技術(shù)分析之3D角色動(dòng)畫

    Unity DOTS《群體戰(zhàn)斗彈幕游戲》核心技術(shù)分析之3D角色動(dòng)畫

    最近DOTS發(fā)布了正式的版本, 我們來分享現(xiàn)在流行基于群體戰(zhàn)斗的彈幕類游戲,實(shí)現(xiàn)的核心原理。今天給大家介紹大規(guī)模戰(zhàn)斗群體3D角色的動(dòng)畫如何來實(shí)現(xiàn)。 DOTS 對(duì)角色動(dòng)畫支持的局限性 截止到Unity DOTS發(fā)布的版本1.0.16,目前還是無法很好的支持3D角色動(dòng)畫。在DOTS 的baker過程種,

    2024年02月04日
    瀏覽(24)
  • Unity --- 物理引擎 --- 觸發(fā)器 與 碰撞器詳解

    Unity --- 物理引擎 --- 觸發(fā)器 與 碰撞器詳解

    對(duì)第一個(gè)條件進(jìn)行補(bǔ)充 --- 不僅要兩者都具有碰撞組件,同時(shí)還需要兩者的碰撞組件中都沒有勾選 Is Trigger屬性 ?1.上一篇文章中說了那么多,其實(shí)也可以總結(jié)為兩個(gè)碰撞條件 --- a.兩個(gè)游戲物體都具有碰撞器組件 ,如果沒有的話,連碰撞檢測都不會(huì)發(fā)生,也就沒有所謂的碰不

    2024年02月07日
    瀏覽(27)
  • Unity3D 實(shí)現(xiàn)基于物理引擎的繩子關(guān)節(jié)解析詳解

    在游戲開發(fā)中,有時(shí)候我們需要實(shí)現(xiàn)繩子關(guān)節(jié)效果,比如在射擊游戲中射擊繩子,或者在平衡游戲中使用繩子作為支撐。本文將詳細(xì)介紹如何使用Unity3D的物理引擎實(shí)現(xiàn)繩子關(guān)節(jié)效果。 對(duì)惹,這里有一 個(gè)游戲開發(fā)交流小組 ,希望大家可以點(diǎn)擊進(jìn)來一起交流一下開發(fā)經(jīng)驗(yàn)呀 首

    2024年02月21日
    瀏覽(31)
  • Unity UGUI的Physics2DRaycaster (2D物理射線檢測)組件的介紹及使用

    Physics2DRaycaster是Unity中的一個(gè)UGUI組件,用于在2D場景中進(jìn)行物理射線檢測。它可以檢測鼠標(biāo)或觸摸事件在UI元素上的碰撞,并將事件傳遞給相應(yīng)的UI元素。 Physics2DRaycaster通過發(fā)射一條射線來檢測UI元素的碰撞。當(dāng)射線與UI元素相交時(shí),Physics2DRaycaster會(huì)將事件傳遞給相應(yīng)的UI元素,

    2024年02月15日
    瀏覽(20)
  • Unity DOTS Baking與Baker詳解

    Unity DOTS Baking與Baker詳解

    Unity DOTS Baking與Baker詳解 ??最近DOTS終于發(fā)布了正式的版本, 我們來分享一下DOTS里面Baking 與Baker的關(guān)鍵概念,方便大家上手學(xué)習(xí)掌握Unity DOTS開發(fā)。 ??Unity DOTS開發(fā)模式,為了讓大家在”創(chuàng)作”游戲的時(shí)候使用原來組件方式來編輯游戲場景與資源,同時(shí)Unity提供了一種Baking機(jī)制

    2024年04月17日
    瀏覽(23)
  • Unity核心3——2D物理系統(tǒng)

    Unity核心3——2D物理系統(tǒng)

    ? 剛體是物理系統(tǒng)中用于幫助我們進(jìn)行模擬物理碰撞中力的效果的 ? 2D 物理系統(tǒng)中的剛體和 3D 中的剛體基本是一樣的,最大的區(qū)別是對(duì)象只會(huì)在 XY 平面中移動(dòng),并且只在垂直于該平面的軸上旋轉(zhuǎn) ? 不同于 3D 剛體,2D 剛體具有以下三種類型: ? 物體會(huì)受到力的影響移動(dòng)和

    2024年02月09日
    瀏覽(39)
  • Unity基礎(chǔ)課程之物理引擎6-關(guān)于物理材質(zhì)的使用和理解

    Unity基礎(chǔ)課程之物理引擎6-關(guān)于物理材質(zhì)的使用和理解

    ?每個(gè)物體都有著不同的摩擦力。光滑的冰面摩擦力很小,而地毯表面的摩擦力則很大。另外每種材料也有著不同的彈性,橡皮表面的彈性大,硬質(zhì)地面的彈性小。在Unity中這些現(xiàn)象都符合日常的理念。雖然從原理上講,物體的摩擦力和彈性有著更復(fù)雜的內(nèi)涵,例如普通的鋼板

    2024年02月07日
    瀏覽(21)
  • Unity3D學(xué)習(xí)筆記——物理引擎

    Unity3D學(xué)習(xí)筆記——物理引擎

    1簡介 剛體可以為游戲?qū)ο筚x予物理特性,是游戲?qū)ο笤谖锢硐到y(tǒng)的控制下接受推力和扭力,從而實(shí)現(xiàn)現(xiàn)實(shí)世界的物理學(xué)現(xiàn)象。 2屬性 1簡介 碰撞器是物理組件的一類,他與剛體一起促使碰撞發(fā)生 碰撞體是簡單形狀,如方塊、球形或者膠囊形,在 Unity 3D 中每當(dāng)一個(gè) GameObjects

    2023年04月12日
    瀏覽(28)
  • Unity --- 物理引擎 ---- 剛體RigidBody 與 碰撞器 collider

    Unity --- 物理引擎 ---- 剛體RigidBody 與 碰撞器 collider

    ? 1.RigidBody(剛體)的作用是讓物體具有物理特性(比如說重力,摩檫力等等) 2.如果想讓物體能夠與其它物體發(fā)生碰撞的話,我們還需要一個(gè)組件 --- Colider碰撞器組件 1.上圖就是Unity中提供的已經(jīng)準(zhǔn)備好的各種形狀的碰撞器組件 2.形成不同形狀的碰撞器所需的面數(shù)不同,面數(shù)

    2024年02月16日
    瀏覽(23)
  • 物理信息神經(jīng)網(wǎng)絡(luò)PINNs : Physics Informed Neural Networks 詳解

    物理信息神經(jīng)網(wǎng)絡(luò)PINNs : Physics Informed Neural Networks 詳解

    本博客主要分為兩部分: 1、PINN模型論文解讀 2、PINN模型相關(guān)總結(jié) 基于物理信息的神經(jīng)網(wǎng)絡(luò)(Physics-informed Neural Network, 簡稱PINN),是一類用于解決有監(jiān)督學(xué)習(xí)任務(wù)的神經(jīng)網(wǎng)絡(luò),同時(shí)尊重由一般非線性偏微分方程描述的任何給定的物理規(guī)律。 原理 :它不僅能夠像傳統(tǒng)神經(jīng)網(wǎng)

    2024年02月02日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包