Chinar blog :www.chinar.xin
Hinge Joint 铰链
本文提供全流程,中文翻译。 Chinar 的初衷是将一种简单的生活方式带给世人 使有限时间 具备无限可能
Chinar —— 心分享、心创新!助力快速学习 Unity Hinge Joint 铰链关节的使用为初学者节省宝贵的时间,避免采坑!
Chinar 教程效果:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190630215534892.gif)
文章目录
1 introduce —— 介绍
2Property —— 属性
3 Example —— 例子
全文高清图片,点击即可放大观看 (很多人竟然不知道)
1
introduce —— 介绍
Hinge Joint 铰链关节,使两个刚体连接起来,让他们像铰链一样运动,通常门,钟摆等事物用到铰链关节
给物体添加Hinge Joint 组件: ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190627012310191.gif)
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场景中给门板一个力,使其旋转,最简单的方法就是碰撞
我们使用一个小球给门板施加力 ![举个例子](https://img-blog.csdnimg.cn/20181218105742587.png)
简单的开门效果就实现了。
下面用代码实现一下开门关门效果:
首先加一个控制开门关门的按钮,名字叫OpenBtn ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190702003149875.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoaW5hckNTRE4=,size_16,color_FFFFFF,t_70)
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();
text = button.transform.Find("Text").GetComponent();
button.onClick.AddListener(OpenDoor);
}
///
/// 开关门的方法
///
void OpenDoor()
{
if (!isOpen)
{
joint.targetVelocity = -30;
text.text = "关门";
}
else
{
joint.targetVelocity = 30;
text.text = "开门";
}
gameObject.GetComponent().motor = joint;
isOpen = !isOpen;
}
}
然后在组件上设置一下限制: 运行一下看看效果 以上就是Hinge Joint 铰链组件的简单使用
拥有自己的服务器,无需再找攻略 Chinar 提供一站式《零》基础教程使有限时间 具备无限可能!
先点击领取 —— 阿里全产品优惠券 (享受最低优惠)
Chinar 免费服务器、建站教程全攻略!( Chinar Blog )
END
本博客为非营利性个人原创,除部分有明确署名的作品外,所刊登的所有作品的著作权均为本人所拥有,本人保留所有法定权利。违者必究 对于需要复制、转载、链接和传播博客文章或内容的,请及时和本博主进行联系,留言,Email: [email protected] 对于经本博主明确授权和许可使用文章及内容的,使用时请注明文章或内容出处并注明网址
|