虚拟实验室-Unreal 版本

虚拟实验室的Unreal 版本,第一个版本主要是以《探究通电螺线管外部的磁场分布》颗粒为例,设计和开发一个正式版本。


UE-AIAE案例01-修复Bug和知识点总结

<p>[TOC]</p> <table> <thead> <tr> <th>作者</th> <th>QFord</th> </tr> </thead> <tbody> <tr> <td>更新日期</td> <td>2024-6-15</td> </tr> </tbody> </table> <h1>背景</h1> <p>此案例来源于<strong>virtual-lab-unreal</strong>项目</p> <h1>提问1</h1> <p>@UTransformUtils.h @UTransformUtils.cpp 遇到编译错误,请检查下代码,指出错误 如下图所示: <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=2287387cfa0893d1a80eba177d37a2f5&amp;amp;file=file.png" alt="" /></p> <h1>回答1</h1> <p>错误修正 ConvertUnityToUnreal 函数的定义缺少 UUTransformUtils:: 前缀。 ConvertUnityToUnreal 函数的返回值类型应为 FVector,而不是 static FVector。 修正后的代码已经包含在上面的代码块中。</p> <h1>提问2</h1> <p>说明下,为什么要这么修正?我试过了,上述的修正是正确的,代码已经通过编译了。</p> <h1>回答2</h1> <p>修正的原因如下:</p> <ul> <li>缺少类作用域:</li> </ul> <p>在 ConvertUnityToUnreal 函数的定义中,缺少了类作用域 UUTransformUtils::。在C++中,类成员函数的定义需要包含类作用域,以便编译器知道该函数属于哪个类。</p> <ul> <li>返回类型错误:</li> </ul> <p>ConvertUnityToUnreal 函数的返回类型应为 FVector,而不是 static FVector。在函数定义中,static 关键字不应出现在返回类型之前。</p> <p>头文件中的 static 在头文件中声明静态函数时,static 关键字的作用是将该函数的链接属性设为内部链接。这意味着每个包含该头文件的源文件都会有该函数的一个独立副本。这样做的好处是可以避免不同源文件之间的命名冲突。</p> <p>为什么不能在源文件中使用 static 在类成员函数的定义中,不能使用 static 关键字,因为类成员函数的静态属性已经在类声明中指定。再次使用 static 关键字会导致语法错误。</p> <h1>提问3</h1> <p>请对上述修复的Bug进行总结下,特别突出下UE C++编码的相关知识点</p> <h1>回答3</h1> <h3>Bug修复总结</h3> <p>在修复 UUTransformUtils 类的 ConvertUnityToUnreal 方法时,主要涉及以下两个问题:</p> <p>1. 缺少类作用域:</p> <p>在源文件中定义静态成员函数时,必须使用类作用域来指明该函数属于哪个类。否则,编译器无法识别该函数的归属。</p> <p>2. 返回类型错误:</p> <p>在函数定义中,static 关键字不应出现在返回类型之前。静态成员函数的静态属性已经在类声明中指定,定义时不需要再次使用 static 关键字。</p> <h3>修复后的代码</h3> <p>UTransformUtils.cpp</p> <pre><code class="language-cpp">FVector UUTransformUtils::ConvertUnityToUnreal(const FVector&amp;amp; UnityVector)  {     // Unity的(x, y, z) -&amp;gt; Unreal的(x, z, -y)     return FVector(UnityVector.Z, UnityVector.X, UnityVector.Y) \* 100.0f; }</code></pre> <h3>相关知识点</h3> <p>1. 类作用域:</p> <p>在C++中,类成员函数的定义需要包含类作用域,以便编译器知道该函数属于哪个类。例如:</p> <p>   FVector UUTransformUtils::ConvertUnityToUnreal(const FVector&amp; UnityVector)</p> <p>2. 静态成员函数:</p> <p>静态成员函数在类声明中使用 static 关键字,但在定义时不需要再次使用。静态成员函数可以在没有类实例的情况下调用,适用于不依赖于对象状态的工具函数。</p> <p>3. Unreal Engine C++ 编码规范:</p> <ul> <li> <p>头文件和源文件的分离:头文件中声明函数,源文件中定义函数。</p> </li> <li> <p>使用类作用域:在定义类成员函数时,必须使用类作用域。</p> </li> <li>静态成员函数:在类声明中使用 static 关键字,但在定义时不需要再次使用。</li> </ul>

页面列表

ITEM_HTML