Unity Hinge Joint铰链组件

71 篇文章 3 订阅

Chinar blog www.chinar.xin

Hinge Joint 铰链


本文提供全流程,中文翻译。

Chinar 的初衷是将一种简单的生活方式带给世人

使有限时间 具备无限可能

Chinar —— 心分享、心创新!

助力快速学习 Unity Hinge Joint 铰链关节的使用

为初学者节省宝贵的时间,避免采坑!

Chinar 教程效果:

在这里插入图片描述



全文高清图片,点击即可放大观看 (很多人竟然不知道)


1

introduce —— 介绍


Hinge Joint 铰链关节,使两个刚体连接起来,让他们像铰链一样运动,通常门,钟摆等事物用到铰链关节

给物体添加Hinge Joint 组件:
举个例子
在这里插入图片描述


2

Property —— 属性


在这里插入图片描述
下面用表格介绍一下各个属性的作用:

属性功能
Connected Body连接的对象,如果没有设置,则连接到世界
Anchor自身摆动的轴的位置。该位置在本地坐标系中定义
Axis绕着某个轴旋转。
Auto Configure Connected Anchor如果启用此选项,则将自动计算 Connected Anchor 位置以匹配 anchor 属性的全局位置。这是默认的,如果禁用此选项,则可以手动配置连接锚点的位置
Connected Anchor手动配置连接对象的锚位置
Use Spring与连接体相比,弹簧使刚体达到特定角度
Spring使对象移动到该位置的力
Damper阻力,该值越高,对象减速越快
Target Position弹簧的目标角度。弹簧朝向以度为单位测量的角度拉动
Use Motor使用电机使物体旋转
Target Velocity对象试图达到的目标速度
Force为了达到速度而施加的力
Free Spin勾选后,电机永远不会用于制动旋转,只能加速。
Use Limits勾选后,铰链的角度将限制在最小值和最大值之内
Min旋转的最小角度。
Max旋转可以达到的最大角度。
Bounciness当物体达到最小或最大停止限制时,物体会反弹多少
Contact Distance在距离极限触点的接触距离内将持续存在以避免抖动
Break Force破坏此关节需要的力。
Break Torque破坏此关节需要的扭矩。
Enable Collision选中时,这将启用与关节连接的物体的碰撞
Enable Preprocessing禁用预处理有助于稳定不可能完成的配置。
Mass Scale质量缩放
Connected Mass Scale连接体的质量缩放

3

Example —— 例子


我们先铰链组件模仿一下门的打开,门绕着门框旋转的效果

首先,我们用2个Cube搭一个简单的门,黑色的是门框,白色的是门板
在这里插入图片描述
然后我们在门板上添加铰链组件,并设置属性
在这里插入图片描述
设置好Y轴后只需要将锚点移动到旋转中心就可以了。
在这里插入图片描述
之后运行Unity,在Scene场景中给门板一个力,使其旋转,最简单的方法就是碰撞

我们使用一个小球给门板施加力
举个例子

在这里插入图片描述
简单的开门效果就实现了。


下面用代码实现一下开门关门效果:

首先加一个控制开门关门的按钮,名字叫OpenBtn
在这里插入图片描述

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

public class OpenTheDoor : MonoBehaviour
{
    private bool isOpen = false;
    private JointMotor joint;//因为不能直接更改游戏对象上的motor属性,所以需要定义一个JointMotor
    private Button button;
    private Text text;
    void Start()
    {
        joint.force = 10;//在开始的时候就定义力的大小,在开关门方法中只需要控制速度就可以了
        button = GameObject.Find("OpenBtn").GetComponent<Button>();
        text = button.transform.Find("Text").GetComponent<Text>();
        button.onClick.AddListener(OpenDoor);
    }

    /// <summary>
    /// 开关门的方法
    /// </summary>
    void OpenDoor()
    {
        if (!isOpen)
        {
            joint.targetVelocity = -30;
            text.text = "关门";
        }
        else
        {
            joint.targetVelocity = 30;
            text.text = "开门";
        }
        gameObject.GetComponent<HingeJoint>().motor = joint;
        isOpen = !isOpen;
    }

}

然后在组件上设置一下限制:
在这里插入图片描述
运行一下看看效果
在这里插入图片描述
以上就是Hinge Joint 铰链组件的简单使用

拥有自己的服务器,无需再找攻略

Chinar 提供一站式《零》基础教程

使有限时间 具备无限可能!

先点击领取 —— 阿里全产品优惠券 (享受最低优惠)


Chinar 免费服务器、建站教程全攻略!( Chinar Blog )


Chinar

END

本博客为非营利性个人原创,除部分有明确署名的作品外,所刊登的所有作品的著作权均为本人所拥有,本人保留所有法定权利。违者必究

对于需要复制、转载、链接和传播博客文章或内容的,请及时和本博主进行联系,留言,Email: ichinar@icloud.com

对于经本博主明确授权和许可使用文章及内容的,使用时请注明文章或内容出处并注明网址

  • 18
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值