Unity DOTS技术(十五) 物理系统

news2024/11/28 16:25:37

要解决性能的瓶颈问题,在DOTS中我们将不再使用Unity自带的物理组件.
下面来分享一下在DOTS中当如何使用物理插件.

一.导入插件

在使用DOTS系创建的实体我们会发现,游戏物体无法受物理系统影响进行运动.于是我们需要添加物理系统插件.
1.打开Package Manager > 搜索插件UnityPhysics进行安装
在这里插入图片描述

2.注意:安装完后需要重启Unity
3.再在场景中为创建Cube挂载以下组件即可正常展示物理效果了
在这里插入图片描述

二.使用Physics组件

为了达到更好的性能我们应当在ECS中使用如以下插件代替Unity传统使用的组件.
创建小球并关其添加以下组件.
使用Physics Shape代替原有的Collider ,使用Physics Body代替原有Rigidbody并且需要挂载ConvertToEntity组件.

在这里插入图片描述

三.Demo

下面是使用代码动态创建小球,与之前不同可能是使用了Physics的缘故需要强制创建BlobAssetStore容器
在这里插入图片描述

using Unity.Entities;
using UnityEngine;
public class Manager11 : MonoBehaviour
{
    //挂载预设
    public GameObject spherePrefab;
    //资产容器
    BlobAssetStore blobAssetStore;
    void Start()
    {
        //初始化容器
        blobAssetStore = new BlobAssetStore();
        //使用World创建实体
        GameObjectConversionSettings tempsettings = GameObjectConversionSettings.FromWorld(World.DefaultGameObjectInjectionWorld, blobAssetStore);
        Entity tempEntityPrefab = GameObjectConversionUtility.ConvertGameObjectHierarchy(spherePrefab, tempsettings);
        EntityManager tempEntityManager = World.DefaultGameObjectInjectionWorld.EntityManager;
        Entity tempCube = tempEntityManager.Instantiate(tempEntityPrefab);
    }
    private void OnDestroy()
    {
        //周期结束销毁容器
        blobAssetStore.Dispose();
    }
}

四 .批量创建Demo

创建10000个小球,我们可以发现10000个球在Dost中还能保持较高的帧率
在这里插入图片描述

我们用一个嵌套循环创建10000个小球
在这里插入图片描述

using Unity.Entities;
using Unity.Mathematics;
using Unity.Transforms;
using UnityEngine;
public class Manager11 : MonoBehaviour
{
    //挂载预设
    public GameObject spherePrefab;
    public int sphereNum;
    public int Interval;
    //资产容器
    BlobAssetStore blobAssetStore;
    void Start()
    {
        //初始化容器
        blobAssetStore = new BlobAssetStore();
        //使用World创建实体
        GameObjectConversionSettings tempsettings = GameObjectConversionSettings.FromWorld(World.DefaultGameObjectInjectionWorld, blobAssetStore);
        Entity tempEntityPrefab = GameObjectConversionUtility.ConvertGameObjectHierarchy(spherePrefab, tempsettings);
        //用于修改位置
        Translation tempTranslation = new Translation();
        for (int y = 0; y < 40; y++)
        {
            for (int z = 0; z < 16; z++)
            {
                for (int x = 0; x < 16; x++)
                {
                    EntityManager tempEntityManager = World.DefaultGameObjectInjectionWorld.EntityManager;
                    Entity tempCube = tempEntityManager.Instantiate(tempEntityPrefab);
                    float random = UnityEngine.Random.Range(-0.1f, 0.1f);
                    tempTranslation.Value = new float3(x * Interval + random, y * Interval, z * Interval - random);
                    tempEntityManager.SetComponentData(tempCube, tempTranslation);
                }
            }
        }
    }
    private void OnDestroy()
    {
        //周期结束销毁容器
        blobAssetStore.Dispose();
    }
}

五.射线碰撞

在World中获取BuildPhysicsWorld碰撞类中的CollisionWorld碰撞信息
定义RaycastInput写入发射信息后,调用CollisionWorld中的CastRay进行发射并使用RaycastHiy接收信息.

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1804741.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【NI国产替代】产线综测仪,高速高精度测量的示波器模块与任意波形发生器模块,多样化 DUT 供电;高精度万用表模块

Xilinx ZYNQ-7000 系列 FPGA 控制模块多样化 DUT 供电&#xff1b;高精度万用表模块高速高精度测量的示波器模块与任意波形发生器模块可选配射频开关与音频信号源和音频分析仪模块可快速部署的测试平台软件&#xff0c;支持测试计划导入、开发、执行管理具有良好的扩展性&#…

1.2-自然语言的分布式表示-基于计数的方法

本篇笔记对应的视频链接为&#xff1a; 3-基于计数的方法表示单词-将文字转换成编号的预处理工作_哔哩哔哩_bilibili&#xff1b;4-基于计数的方法表示单词-使用共现矩阵进行单词的分布式表示_哔哩哔哩_bilibili&#xff1b;5-基于计数的方法表示单词-单词之间相似度计算_哔哩哔…

超详解——python数字和运算_——小白篇

目录 1.的位运算 2. 常用内置函数/模块 math模块&#xff1a; random模块&#xff1a; decimal模块&#xff1a; 3.内置函数&#xff1a; 总结&#xff1a; 1.的位运算 位运算是对整数在内存中的二进制表示进行操作。Python支持以下常见的位运算符&#xff1a; 按位与&…

openh264 场景变化检测算法源码分析

文件位置 openh264/codec/processing/scenechangedetection/SceneChangeDetection.cppopenh264/codec/processing/scenechangedetection/SceneChangeDetection.h 代码流程 说明&#xff1a; 通过代码流程分析&#xff0c;当METHOD_SCENE_CHANGE_DETECTION_SCREEN场景类型为时…

git 的基本操作 Master and branch的版本合并 @ VS 1019

前言&#xff1a; 在VS 2019有git 的可视化管理,但&#xff0c;感觉微软其实就是在git上包了一层。版本冲突后&#xff0c;还是要靠git 的命令行代码搞。本文记录了一次&#xff0c;branch和master的版本合并的过程。作为&#xff0c;后续的参考。 【注意&#xff0c;这个是一…

相机标定中一些细节--畸变模型和参数

张正友标定方法做相机标定的主要过程是先估计每张图片的单应性矩阵&#xff0c;然后通过这一系列的单应性矩阵估计出内外参数初值&#xff0c;最后再考虑畸变模型的加入进行非线性优化。同时优化内参、外参和畸变参使得重投影误差最小。 镜头的畸变表现出来的非线性关系&#…

处理异常不再困难-try-catch-finally和throw语句详解

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

《软件定义安全》之三:用软件定义的理念做安全

第3章 用软件定义的理念做安全 1.不进则退&#xff0c;传统安全回到“石器时代” 1.1 企业业务和IT基础设施的变化 随着企业办公环境变得便利&#xff0c;以及对降低成本的天然需求&#xff0c;企业始终追求IT集成设施的性价比、灵活性、稳定性和开放性。而云计算、移动办公…

《软件定义安全》之二:SDN/NFV环境中的安全问题

第2章 SDN/NFV环境中的安全问题 1.架构安全 SDN强调了控制平面的集中化&#xff0c;从架构上颠覆了原有的网络管理&#xff0c;所以SDN的架构安全就是首先要解决的问题。例如&#xff0c;SDN实现中网络控制器相关的安全问题。 1.1 SDN架构的安全综述 从网络安全的角度&…

算法训练营day04

一、24. 两两交换链表中的节点 题目链接&#xff1a;https://leetcode.cn/problems/swap-nodes-in-pairs/description/ 文章讲解&#xff1a;https://programmercarl.com/0024.%E4%B8%A4%E4%B8%A4%E4%BA%A4%E6%8D%A2%E9%93%BE%E8%A1%A8%E4%B8%AD%E7%9A%84%E8%8A%82%E7%82%B9.h…

运维实用小脚本,登录即自动显示系统信息

今天给大家安利一个超级实用的Linux小技巧&#xff0c;让你每次登录终端时都能感受到满满的科技感和效率爆棚&#xff01; 你是否厌倦了每次手动检查系统状态&#xff0c;像内存使用、CPU负载这些繁琐操作&#xff1f;别担心&#xff0c;一个小调整&#xff0c;让这一切自动化…

当我拿到百度文心智能体大赛top1后,我又开发了...

目录 一、写在前面 二、代码助手 三、关于智能体 四、写在后面 一、写在前面 在不久前结束的文心智能体大赛&#xff08;第一期&#xff09;中&#xff0c;我有幸凭借一款名为恋爱助手的智能体斩获了大赛的桂冠。这个成绩&#xff0c;既是对我努力的认可&#xff0c;也是对…

YOLOv8_obb的训练、验证、预测及导出[旋转目标检测实践篇]

1.旋转目标检测数据集划分和配置 从上面得到的images和labels数据还不能够直接训练,需要按照一定的比例划分训练集和验证集,并按照下面的结构来存放数据,划分代码如下所示,该部分内容和YOLOv8的训练、验证、预测及导出[目标检测实践篇]_yolov8训练测试验证-CSDN博客是重复的…

linux本地搭建apt源

使用apt-mirror搭建 1.安装 apt-get install apt-mirror2.编辑配置文件 vi /etc/apt/mirror.list修改下载目录 set_base_path 后面改为下载镜像的目录&#xff0c;同时删除前面#号 添加同步的源&#xff0c;建议用国内的&#xff0c;速度快&#xff0c;我这里用的阿里云的镜…

调查显示各公司在 IT 安全培训方面存在差距

网络安全提供商 Hornetsecurity 最近进行的一项调查显示&#xff0c;许多组织的 IT 安全培训存在严重缺陷。 这项调查是在伦敦举行的 Infosecurity Europe 2024 期间发布的&#xff0c;调查发现 26% 的组织没有为其最终用户提供任何 IT 安全培训。 这些调查结果来自世界各地的…

网页中生成ZIP文件,Zip 压缩、解压技术在 HTML5 浏览器中的应用

JSZip 是一款可以创建、读取、修改 .zip 文件的 javaScript 工具。在 web 应用中&#xff0c;免不了需要从 web 服务器中获取资源&#xff0c;如果可以将所有的资源都合并到一个 .zip 文件中&#xff0c;这时候只需要做一次请求&#xff0c;这样既减少了服务器的压力&#xff0…

mysql 更改数据存储目录

先停止 mysql &#xff1a;sudo systemctl start/stop mysql 新建新的目录&#xff0c; 比如 /mnt/data/systemdata/mysql/mysql_data sudo chown -R mysql:mysql /mnt/data/sysdata/mysql/mysql_data sudo chmod -R 750 /mnt/data/sysdata/mysql/mysql_data 更改mysql.cnf…

Hadoop3:MapReduce源码解读之Map阶段的FileInputFormat的切片原理(2)

Job那块的断点代码截图省略&#xff0c;直接进入切片逻辑 参考&#xff1a;Hadoop3&#xff1a;MapReduce源码解读之Map阶段的Job任务提交流程&#xff08;1&#xff09; 4、FileInputFormat切片源码解析 切片入口 获取切片 获取切片最大的Size和切片最小的Size 判断文件是…

【基于C++与OpenCV实现魔方图像识别和还原算法】施工总览图

文章目录 主要效果展示思维导图魔方还原算法 本系列博客长期更新&#xff0c;分为两大部分 OpenCV实现魔方六面识别 C编写科先巴二阶段还原算法实现三阶魔方的还原 主要效果展示 摄像头识别六面 3D图像构建&#xff0c;提供还原公式 动画演示还原过程 思维导图 魔方还原算法 参…