【unity】基于Obi的绳/杆蓝图、绳杆区别及其创建方法

2024-01-04 22:52

本文主要是介绍【unity】基于Obi的绳/杆蓝图、绳杆区别及其创建方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

绳索 是通过使用距离和弯曲约束将粒子连接起来而形成的。由于规则粒子没有方向(只有位置),因此无法模拟扭转效应(维基百科),绳子也无法保持其静止形状。然而,与杆不同的是,绳索可以被撕裂/劈开,并且可以在运行时改变其长度。

是通过使用拉伸/剪切和弯曲/扭转约束连接定向粒子而构建的。它们比绳索复杂得多,可以模拟扭转影响并保持其静止形状。然而,它们的长度不能在运行时改变,它们不能被撕裂/分裂。棒是理想的模型弹簧,粗杆,天线等。

请添加图片描述
杆能保持静止的形状,绳不能。

杆不能被撕裂或动态调整大小。这张表总结了绳索和杆的区别:

特性基于Obi的绳基于Obi的杆
Rest shapeNoYes
抗扭强度NoYes
动态调整大小(ObiCursor)YesNo
可撕裂YesNo

要生成基本的绳/杆的蓝图,请依次进入 Assets->Create->Obi->Rope/Rod blueprint,或者右键单击项目文件夹并选择 Create->Obi->Rope/Rod blueprint。绳杆设计图参数如下:

  • Thickness(厚度):生成绳/杆的粒子半径,以米表示。

  • Resolution(分辨率):每长度单位的粒子密度。值为1将生成重叠等于绳子厚度的粒子。0.5的值将产生粒子,使它们几乎不相互接触。低于0.5的值将在粒子之间留下间隙,这可能对碰撞检测的鲁棒性有害,但对性能有益。值为0时,每个控制点只产生一个粒子。

    内部,基于分辨率计算rope中粒子数量的公式为:particleCount = ropeLength / ropeThickness * resolution。如果你在运行时创建绳索,你可以使用这个公式来计算所需的分辨率,以获得绳索中特定数量的粒子:resolution = particleCount / (ropeLength / ropeThickness)。

    在这里插入图片描述
    (在较低分辨率的绳索中,弯曲和距离限制可以看到微弱的紫色和绿色线条。)

  • Pooled particles(池粒子):(仅绳索)。分配给撕裂或调整绳子大小时使用的额外颗粒。不打算在运行时撕裂或调整绳子的大小,可以将此值设置为零。

  • Keep initial shape(保持初始形状):(仅杆)。如果希望杆保持其初始形状作为其静止形状,启用此选项。禁用它导致杆假定一个完全笔直的静止形状。

若要编辑绳或杆的蓝图,先将蓝图分配给绳或杆脚本的蓝图槽。然后点击编辑路径按钮,进入路径编辑模式:

请添加图片描述

路径编辑器

请添加图片描述
路径编辑模式,选择一个控制点(白色小球体),显示其厚度手柄(橙色圆盘)和两个切线手柄(每边正方形)。

请添加图片描述
生成的绳子,使用 Extruded renderer(挤压渲染器)

绳/杆蓝图中的粒子沿着路径生成,是经过几个控制点的弯曲形状。在路径编辑器中,你可以添加/删除控制点,移动/旋转/缩放现有的控制点,并设置控制点属性,这些属性将被插值到绳索粒子上。在编辑路径时,您将获得生成的绳/杆的即时反馈。有时在编辑路径时使用 ObiParticleRenderer组件 很有用,可以清楚地看到路径是如何转换为粒子的。

当编辑路径时,如果正在修改绳索的蓝图。修改将应用于所有共享相同蓝图的绳/杆。这能加速工作,也能毁掉工作,最好复制蓝图进行工作。

01 添加控制点工具请添加图片描述

此开关使工具能够可视地向样条添加控制点。在鼠标光标和样条中最近的点之间将出现一条绿色虚线。单击将在该位置的曲线上插入一个新的控制点。

02 移除控制点工具请添加图片描述

此开关使工具能够以可视方式从样条中删除控制点。在鼠标光标和样条中最近的点之间将出现一条红色虚线。点击将删除曲线中最近的控制点。

03 打开/关闭路径请添加图片描述
路径可以是开放的(两端独立)或封闭的(曲线遵循封闭路径,两端共享相同的位置和切线)。

04 定向工具(仅限杆)请添加图片描述
此工具允许定义每个控制点的方向。这允许指定杆的剩余捻度(扭度)。

05 切换切线手柄请添加图片描述
切换切线手柄的开启/关闭。

06切换厚度手柄请添加图片描述
切换厚度手柄的开启/关闭。

07 编辑控制点
你可以按住“shift”同时选择多个控制点,也可以使用“ctrl”拖动选择选框。平移、旋转和缩放小装置的工作方式与常规游戏对象相同,旋转和转换空间切换也是如此。

每个切线句柄有三种操作模式,可以按句柄设置:Free(自由)Aligned(对齐)Mirrored(镜像)

  • Free(自由):手柄的每一半都可以自由地独立移动。这允许创建尖锐的角落或曲率的突然变化。
  • Aligned(对齐):两半将被迫位于与控制点的切线上,但是它们的长度可以独立设置。
  • Mirrored(镜像):两半将被迫在方向和长度上都是相同的。

除了切线模式,每个控制点都有几个属性(通过插值)传递给粒子:

  • Thickness(厚度):这一点处绳子的厚度。插值到粒子,用于碰撞检测和渲染。
  • Mass:粒子质量。决定粒子在与另一个粒子或刚体发生任何约束(碰撞、距离、弯曲…)时的行为。
  • Category:粒子碰撞类别,用于确定何时应该忽略与对撞机和其他粒子的碰撞。有关更深入的解释,请参见碰撞。
  • Collides with:粒子碰撞遮罩,用于确定何时应该忽略与对撞机和其他粒子的碰撞。有关更深入的解释,请参见碰撞。
  • Color:颜色的控制点,插值到粒子。当使用 ObiRopeExtrudedRenderer时,这个颜色传递给网格顶点颜色。
  • Name:Obi将自动为每个控制点创建一个粒子组,其中包含最接近该控制点的粒子。您可以在这里设置组的名称。

参考地址:https://obi.virtualmethodstudio.com/manual/6.3/index.html

这篇关于【unity】基于Obi的绳/杆蓝图、绳杆区别及其创建方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/570856

相关文章

Python判断for循环最后一次的6种方法

《Python判断for循环最后一次的6种方法》在Python中,通常我们不会直接判断for循环是否正在执行最后一次迭代,因为Python的for循环是基于可迭代对象的,它不知道也不关心迭代的内部状态... 目录1.使用enuhttp://www.chinasem.cnmerate()和len()来判断for

Java循环创建对象内存溢出的解决方法

《Java循环创建对象内存溢出的解决方法》在Java中,如果在循环中不当地创建大量对象而不及时释放内存,很容易导致内存溢出(OutOfMemoryError),所以本文给大家介绍了Java循环创建对象... 目录问题1. 解决方案2. 示例代码2.1 原始版本(可能导致内存溢出)2.2 修改后的版本问题在

MySQL分表自动化创建的实现方案

《MySQL分表自动化创建的实现方案》在数据库应用场景中,随着数据量的不断增长,单表存储数据可能会面临性能瓶颈,例如查询、插入、更新等操作的效率会逐渐降低,分表是一种有效的优化策略,它将数据分散存储在... 目录一、项目目的二、实现过程(一)mysql 事件调度器结合存储过程方式1. 开启事件调度器2. 创

四种Flutter子页面向父组件传递数据的方法介绍

《四种Flutter子页面向父组件传递数据的方法介绍》在Flutter中,如果父组件需要调用子组件的方法,可以通过常用的四种方式实现,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录方法 1:使用 GlobalKey 和 State 调用子组件方法方法 2:通过回调函数(Callb

一文详解Python中数据清洗与处理的常用方法

《一文详解Python中数据清洗与处理的常用方法》在数据处理与分析过程中,缺失值、重复值、异常值等问题是常见的挑战,本文总结了多种数据清洗与处理方法,文中的示例代码简洁易懂,有需要的小伙伴可以参考下... 目录缺失值处理重复值处理异常值处理数据类型转换文本清洗数据分组统计数据分箱数据标准化在数据处理与分析过

Java中Object类的常用方法小结

《Java中Object类的常用方法小结》JavaObject类是所有类的父类,位于java.lang包中,本文为大家整理了一些Object类的常用方法,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. public boolean equals(Object obj)2. public int ha

golang1.23版本之前 Timer Reset方法无法正确使用

《golang1.23版本之前TimerReset方法无法正确使用》在Go1.23之前,使用`time.Reset`函数时需要先调用`Stop`并明确从timer的channel中抽取出东西,以避... 目录golang1.23 之前 Reset ​到底有什么问题golang1.23 之前到底应该如何正确的

mysql外键创建不成功/失效如何处理

《mysql外键创建不成功/失效如何处理》文章介绍了在MySQL5.5.40版本中,创建带有外键约束的`stu`和`grade`表时遇到的问题,发现`grade`表的`id`字段没有随着`studen... 当前mysql版本:SELECT VERSION();结果为:5.5.40。在复习mysql外键约

Vue项目中Element UI组件未注册的问题原因及解决方法

《Vue项目中ElementUI组件未注册的问题原因及解决方法》在Vue项目中使用ElementUI组件库时,开发者可能会遇到一些常见问题,例如组件未正确注册导致的警告或错误,本文将详细探讨这些问题... 目录引言一、问题背景1.1 错误信息分析1.2 问题原因二、解决方法2.1 全局引入 Element

Python调用另一个py文件并传递参数常见的方法及其应用场景

《Python调用另一个py文件并传递参数常见的方法及其应用场景》:本文主要介绍在Python中调用另一个py文件并传递参数的几种常见方法,包括使用import语句、exec函数、subproce... 目录前言1. 使用import语句1.1 基本用法1.2 导入特定函数1.3 处理文件路径2. 使用ex