第二十九章 Unity关节Joint

news2024/11/15 9:04:54

关节组件将刚体连接到另一个刚体或空间中的固定点。关节施加使刚体移动的力,而关节限制功能可以限制该移动。Unity 提供的以下关节可以对刚体组件施加不同的力和限制,从而使这些刚体具有不同的运动:

Hinge Joint铰链关节:使两个刚体像被连接在一个铰链上那样运动。用于模拟门和手指关节。

Fixed Joint固定关节:将两个刚体束缚在一起, 相对位置保持不变。

Spring Joint弹簧关节:将两个刚体连接在一起,使其像连接着弹簧那样运动。

Character Joint角色关节:模拟球窝关节,例如臀部或肩膀。

Configurable Joint可配置关节:模拟任何骨骼关节,例如布娃娃中的关节。

接下来创建一个新的场景“SampleScene4.unity”,然后创建一个球体Sphere

接下来,我们为Sphere添加一个“Hinge Joint”类型的关节。在导航菜单栏中选择“Component”->“Physics”,然后从中选择“Hinge Joint”组件。添加该组件前必须先添加碰撞体和刚体两个组件。我们创建Sphere的时候自动为其添加碰撞体,然后添加“Hinge Joint”组件的时候,Unity自动为我们添加刚体组件。为了不让重力影响Sphere,我们取消了刚体组件的“Use Gravity”属性。然后,我们点击Sphere游戏对象,查看其Inspector检视视图:

在组件“Hinge Joint”中,我们能够看到“Connected Body”(连接刚体),“Anchor”(锚点)和“Axis”(轴向)三个属性。其中锚点和轴向都是游戏物体的局部坐标系,而“连接刚体”则需要我们添加另一个附带刚体的游戏对象。如下所示:

我们在Sphere的正上方添加了一个Cube,该Cube添加了刚体组件。为了不让重力影响Cube,我们取消了刚体组件的“Use Gravity”属性。如下所示:

接下来,我们点击选中Sphere游戏对象,然后从Hierarchy层次面板中拖动Cube到Sphere游戏对象的“Hinge Joint”组件下的“Connected Body”后面的输入框中,如下所示:

接下来我们在给Sphere施加一个X轴方向的力,如下所示:

然后,我们来Play运行整个工程,

运行的效果可以看到了,当黄球Sphere向右移动的时候,红色Cube被牵引着一起移动。仿佛两者之间有一条“连接线”似的。

使用“Hinge Joint”铰链关节比较经典的一个案例就是门的打开和关闭的效果。

首先,我们创建一个新的场景“SampleScene5.unity”,然后我们添加一个平面Plane作为地面,然后添加一个Cube,让其变成一个“门轴”,然后再添加一个Cube(1),让其变成一个“门扇”。门轴和门扇都添加刚体,最后给门扇添加一个“Hinge Joint”铰链关节。

首先添加一个门轴Cube,并且添加刚体组件,如下所示:

然后添加门扇Cube(1),也添加刚体组件,如下所示:

 

接下来,我们给门扇Cube(1) 添加“Hinge Joint”组件。我们现在要做的就是让黄色的“门扇”能够围绕紫色的“门轴”转动,从而产生开门的效果。也就是说,我们给门扇一个力的时候,门扇需要围绕门轴转动,门轴则固定不动。因此,对于门轴而言,它的刚体组件需要勾选“Is Kinematic”属性(不能受刚体控制而移动或旋转)。如下所示:

然后我们还需要给门扇的刚体组件一个阻力,不能让门扇遇到碰撞后,不停的旋转,如下:

接下来就是门扇的“Hinge Joint”铰链关节属性,如下所示:

首先,我们需要将门轴拖动到“Connected Body”位置,然后修改Anchor锚点和Axis轴向两个参数。要控制门的旋转主要改变铰链关节组件的Anchor和Axis两个属性。请注意,游戏物体门扇是围绕锚点沿轴向方向移动或旋转的。因此,我们的锚点应该门扇靠近门轴的边缘位置,而轴向的话应该是Y轴垂直方向。点击“Edit Angular Limits”如下所示:

 

上图显示了我们的锚点就位于门轴位置,且轴向就是Y轴向上。那么,当我们给门一个力的时候,门就会围绕门轴移动旋转了。这里我们添加一个胶囊体Capsule游戏对象,

然后添加刚体组件,并勾选“Is Kinematic”属性,

接下来,我们创建“MoveScript.cs”脚本,使用代码来控制胶囊体Capsule移动,代码如下:

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

public class MoveScript : MonoBehaviour
{
    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.W)) transform.Translate(transform.forward);
    }
}

接下来,我们将脚本附加Capsule胶囊体上,然后Play运行整个工程,如下所示:

当我们移动绿色的胶囊体向前移动的时候,它会碰撞到门,门会向前移动,但是由于铰链关节的影响,它只能沿着门轴旋转,也就是开门的效果了。

本课程涉及的内容已经共享到百度网盘:https://pan.baidu.com/s/1e1jClK3MnN66GlxBmqoJWA?pwd=b2id

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/487895.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android 11 WebView无法加载libwebviewchromium.so

概述 Android WebView 是 Google 提供的一个预安装系统组件,用以支持 Android 应用显示网页内容。 如果您希望在客户端应用中提供 Web 应用(或只是网页),则可以使用 WebView 执行该操作。WebView 类是 Android 的 View 类的扩展&a…

凌恩生物美文分享|HGTree v2.0:水平基因转移数据库

水平基因转移(HGT)是指遗传物在物种间从一个相邻生物体到另一个生物体横向传递,是原核生物遗传变异的重要过程。HGT是负责塑造原核生物基因组和在自然选择中生存的驱动力之一,对原核生物的进化有很大贡献,但它会使物种进化史复杂化&#xff0…

观景台售票情况数据分析【Python】

任务1:数据预处理 表格数据资源如下百度网盘👇 链接:https://pan.baidu.com/s/1Ry8emM-daxoegF1di4FRyw 提取码:jimb author:用户名rating:消费后打的分time:消费时间year:消费年份…

小米强制淘汰老破小,苹果华为带了好头

了解电脑手机处理器参数的朋友应该对 x86 x64 ARM 等字样不陌生,它们代表着不同的平台架构指令集。 对普通用户来说只需要知道,x86 是32位、x64 (又称x86_64、AMD64)是64位。 手机上则是以 ARMv7、v8 版本号来作为32、64位分界。…

3 ROS2服务通讯基础

ROS2服务通讯基础 3.1 服务通讯介绍3.2 ROS2服务通讯的基本流程3.2.1 创建ROS2服务通讯功能包的基本流程3.2.2 创建ROS2服务通讯功能包示例 3.3 使用C/C实现ROS2服务通讯3.3.1 创建C/C服务通讯服务端功能包并编写节点文件3.3.2 配置C/C服务通讯服务端功能包3.3.3 编译并运行C/C…

符号三角形-计算机算法设计与分析【1600+字解析 dfs全排列 列举情况】【题意分析】【算法分析】【思路是怎么来的】【过程是什么】

符号三角形 题意分析思路过程分析算法分析 下图是由14个“”和14个“-”组成的符号三角形。2个同号下面都是“”,2个异号下面都是“-”。 在一般情况下,符号三角形的第一行有n个符号。符号三角形问题要求对于给定的n,计算有多少个不同的符号…

JMeter进阶——详解Java请求关于事务的操作 (附源码)

Jmeter事务操作 前面写过一篇文章,介绍Jmeter如何来调用java请求的,可以参考文章 详解JMeter Java请求的设计方法 但这篇文章中有一个问题,在方法public SampleResult runTest(JavaSamplerContext arg0) 中只对一个类的一个api 进行调用&am…

LeetCode 2106. 摘水果

【LetMeFly】2106.摘水果 力扣题目链接:https://leetcode.cn/problems/maximum-fruits-harvested-after-at-most-k-steps/ 在一个无限的 x 坐标轴上,有许多水果分布在其中某些位置。给你一个二维整数数组 fruits ,其中 fruits[i] [positio…

Java Test: Specification and Structure Testing(line, branch, path coverage)

这篇文章梳理一下Java软件测试中的Secification test和Structure test。 Specification Test 规范测试(specification test):又称黑盒测试(black-box testing)或需求驱动测试(requirements-driven testin…

B树(B-tree、B-树)理论详解

文章目录 基本概念n阶B树的性质(n>2)B树的搜索B树元素的添加上溢出解决 删除删除叶子节点删除非叶子节点删除——导致下溢出删除——解决下溢出方法一删除——解决下溢出方法二 MongoDB 基本概念 B树是为磁盘或其他直接存取的辅助存储设备而设计的一…

Gitlab on k8s最佳实践

文章目录 gitlab on k8sGitLab部署helm 安装 postgresqlhelm 安装 redis 集群gitlab manifest 部署gitlab如何上传项目?gitlab监控metricsgitlab runner helm 部署helm部署问题k8s中gitlab exector架构图what is Gitlab Runner Helper?gitlab如何连接上k8s&#xf…

【Windows】关闭Windows Update自动更新

目录 一 服务中关闭Win10自动更新及关联服务 二 注册表中关闭Win10自动更新 三 组策略中关闭Win10自动更新 四 计划任务中关闭Win10自动更新 电脑系统盘不够用了,为此准备关闭Windows Update自动更新,以节省空间。为保证关闭之后不死灰复燃&#xff…

Ajax入门

在B/S架构中,浏览器端发送请求的传统方式如下: 1.直接在浏览器地址栏上输入url 2.超链接 3.from表单 4.在JavaScript代码中发送请求 1)window.open(url) 2)document.location.href url 3)window.location.href url ……

优思学院|精益生产在制药行业的应用情况如何?

精益生产作为一项优化生产过程、提高效率的方法论,精益生产在制药行业得到了广泛应用。其核心理念是通过消除浪费,不断改进生产流程,实现资源的最大化利用和生产成本的最小化,从而提高企业的竞争力和市场占有率。 在制药行业&…

Java语言----LinkedList 和 链表的实现

目录 一.链表概念 二.链表的分类 三.无头单向非循环链表的实现 3.1创建简单链表 3.2 链表基本方法实现 3.3四大基本功能 3.3.1.增加元素结点 3.3.2.查找元素结点 3.3.3.删除元素结点 3.3.4.结点信息修改 四.LinkedList是什么? 五.LinkedList使用方法 总结 …

蓝牙耳机哪款性价比高?2023蓝牙耳机性价比排行

随着蓝牙耳机的使用愈发频繁,蓝牙耳机产品也越来越多,蓝牙耳机的功能、价格、外观设计等都不尽相同。接下来,我来给大家推荐几款性价比高的蓝牙耳机,感兴趣的朋友一起来看看吧。 一、南卡小音舱Lite2蓝牙耳机 参考价&#xff1a…

unity,如何让当前物体获取鼠标位置,转向鼠标在屏幕中的位置?

介绍 unity,如何让当前物体获取鼠标位置,转向鼠标在屏幕中的位置? 方法 void Update() {// 获取鼠标在屏幕上的位置Vector3 mousePos Input.mousePosition;// 将鼠标在屏幕上的位置转换为世界空间中的位置Vector3 worldPos Camera.main.S…

C++11多线程join()和detach()的理解

简介 每一个程序至少拥有一个线程,那就是执行main()函数的主线程,而多线程则是出现两个或两个以上的线程并行运行,即主线程和子线程在同一时间段同时运行。而在这个过程中会出现几种情况: 主线程先运行结束子线程先运行结束主子…

NLP实战:基于Pytorch的文本分类入门实战

目录 一、前期准备 1.环境准备 2.加载数据 二、代码实战 1.构建词典 2.生成数据批次和迭代器 3. 定义模型 4. 定义实例 5.定义训练函数与评估函数 6.拆分数据集并运行模型 三、使用测试数据集评估模型 四、总结 这是一个使用PyTorch实现的简单文本分类实战案例。在…

MySQL_1 数据库的基本操作

目录 一、拾枝杂谈 1.cmd验证MySQL服务 : 2.cmd连接MySQL服务 : 3.MySQL服务 : 二、数据库介绍 1.定义 : 2.SQL语句分类 : 三、数据库操作 1.数据库的创建 : 1 基本语法 2 演示 2.数据库的删除 : 1 基本语法 2 演示 3. 数据库的查询 : 1 基本语法 2 演示 4.数据库的…