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

【Unity3D】利用Hinge Joint 2D组件制作绳索效果

目录

一、动态绳索 (可移动根节点)

二、静态绳索

三、利用Skinning Editor(Unity2022.3.15f1正常使用)

四、注意事项


一、动态绳索 (可移动根节点)

 

动态绳索 DynamicRope空物体
Anchor和whitecircle是相同位置的物体,Anchor是一个没有SpriteRenderer,仅有2D刚体和HingeJoint2D。
1、所有DynamicRope下的物体都有2D刚体,且都为Dynamic类型

为了表现效果,可以将绳索节点whitecircle的物体质量设置为2,ball质量为3,ball重力调为1.5
2、所有DynamicRope下的物体都有HingeJoint2D组件,除了Anchor以外的HingeJoint2D组件均以上一个物体作为连接节点,例如whitecircle身上的会用Anchor的2D刚体作为连接节点,其他以此类推。【注意:Anchor的HingeJoint2D组件的Connect Rigid Body是空的】

3、所有绳索节点都挂载了一个2D碰撞体如下

物体摆放和HingeJoint2D的Anchor锚点以及节点旋转角度限制情况如下图

(蓝色点是锚点,每个物体的锚点均连接到上一个物体底端)
绿色扇形是节点旋转可旋转角度范围,这个范围的设置有点怪的,如果你设置和我一样但结果不同请自行调整。

Anchor物体的节点旋转范围可以不做限制,如果做了限制根节点则无法让绳索360度旋转。

 不勾选Use Limits即不做限制。

运行游戏后,动态绳索只能移动Anchor空物体,去带动整个绳索移动,不能移动其他物体,即使移动DynamicRope物体,也是有问题的。

特别注意:第一个whitecircle节点不要勾选,其他节点需要勾选它,保证锚点自动同步。
如果你制作的是静态绳索,则不会有该问题发生,可以保持勾选。

若勾选了会导致该第一个节点的锚点会随着移动而变化,会不断往下掉。


二、静态绳索

StaticRope挂2D刚体,改为如下图配置

 其子节点的情况和动态绳索一样,挂载2D刚体、HingeJoint2D以及2D碰撞体,区别在于没有Anchor空物体作为节点头部,而是直接以whitecircle作为第一个节点,它连接的2D刚体是StaticRope的2D刚体。

运行游戏,使用了一个脚本对staticBall 2D刚体施加一个爆发力就能看到效果。

staticRopeBall.AddForce(new Vector2(staticForce, 0), ForceMode2D.Impulse);

三、利用Skinning Editor制作骨骼绳索(Unity2022.3.15f1正常使用)

需要导入2D Animation
有部分Unity版本会不支持会发生各种报错,可以更换Unity版本解决如我的版本或搜索其他版本。

 

选中我们要编辑生成骨骼的精灵图片,我的是一张50*50,但内容只有20*50的白色图

双击图片内容,白色部分,会出现一个橙色框

点击创建骨骼,然后在橙色框内可以左击生成骨骼,移动鼠标再次点击后决定骨骼结束点,完成一个骨骼的生成,骨骼是指上面的那些五颜六色的箭头,每一个都是一个骨骼节点。
点击右击可以取消当前操作。
点击Edit Bone后,可选中骨骼节点进行编辑位置和旋转,务必保证角度一致(垂直朝向),最好保证骨骼高度一致。
点击Auto Geometry,调整参数后生成几何体,最终点击Apply保存图片

拖拽图片成为物体,挂载Sprite Skin组件,生成骨骼节点 

进行如下操作把嵌套的骨骼节点拆开,变成不嵌套的子物体。

之后则是与动态绳索或静态绳索一致的创建流程了,组件情况如下:
Anchor和bone_1保持一致的Transform

bone_1(第一个节点)务必保证如下图设置Hinge Joint 2D组件

Anchor不做角度限制,其他节点做角度限制

这个角度限制要可能不同版本会有不同的设置方式,结合自身情况调整吧

四、注意事项

1、关于绳索节点图片,使用的是50*50的白色圆形图片,不要有多余的透明区域,否则会影响绳索表现,例如图片留白很多,绳索节点的形变会很抽象,还有使用长方形图片也有点抽象,尽量选择相同宽高的图片作为节点。

2、上面提到了动态绳索的第一个节点whitecircle物体的Hinge Joint 2D组件不要勾选Auto Configure Connected Anchor,除了这个情况以外都保持默认勾选状态。你可以勾选测试下会发生严重的锚点偏移。

3、骨骼绳索的制作骨骼,若你想拉伸制作完成后的绳索,那么它的碰撞体是不会变化的,所以要手动调整或脚本调整;若你的骨骼节点高度不一样的话,基本上每个节点的碰撞体参数会不一样,调整起来会非常麻烦,所以制作骨骼时要保证高度一样,也有点麻烦。


http://www.kler.cn/a/511122.html

相关文章:

  • 什么是SSL及SSL的工作流程
  • 游戏引擎学习第81天
  • [创业之路-254]:《华为数字化转型之道》-1-华为是一个由客户需求牵引、高度数字化、高度智能化、由无数个闭环流程组成的价值创造、评估、分配系统。
  • Linux提权-02 sudo提权
  • Redis 中 TTL 的基本知识与禁用缓存键的实现策略(Java)
  • 【逆境中绽放:万字回顾2024我在挑战中突破自我】
  • “深入浅出”系列之数通篇:(3)负载均衡
  • 【Linux】进程间通信IPC
  • 1.19学习记录
  • Amazon MSK 开启 Public 访问 SASL 配置的方法
  • 如何将自己本地项目开源到github上?
  • 2.6 聚焦:Word Embedding
  • 【UNION与UNION ALL的区别?】
  • 基于Java的语音陪聊软件——支持聊天私聊-礼物系统-直播系统-缘分匹配-游戏陪玩
  • 用Python实现SVM搭建金融反诈模型(含调试运行)
  • C++的auto_ptr智能指针:从诞生到被弃用的历程
  • 蓝桥杯小白备考指南
  • AI Agent智能体的分类-类型有哪些?
  • MCU、MPU、SOC、ECU、CPU、GPU的区别到底是什么
  • 第17章:Python TDD回顾与总结货币类开发
  • 渗透测试之XEE[外部实体注入]漏洞 原理 攻击手法 xml语言结构 防御手法
  • C语言初阶--函数
  • MCP(Model Context Protocol)模型上下文协议 进阶篇4 - 发展计划
  • FPGA 时钟约束
  • MySQL union和union all
  • 算法随笔_12:最短无序子数组