
<p id="351R3MUS">UE 5.4在CharacterMovementController中引入了对自定义重力的支持。了解如何利用它并做一些很酷的事情,比如重力拼图,或者创建一个像重力游戏一样的迷你星球。</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2024%2F1103%2Fc5aabf8dp00smcsny003qd200u0003rg00hx0028.png&thumbnail=660x&quality=80&type=jpg"/><br/></p><p id="351R3MUU"><strong>简介</strong></p><p id="351R3MUV">在本教程中,我们将利用UE 5.4的重力覆盖功能,使Player能够在一个小行星上奔跑。</p><p id="351R3MV0">这将为您自己的项目提供任何其他类型的重力操作的良好基础。</p><p id="351R3MV1">注:自定义重力在早期版本的Unreal中并不完全有效。相关代码可能存在,但存在一些问题使其无法使用。</p><p class="f_center"><img src="http://dingyue.ws.126.net/2024/1103/c490c993g00smcsnz00zyd200hs0073g00hs0073.gif"/><br/></p><p id="351R3MV3"><strong>创建项目</strong></p><p id="351R3MV4">对于此项目,我们将扩展第三人称蓝图项目。本教程不需要初学者内容包,因此我跳过了它,但欢迎您将其包含在内。</p><p id="351R3MV5"><strong>添加重力摄像机处理(C++)</strong></p><p id="351R3MV6">当您在游戏中移动鼠标时,Unreal将获取该鼠标输入并将其转发到Player Controller以用于在Player周围移动摄像机。但是鼠标坐标始终和世界本身保持相关,其Z轴向下。例如,当Player倒置时,这些鼠标输入需要考虑到这一点,否则我们的摄像机控制将颠倒。</p><p id="351R3MV7">为了解决这个问题,我们将添加一些代码来接收此输入,然后将其转换为“局部重力空间”,以便摄像机控制可以保持“相对”。我们通过创建一个名为GravityController的新C++类来实现这个功能,该类扩展了普通的APlayerController类,但增加了对相对重力输入处理的支持。</p><p id="351R3MV8">这是我们在本教程中唯一需要的C++类,其他所有内容都将在蓝图中。让我们通过单击工具 → 创建新的C++类...</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2024%2F1103%2Fb1b78db0j00smcso0003sd200u0008ug00hx0059.jpg&thumbnail=660x&quality=80&type=jpg"/><br/></p><p id="351R3MVA">对于父类,我们现在只需选择“无”,无论如何,我们都将在下一步中将代码复制并粘贴到其中。</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2024%2F1103%2F5ad9448fj00smcso1002cd200u000ieg00hx00az.jpg&thumbnail=660x&quality=80&type=jpg"/><br/></p><p id="351R3MVC">调用新类GravityController,然后创建它。Unreal现在会将项目转换为C++项目,并为我们创建一个默认代码模块。</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2024%2F1103%2Fa251c337j00smcso2002dd200u000ieg00hx00az.jpg&thumbnail=660x&quality=80&type=jpg"/><br/></p><p id="351R3MVE">按“OK”继续。</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2024%2F1103%2F14bd8bb7j00smcso2002ud200u000ifg00hx00az.jpg&thumbnail=660x&quality=80&type=jpg"/><br/></p><p id="351R3MVG">按“No”关闭此对话框。</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2024%2F1103%2Fe86f22eaj00smcso30025d200u0008xg00hx005b.jpg&thumbnail=660x&quality=80&type=jpg"/><br/></p><p id="351R3MVI">现在,我们将关闭Unreal并填充新类。</p><p id="351R3MVJ">转到项目的文件夹并打开Source文件夹。其中应该有一个与您的项目同名的子文件夹,这是您的默认游戏模块。我们的新类应该在那里。</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2024%2F1103%2Fc0j00smcso3005ad200u000a5g00hx0061.jpg&thumbnail=660x&quality=80&type=jpg"/><br/></p><p id="351R3MVL">在诸如Visual Studio甚至只是记事本这样的文本编辑器中打开GravityController.h。删除其中的所有内容并将其替换为以下代码:</p><pre></pre><br/></p><p id="351R3MVM">现在打开GravityController.cpp,删除其中的所有内容并将其替换为以下代码:</p><pre></pre><br/></p><p id="351R3MVN"><strong>编译项目</strong></p><p id="351R3MVO">在此部分,您需要安装Visual Studio。如果您尚未安装,请查看本教程,了解如何执行此操作:设置Visual Studio | Epic开发者社区(https://dev.epicgames.com/documentation/en-us/unreal-engine/setting-up-visual-studio-development-environment-for-cplusplus-projects-in-unreal-engine)。</p><p id="351R3MVP">打开项目的Visual Studio解决方案文件。</p><p id="351R3MVQ">然后按F5键,或按“▷本地的Windows调试器”按钮,编译项目并使用新类运行Unreal编辑器。</p><p id="351R3MVR"><strong>使用新的重力控制器</strong></p><p id="351R3MVS">我们现在已经创建了GravityController类,但我们还需要通知Unreal使用该类,而不是默认的内置类。</p><p id="351R3MVT">进入虚幻编辑器后,打开Content/ThirdPerson/Blueprints/BP_ThirdPersonGameMode蓝图,并修改PlayerControllerClass属性以使用我们的新GravityController类。</p><p id="351R3MVU"><strong>和重力相关的鼠标输入</strong></p><p id="351R3MVV">现在我们需要稍微修复一下鼠标输入。对于左/右Pawn输入,第三人称Character会丢弃控制器控制旋转的Pitch部分,以便输入值垂直于Player的胶囊体,即始终伸向Player。否则,如果摄像机面朝下,播放器会变慢,因为控件旋转也会朝下。而且我们也只需要Yaw部分用于前置/后置输入。</p><p id="351R3N00">但是旋转控制已经旋转了!所以我们不能再丢弃Pitch了。</p><p id="351R3N01">我们的解决方法是,首先将旋转控制从世界变换转换为相对的“局部重力”变换。然后,我们可以像往常一样丢弃Pitch,然后将控制旋转转换回世界变换,然后再将其馈送到Player Pawn。</p><p id="351R3N02">我们在上一步中添加的代码介绍了几个便捷的蓝图函数,即GetGravityRelativeRotation和GetGravityWorldRotation,它们可以帮助我们做到这一点。</p><p id="351R3N03">现在就使用它们吧!打开Content/ThirdPerson/Blueprints/BP_ThirdPersonCharacter(如果您愿意,也可以复制它以创建自己的,请记得修改BP_ThirdPersonGameMode),并将输入处理修改为以下内容:</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2024%2F1103%2Fa147d5b5j00smcso3003vd200u0005ag00it003b.jpg&thumbnail=660x&quality=80&type=jpg"/><br/></p><p id="351R3N05">单击图像以查看它的放大版本,或右键单击选择“在新选项卡中打开图片”。</p><p id="351R3N06">要让Gravity Rotation节点显示三个浮点数,而不是上面屏幕截图中的Rotator,您可以右键单击Rotator Return Value引脚并选择“Split Struct Pin”。</p><p id="351R3N07"><strong>修正动画图表</strong></p><p id="351R3N08">第三人称Character假定X和Y速度是其行走速度。但是,如果角色旋转,则不成立。我们需要它考虑到所有轴的行走速度。</p><p id="351R3N09">打开Content/Characters/Mannequins/Animations/ABP_Manny,在这里我们可以修改地面速度计算以使用整个矢量的长度,而不仅仅是X和Y。我们可以修改注释。</p><p id="351R3N0A">修改前:</p><p id="351R3N0B">修改后:<br/></p><p id="351R3N0C"><strong>操纵重力</strong></p><p id="351R3N0D">现在进入有趣的部分!您现在可以通过其SetGravityDirection蓝图节点任意修改CharacterMovementComponent的重力!</p><p id="351R3N0E"><strong>重力切换器</strong></p><p id="351R3N0F">这就是您拥有一个体积所需的全部内容,当Player与它重叠时,它会改变Player的重力方向。它非常适合将重力倒置,或让Player爬墙。</p><p id="351R3N0G"><strong>行星引力</strong></p><p id="351R3N0H">如果您希望Player的重力每帧都改变,例如,使Player的重力始终与另一个对象(如行星),则可以将类似这样的内容放入PlayerCharacter的Tick函数中。“Target Gravity Actor”是一个变量,它包含您想要让Player行走的目标Actor。</p><p id="351R3N0I"><strong>全文完</strong></p><p id="351R3N0L">太逼真了!</p><p id="351R3N0O">《荒野机器人》概念图和动画制作幕后</p><p id="351R3N0R">他用PS把Blender模型都涂成了脑洞超大的概念图</p>
讯享网

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/205129.html