Unity关节的使用和举例,布娃娃系统

本文详细介绍了Unity中的五种关节,包括铰链关节、固定关节、弹簧关节、角色关节和可配置关节。以铰链关节为例,详细阐述了其属性参数,如Connected Body、Anchor、Axis等,并通过实例演示了如何创建自由转动的门。此外,还讲解了在实际应用中遇到的问题及解决方案,如如何避免“无法修改·····的值,因为它不是变量”的报错。最后,通过布娃娃系统展示了角色关节的应用,增强了游戏的真实感。
摘要由CSDN通过智能技术生成

unity里面关节总共有五种,铰链关节(Hinge Joint),固定关节(Fixed Joint),弹簧关节(Spring Joint),角色关节(Character Joint),可配置关节(Configurable Joint),最后一种这里暂不讨论。有一点需要注意,在使用关节时,物体必须都挂有刚体组件
首先看一下各种关节的属性参数

铰链关节如下:

● Connected Body:需要链接的目标,也就是与主体构成铰链组合的目标刚体。
● Anchor:本体的瞄点,也就是上面的Connected Body在旋转时围绕的中心点。
● Connected Anchor:链接的目标的瞄点,也就是上面的Connected Body的瞄点,是本体在旋转时围绕的中心点。
● Axis:瞄点和目标瞄点的方向,本体和链接目标的旋转方向。
● Auto Configure Connected Anchor:是否自动计算目标瞄点的坐标,也就是如果勾选了该选项,计算机会帮你设置一个Connected Anchor,你也就无法修改它。

● Use Spring:关节组件中是否使用弹簧属性,只有勾选了该选项,下面三个才会生效。
● Spring:弹簧力,表示维持对象移动到一定位置的力。
● Damper:阻尼,指物体所受阻碍的大小,此值越大,对象移动越缓慢。
● Target Position:目标位置,表示旋转到的目标角度。

● Use Motor:是否使用电动机,说白了就是要不要让它一直转下去。只有勾选了该选项,下面三个才会生效。
● Target Velocity:目标速率,对象试图达到的速率,将会以此速度为目标进行加速或减速。
● Force:用于达到目标速率的力。
● Free Spin:规定了受控对象的旋转是否会被破坏,该选项如果为false,则受控对象的速度大于Target Velocity时,马达会被破坏,小于Target Velocity时,会先加速然后保持该速度;该选项若为true,则马达永远不会被破坏。

● UseLimits:规定关节在旋转时是否受限,只有勾选了该选项,下面五个属性才会生效。
● Min:规定了关节旋转时能达到的最小角度,小于它时,该关节会用力来约束。
● Max:规定了关节旋转时能达到的最大角度,大于它时,该关节会用力来约束。
● Bounciness:反弹力,旋转时达到最大或最小角度时可能会反弹,这个值用来控制反弹后的新速度,新速度=当前速度*反弹力,取值只能在0到1之间。(有些版本中没有这一项,用的是MaxBounce 和MinBounce,这里的Bounciness就是两者中的较大值)
● BounceMinVelocity:引起反弹的最小碰撞速度,解释一下,就是在达到上述的最大或最小角度的时候,如果速度低于这个值,就不会引起反弹而直接停下来,如果大于这个值,就会反弹,而反弹后的新速度就是由上面的Bounciness来决定;比如将这个值设为0的话,也就是说在达到Max或Min的那一瞬间如果速度低于零就不会反弹,但是速度的值肯定不会比零小,所以就会一直不停的反弹,看上去就会有轻微抖动,或者由于阻力的原因抖动越来越小,小到最后肉眼看不见,但是内部会一直在计算,就会影响程序的性能或者效率;如果设置的非常非常大,就会出现反弹几下就停了,或者直接就没有反弹。
● ContactDistance:接触距离,用自己的话解释一下,就是容错值,给出一个值当做范围,当小于这个值的时候就算已经到了目标角度或地点,比如说当这个值为5时,如果在旋转过程中离Max或Min只有4度的时候,就算已经到了,再根据前面的Bounciness或BounceMinVelocity来确定是反弹还是停止。
(上述几点在后面的例子中没有涉及到,这里尽量用文字把它描述清楚,也是到处查资料和实践之后用自己的话总结的,相同的值在不同情景中运行可能也会出现不同的情况,如果有描述不对的地方还请指出来)

● Break Force:给出一个力的限制,当大于这个力时关节会断开(断开时会调用OnJointBreak方法),默认为无穷大。
● Break Torque:给出一个力矩的限制,大于时关节会断开,默认为无穷大。
● Enable Collision:是否允许关节所连接的两个物体之间产生碰撞。
● Enable Preprocessing:是否进行预处理。

固定关节属性参数就是上面的第一个和最后四个,主要用来固定两个物体。

弹簧关节属性参数如下:(与前面重复的就不说了)

● Spring:表示弹簧的进度系数,值越高弹性效果越强。
● Damper:阻尼,值越高弹簧受到的阻碍越大,减速效果越明显。
● Min Distance:弹簧两端的最小距离。
● Max Distance:弹簧两端的最大距离。在最大距离和最小距离之间时,弹簧不受弹力,在这之外时会受到弹力。受到弹力后表现出的效果又和前面的Spring有关,例如当Spring值很大时,两物体距离刚刚超过MaxDistance一点点立刻就能看到明显的收拢,而当Spring值很小时,比如说零点几或零点零几,可能超出了上述范围很多还看不到明显的收缩效果。

角色关节属性参数如下:

● Swing Axis:旋转轴,角色对象上某两个部分的摆所围绕的轴。
● Swing 1 Limit:上述旋转轴的限制1,绿色轴表示,设置为30°时,表示被限制在-30°到30°之间。
● Swing 2 Limit:上述旋转轴的限制2,橙色轴表示,设置为30°时,表示被限制在-30°到30°之间。
● Twist Limit Spring:扭轴弹簧限制,为关节指定了弹簧限制。
● Spring:弹簧限制的弹簧系数。
● Damper:弹簧限制的弹簧阻尼。
● Low Twist Limit:扭轴下限,关节扭曲角度不可低于此下限。
● High Twist Limit:扭轴上限,关节扭曲角度不可低于此上限。
● Enable Projection:进行违反物理规律的关节投射,一般情况下为false,在关节被外力强行拆开时可使用。
● Projection Distance:关节投射的距离。
● Projection Angle:关节投射的角度。

下面用举几个例子说明一下用法

首先是一个门的自由转动,用到的是铰链关节。先创建一个圆柱体作为门转动时的依附轴,给圆柱体添加一个铰链关节,再创建一个立方体,调整范围设置成扁平长方体,挪到圆柱体旁边,做成一个门。
设置参数如下
在这里插入图片描述
另外,门轴的xyz的position和rotation都要冻结住、
在这里插入图片描述

也可以使用代码设置,如下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class joint : MonoBehaviour {
   

    private HingeJoint _joint;
    private JointMotor _motor;

	// Use this for initialization
	void Start () {
   

        _joint = GetComponent<HingeJoint>();
        _motor = _joint.motor;

	}
	
	// Update is called once per frame
	void Update () {
   

        if (Input.GetMouseButtonDown(0))
        {
   
            _joint.useMotor = true
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值