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

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

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

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

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

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

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

對啦!這里有個游戲開發(fā)交流小組里面聚集了一幫熱愛學(xué)習(xí)游戲的零基礎(chǔ)小白,也有一些正在從事游戲開發(fā)的技術(shù)大佬,歡迎你來交流學(xué)習(xí)。

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

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

unity量子物理引擎,unity,全文檢索,游戲引擎

unity量子物理引擎,unity,全文檢索,游戲引擎

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

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

unity量子物理引擎,unity,全文檢索,游戲引擎

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

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

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

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

Unity DOTS 物理引擎簡單的案例

接下來利用Unity DOTS來實現(xiàn)一個簡單的物理引擎的案例,編寫一個腳本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;
 else
                velocity.ValueRW.Linear = new float3(0, 0, 0);
        }
    }
}

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

unity量子物理引擎,unity,全文檢索,游戲引擎

unity量子物理引擎,unity,全文檢索,游戲引擎

運行,效果如下:

unity量子物理引擎,unity,全文檢索,游戲引擎

今天的分享就到這里,需要本篇文章完整的項目工具與源碼的同學(xué)可以關(guān)注我們文章來源地址http://www.zghlxwxcb.cn/news/detail-794689.html

到了這里,關(guān)于Unity DOTS物理引擎的核心分析與詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

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

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

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

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

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

    2024年02月21日
    瀏覽(31)
  • 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)作”游戲的時候使用原來組件方式來編輯游戲場景與資源,同時Unity提供了一種Baking機制

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

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

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

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

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

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

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

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

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

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

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

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

    2024年02月16日
    瀏覽(23)
  • Unity Physics2D 2d物理引擎游戲 筆記

    Unity Physics2D 2d物理引擎游戲 筆記

    2d 材質(zhì) 里面可以設(shè)置 摩擦力 和 彈力 Simulated:是否在當前的物理環(huán)境中模擬,取消勾選該框類似于Disable Rigidbody,但使用這個參數(shù)更加高效,因為Disable會銷毀內(nèi)部產(chǎn)生的GameObject,而取消勾選Simulated只是禁用。 Kinematic 動力學(xué)剛體 動力學(xué)剛體不受重力和力的影響,而受用戶的

    2023年04月24日
    瀏覽(93)
  • Unity DOTS技術(shù)

    Unity DOTS技術(shù)

    目錄 一.概述 二.DOTS詳解 1.開發(fā)環(huán)境搭建 2.簡單ECS程序 ?2.調(diào)試功能 3.常用API ?4.系統(tǒng)之間的互相干擾 5.實體Entity的創(chuàng)建查找刪除 6.使用批處理Gpu Instancing優(yōu)化性能 7.World,System,Group 1)World 2)System 3)Group 8.組件Component介紹 1)組件Component的添加修改刪除 2)ShareComponent 3)狀態(tài)

    2024年02月05日
    瀏覽(13)
  • Unity Dots學(xué)習(xí)內(nèi)容記錄

    Unity Dots學(xué)習(xí)內(nèi)容記錄

    DOTS未來的潛力還是挺多的,目前已經(jīng)陸續(xù)有項目局部投入該技術(shù),追求硬件到軟件的極致性能。 主要是記錄下學(xué)習(xí)unity dots技術(shù)的過程吧。 DOTS全稱Data Oriented Tech Stack,面向數(shù)據(jù)的技術(shù)堆棧。 是由Unity的下面幾個技術(shù)棧組成 1.Entities(ECS,Entity-Component Data-System) 2.JobSytem(多線程作

    2024年04月15日
    瀏覽(28)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包