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

Unity中Rigidbody 刚体组件和Rigidbody类是什么?

Rigidbody 刚体组件

Rigidbody 是 Unity 中的一个组件,它可以让你的游戏对象像真实世界中的物体一样移动和碰撞。想象一下,你有一个小球,你希望它像真实世界中的球一样滚动、弹跳和碰撞,那么你就可以给这个小球添加一个 Rigidbody 组件。

为什么要用 Rigidbody?

当你给一个游戏对象添加 Rigidbody 组件后,Unity 的物理引擎就会接管这个对象的运动。即使你不写任何代码,这个对象也会受到重力的影响,向下掉落,并且当它碰到其他物体时会发生碰撞。

比如,你有一个小球和一个地板,如果你给小球添加了 Rigidbody 组件,小球就会掉到地板上,并且会弹起来。

如何控制 Rigidbody?

Rigidbody 还提供了一个编程接口(API),让你可以通过代码来控制对象的运动。比如,你可以通过施加力来让小球滚动,或者通过施加扭矩来让它旋转。

举个例子,如果你想让一辆汽车在游戏中移动,你可以通过编程来模拟车轮施加的力。有了这些信息,Unity 的物理引擎就可以处理汽车的其他运动,比如加速和碰撞。

什么时候使用 FixedUpdate?

在编写代码时,建议在 FixedUpdate 函数中应用力和更改 Rigidbody 的设置,而不是在 Update 函数中进行。这是因为物理更新是以固定的时间步长进行的,与帧更新不一致。FixedUpdate 在每次物理更新之前立即调用,因此在那里进行的任何更改都会直接处理。

常见问题:为什么物理看起来像慢动作?

初学者在使用 Rigidbody 时常见的一个问题是游戏物理看起来像是在“慢动作”中运行。这实际上是由于模型的比例问题。默认的重力设置假设一个世界单位对应一米的距离。在非物理游戏中,如果你的模型都是 100 个单位长,这不会有太大影响,但在使用物理时,它们将被视为非常大的对象。如果使用大比例的对象,它们会显得下落非常缓慢——物理引擎认为它们是非常大的物体在非常大的距离上落下。因此,请确保你的对象与现实生活中的比例大致相同(例如,一辆车大约应该是 4 个单位 = 4 米)。

 

关于这个组件对应的Rigibody类 

Rigidbody 类 的属性

  • angularDrag: 对象的角阻力。

  • angularVelocity: 刚体的角速度矢量,以每秒弧度为单位。

  • centerOfMass: 相对于变换原点的质心。

  • collisionDetectionMode: 刚体的碰撞检测模式。

  • constraints: 控制模拟此刚体时允许的自由度。

  • detectCollisions: 是否启用碰撞检测(默认情况下始终启用)。

  • drag: 对象的阻力。

  • freezeRotation: 控制物理是否会更改对象的旋转。

  • inertiaTensor: 此刚体的惯性张量,定义为在刚体质心位置和旋转的参考系中的对角矩阵。

  • inertiaTensorRotation: 惯性张量的旋转。

  • interpolation: 插值允许你平滑物理在固定帧率下运行的效果。

  • isKinematic: 控制物理是否影响刚体。

  • mass: 刚体的质量。

  • maxAngularVelocity: 刚体的最大角速度,以每秒弧度为单位(默认值为 7),范围为 {0, 无穷大}。

  • maxDepenetrationVelocity: 刚体在脱离穿透状态时的最大速度。

  • position: 刚体的位置。

  • rotation: 刚体的旋转。

  • sleepThreshold: 质量归一化的能量阈值,低于此阈值对象将进入睡眠状态。

  • solverIterations: 确定刚体关节和碰撞接触的解析精度。覆盖 Physics.defaultSolverIterations。必须为正数。

  • solverVelocityIterations: 影响刚体关节和碰撞接触的解析精度。覆盖 Physics.defaultSolverVelocityIterations。必须为正数。

  • useGravity: 控制重力是否影响此刚体。

  • velocity: 刚体的速度矢量。它表示刚体位置的变化率。

  • worldCenterOfMass: 刚体在世界空间中的质心(只读)。

Rigidbody类  的公共方法

  • AddExplosionForce: 对刚体施加一个模拟爆炸效果的力。

  • AddForce: 对刚体施加一个力。

  • AddForceAtPosition: 在指定位置施加力。这将同时施加扭矩和力。

  • AddRelativeForce: 相对于刚体的坐标系施加力。

  • AddRelativeTorque: 相对于刚体的坐标系施加扭矩。

  • AddTorque: 对刚体施加扭矩。

  • ClosestPointOnBounds: 附加碰撞体的包围盒上最接近的点。

  • GetPointVelocity: 刚体在世界空间中某点的速度。

  • GetRelativePointVelocity: 相对于刚体在某点的速度。

  • IsSleeping: 刚体是否处于睡眠状态?

  • MovePosition: 将运动学刚体移动到指定位置。

  • MoveRotation: 将刚体旋转到指定旋转。

  • ResetCenterOfMass: 重置刚体的质心。

  • ResetInertiaTensor: 重置惯性张量的值和旋转。

  • SetDensity: 基于附加的碰撞体假设恒定密度来设置质量。

  • Sleep: 强制刚体至少睡眠一帧。

  • SweepTest: 测试刚体在场景中移动时是否会与任何物体发生碰撞。

  • SweepTestAll: 类似于 SweepTest,但返回所有碰撞点。

  • WakeUp: 强制刚体唤醒。

消息

  • OnCollisionEnter: 当此碰撞体/刚体开始接触另一个刚体/碰撞体时调用。

  • OnCollisionExit: 当此碰撞体/刚体停止接触另一个刚体/碰撞体时调用。

  • OnCollisionStay: 对于每个接触的碰撞体/刚体,每帧调用一次。

继承成员

  • gameObject: 附加此组件的游戏对象。组件总是附加到游戏对象上。

  • tag: 此游戏对象的标签。

  • transform: 附加到此游戏对象的变换组件。

  • hideFlags: 对象是否应该隐藏,随场景保存或可由用户修改?

  • name: 对象的名称。

公共方法

  • BroadcastMessage: 在此游戏对象或其任何子对象上的每个 MonoBehaviour 上调用名为 methodName 的方法。

  • CompareTag: 检查游戏对象的标签是否与定义的标签匹配。

  • GetComponent: 获取附加到同一游戏对象上的指定类型的组件引用。

  • GetComponentInChildren: 获取附加到同一游戏对象或其子对象上的指定类型的组件引用。

  • GetComponentInParent: 获取附加到同一游戏对象或其父对象上的指定类型的组件引用。

  • GetComponents: 获取附加到同一游戏对象上的所有指定类型的组件引用。

  • GetComponentsInChildren: 获取附加到同一游戏对象及其子对象上的所有指定类型的组件引用。

  • GetComponentsInParent: 获取附加到同一游戏对象及其父对象上的所有指定类型的组件引用。

  • SendMessage: 在此游戏对象上的每个 MonoBehaviour 上调用名为 methodName 的方法。

  • SendMessageUpwards: 在此游戏对象及其所有祖先上的每个 MonoBehaviour 上调用名为 methodName 的方法。

  • TryGetComponent: 获取指定类型的组件(如果存在)。

  • GetInstanceID: 获取对象的实例 ID。

  • ToString: 返回对象的名称。

静态方法

  • Destroy: 移除游戏对象、组件或资源。

  • DestroyImmediate: 立即销毁对象。强烈建议使用 Destroy 代替。

  • DontDestroyOnLoad: 在加载新场景时不销毁目标对象。

  • FindAnyObjectByType: 检索任何活动加载的指定类型的对象。

  • FindFirstObjectByType: 检索第一个活动加载的指定类型的对象。

  • FindObjectOfType: 返回第一个活动加载的指定类型的对象。

  • FindObjectsByType: 检索所有加载的指定类型的对象列表。

  • FindObjectsOfType: 获取所有加载的指定类型的对象列表。

  • Instantiate: 克隆对象并返回克隆体。

运算符

  • bool: 对象是否存在?

  • operator !=: 比较两个对象是否引用不同的对象。

  • operator ==: 比较两个对象引用是否引用同一个对象。

重点讲一下添加力AddForce()函数:

AddForce: 对刚体施加一个力

AddForce 是 Unity 中 Rigidbody 组件的一个方法,用于对刚体施加一个力。这个力可以是持续的,也可以是瞬间的,取决于你使用的方法和参数。

基本语法

public void AddForce(Vector3 force, ForceMode mode = ForceMode.Force);
  • force: 这是一个 Vector3 类型的参数,表示施加的力的方向和大小。Vector3 有三个分量:xy 和 z,分别表示力在三个轴上的分量。

  • mode: 这是一个可选参数,表示施加力的模式。默认情况下是 ForceMode.Force

ForceMode 参数

ForceMode 是一个枚举类型,有四种模式:

  1. ForceMode.Force: 持续施加力,考虑质量。

  2. ForceMode.Acceleration: 持续施加加速度,忽略质量。

  3. ForceMode.Impulse: 瞬间施加冲量,考虑质量。

  4. ForceMode.VelocityChange: 瞬间改变速度,忽略质量。

示例

假设你有一个小球,你想让它向前移动。你可以使用 AddForce 方法来实现这一点。

using UnityEngine;public class MoveBall : MonoBehaviour
{public Rigidbody rb;void Start(){rb = GetComponent<Rigidbody>();}void FixedUpdate(){// 施加一个向前的力rb.AddForce(Vector3.forward * 10, ForceMode.Force);}
}

在这个例子中:

  • Vector3.forward 表示向前的方向。

  • 10 是力的大小。

  • ForceMode.Force 表示这是一个持续的力,考虑质量。

详细解释
  1. ForceMode.Force:

    • 解释: 当你使用 ForceMode.Force 时,力会持续作用在刚体上,直到你停止施加力。力的效果会根据刚体的质量进行缩放。质量越大,施加相同力的情况下,刚体的加速度越小。

    • 示例: 如果你想模拟一个物体受到持续推力的效果,比如汽车引擎的推力,你可以使用 ForceMode.Force

  2. ForceMode.Acceleration:

    • 解释: 当你使用 ForceMode.Acceleration 时,施加的力不会考虑刚体的质量。这意味着无论刚体的质量是多少,施加的力都会产生相同的加速度。

    • 示例: 如果你想模拟一个物体受到恒定加速度的效果,而不考虑其质量,比如重力加速度,你可以使用 ForceMode.Acceleration

  3. ForceMode.Impulse:

    • 解释: 当你使用 ForceMode.Impulse 时,施加的力会在瞬间作用在刚体上,产生一个瞬间的冲量。冲量的效果会根据刚体的质量进行缩放。质量越大,施加相同冲量的情况下,刚体的速度变化越小。

    • 示例: 如果你想模拟一个物体受到瞬间冲击的效果,比如子弹击中物体,你可以使用 ForceMode.Impulse

  4. ForceMode.VelocityChange:

    • 解释: 当你使用 ForceMode.VelocityChange 时,施加的力会在瞬间改变刚体的速度,而不考虑刚体的质量。这意味着无论刚体的质量是多少,施加的力都会产生相同的速度变化。

    • 示例: 如果你想模拟一个物体瞬间获得速度的效果,比如火箭发射时的瞬间加速,你可以使用 ForceMode.VelocityChange

总结
  • ForceMode.Force: 持续施加力,考虑质量。

  • ForceMode.Acceleration: 持续施加加速度,忽略质量。

  • ForceMode.Impulse: 瞬间施加冲量,考虑质量。

  • ForceMode.VelocityChange: 瞬间改变速度,忽略质量。

选择哪种模式取决于你想要模拟的物理效果。例如,如果你想模拟一个物体受到持续推力的效果,可以使用 ForceMode.Force;如果你想模拟一个物体瞬间获得速度的效果,可以使用 ForceMode.VelocityChange

课堂保龄球游戏代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class BaoLQManager : MonoBehaviour
{// 业务逻辑1:把保龄球扔出去//  业务逻辑2:保龄球 走直线把前面的柱子撞倒//业务逻辑3:如果撞倒一个就+一分//业务逻辑4:如果撞到以后-间隔2秒消失//程序逻辑1:把球和被撞柱子存到代码变量里//程序逻辑2:Rigibody类 给球添加一个力-   // 业务逻辑1:把保龄球扔出去//程序逻辑3:Collider类-碰撞检测,如果有人碰到我,我就让变量+1加分public Rigidbody BaoLqRIGI;//获取保龄球的刚体组件public float ForceStrength = 100f;void Start(){}// Update is called once per framevoid Update(){}void FixedUpdate(){if (Input.GetMouseButtonDown(0) || Input.GetKeyDown(KeyCode.Space)){BaoLqRIGI.AddForce(new Vector3(0, 0, 1 * ForceStrength * Time.deltaTime), ForceMode.Impulse);//给保龄球添加一个爆发力}}
}

相关文章:

Unity中Rigidbody 刚体组件和Rigidbody类是什么?

Rigidbody 刚体组件 Rigidbody 是 Unity 中的一个组件&#xff0c;它可以让你的游戏对象像真实世界中的物体一样移动和碰撞。想象一下&#xff0c;你有一个小球&#xff0c;你希望它像真实世界中的球一样滚动、弹跳和碰撞&#xff0c;那么你就可以给这个小球添加一个 Rigidbod…...

MySQL学习笔记(持续更新中)

1、Mysql概述 1.1 数据库相关概念 三个概念&#xff1a;数据库、数据库管理系统、SQL 名称全称简称数据库存储数据的仓库&#xff0c;数据是有组织的进行存储DataBase&#xff08;DB&#xff09;数据库管理系统操纵和管理数据库的大型软件DataBase Mangement System&#xf…...

sqlserver插入数据删除数据

1、插入数据 1.1 直接插入 1.1.1 方式一 insert into test values(001,黎明,1),(002,冯绍峰,1),(003,菲菲,2);1.1.2 方式二 insert into test(ID,Name,Sex) values(004,丽丽,2),(005,凌晨,2),(006,虾米,1);1.2 插入部分行 insert into test(ID,Name) values(007,红)2、删除…...

[51单片机] 简单介绍 (一)

文章目录 1.单片机介绍2.单片机内部三大资源3.单片机最小系统4.STC89C52单片机 1.单片机介绍 兼容Intel的MCS-51体系架构的一系列单片机。 STC89C52&#xff1a;8K FLASH、512字节RAM、32个IO口、3个定时器、1个UART、8个中断源。 单片机简称MCU单片机内部集成了CPU、RAM、RO…...

6个岗位抢1个人,百万年薪抢毕业生?大厂打响AI人才战

前言 “24岁毕业时年薪50万元&#xff0c;到了30岁大概能升到P7(注&#xff1a;职级名称&#xff09;&#xff0c;那时就能年薪百万了。” 从上海交大硕士毕业后&#xff0c;出生于2000年的赵宏在今年入职腾讯&#xff0c;担任AI算法工程师&#xff0c;成为AI风口下第一批就业…...

erlang学习:Linux命令学习3

shell基本输出 创建一个test.sh文件&#xff0c;并开放他的权限&#xff0c;之后向其中编辑以下内容 touch test.sh chmod 777 test.sh vim test.shecho "hello linux"之后运行相应shell程序得到输出 ./test.sh变量 单引号特点&#xff1a; 单引号里的任何字符都…...

力扣41 缺失的第一个正数 Java版本

文章目录 题目描述代码 题目描述 给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除…...

第五篇:Linux进程的相关知识总结(1)

目录 第四章&#xff1a;进程 4.1进程管理 4.1.1进程管理需要的学习目标 4.1.1.1了解进程的相关信息 4.1.1.2僵尸进程的概念和处理方法&#xff1a; 4.1.1.3PID、PPID的概念以及特性&#xff1a; 4.1.1.4进程状态 4.1.2进程管理PS 4.1.2.1静态查看进程 4.1.2.1.1自定义…...

企业级Windows server服务器技术(1)

windows server服务器安装 准备工作&#xff1a; 1.准备安装的镜像 2.安装好虚拟机VMware或者virtual box 3.准备安装的位置&#xff08;选择你的电脑的磁盘上比较空闲的位置&#xff0c;新建一个文件夹并命名&#xff09; 4.开始安装&#xff08;按步骤&#xff09;----…...

【30天玩转python】单元测试与调试

单元测试与调试 在 Python 开发中&#xff0c;编写单元测试和进行调试是保证代码质量、减少错误的重要步骤。单元测试可以帮助我们验证代码功能是否符合预期&#xff0c;调试则可以在代码出现问题时快速定位错误原因。 1. 单元测试简介 单元测试是对程序中最小可测试部分&…...

13.第二阶段x86游戏实战2-动态模块地址

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要…...

【WebLogic】WebLogic 11g 控制台模式下安装记录

WebLogic 11g的安装有三种方式&#xff1a; 1&#xff09;GUI图形化模式&#xff1b; 2&#xff09;控制台模式&#xff1b; 3&#xff09;静默模式&#xff1b; 下面为大家展示下控制台模式下的安装过程记录&#xff0c;整个安装过程大部分都是回车&#xff0c;仅在【接收…...

失踪人口回归(明天开始继续更新学习内容)

从明天开始继续更新个人学习经验及收获&#xff0c;可能会直接从C入门开始&#xff0c;总结一下C在C的基础上增加的新语法。这篇就当作水贴算了&#xff0c;大家别点赞&#xff0c;留点赞给明天的文章&#xff0c;哈哈 我是安姐的修沟..............

AIGC对网络安全的影响

AIGC对网络安全的影响 引言 人工智能生成内容(AIGC)技术的快速发展对网络安全领域产生了深远影响。AIGC不仅在内容创作、媒体生成等方面展现了强大的能力,还可能被恶意使用,带来新的安全威胁。本文将探讨AIGC对网络安全的影响,列举实际案例,并提供相关建议。 AIGC技术…...

golang学习笔记25——golang 实现 MD5加密、RSA加密 和 Base64编码

推荐学习文档 golang应用级os框架&#xff0c;欢迎stargolang应用级os框架使用案例&#xff0c;欢迎star案例&#xff1a;基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识&#xff0c;这里有免费的golang学习笔…...

2024海外电商数据分析之印度篇

在2024年&#xff0c;印度电商市场继续保持着强劲的增长势头&#xff0c;成为全球电商领域中的一个亮点。根据Inc42发布的《2024年上半年印度电商市场报告》&#xff0c;印度电商市场规模已经达到1160亿美元&#xff0c;预计在2023年至2030年间&#xff0c;将以19%的复合年增长…...

JavaWeb纯小白笔记02:Tomcat的使用:发布项目的三种方式、配置虚拟主机、配置用户名和密码

通过Tomcat进行发布项目的目的是为了提供项目的访问能力&#xff1a;Tomcat作为Web服务器&#xff0c;能够处理HTTP请求和响应&#xff0c;将项目的内容提供给用户进行访问和使用。 一.Tomcat发布项目的三种方式&#xff1a; 第一种&#xff1a;直接在Tomcat文件夹里的webapp…...

为什么数据需要 QA 流程

当有人问我做什么工作时&#xff0c;我会说我是一名数据质量保证 (QA) 工程师。他们并不真正理解我的意思。“嗯&#xff0c;我做数据测试&#xff0c;”我试图解释&#xff0c;但常常无济于事。我有一些从事技术和软件开发的朋友&#xff0c;他们不太了解数据测试是什么&#…...

Spring Boot 学习之路 -- 基础认知

前言 最近因为业务需要&#xff0c;被拉去研究后端的项目&#xff0c;代码框架基于 Spring Boot&#xff0c;对我来说完全小白&#xff0c;需要重新学习研究…出于个人习惯&#xff0c;会以 Blog 文章的方式做一些记录&#xff0c;文章内容基本来源于「 Spring Boot 从入门到精…...

JavaScript --json格式字符串和对象的转化

json字符串解析成对象 &#xff1a; var obj JSON.parse(str) 对象转化成字符串&#xff1a;var str1 JSON.stringify(obj1) <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Com…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...