【发布时间】:2021-02-27 04:48:25
【问题描述】:
我有一个带有公共 Vector3 属性 AimTargetPos 的实例类 Player():
//Player.cs
private Vector3 aimTargetPos;
public Vector3 AimTargetPos => aimTargetPos;
在某些条件下,AimTargetPos 每帧都会更新一个新值。在另一个类中,AimTargetPos 在动态 ExpandoObject() 中按值存储为 payload.aimTargetPos,然后作为参数传递给名为 Enter(dynamic payload) 的函数。
由于Player.AimTargetPos 仍在每帧更新,payload.aimTargetPos 在创建它并传递到 Enter() 的同一帧中只会有正确的 Vector3 值。我需要能够将 aimTargetPos 分配给一个本地 ref 或指针变量,这样我就可以在第一帧之后继续使用来自有效负载的 aimTargetPos。但是,我还没有找到在动态 ExpandoObject 有效负载中存储对 Player.AimTargetPos 的引用的方法。
有一些我不想诉诸的 hacky 解决方案:
- 创建一个新的 Transform() 来保存 Vector3 的位置,因为默认情况下,变换是通过引用传递的。
- 与其在有效载荷 ExpandoObject 中传递引用或指针,不如每帧连续读取
Player.AimTargetPos以获得最新的位置值。这引入了我想要避免的耦合程度。
根据this question 的说法,没有一种单一的方法可以做到这一点,但听起来确实有很多选择。如果我不能在动态对象中保存引用,那么也许我可以存储Player.AimTargetPos 的地址,并在 Enter() 中接收到有效负载后使用该地址创建引用或指针?但似乎这是一种不必要的深奥方法。有没有更简单的方法来实现这一点?
【问题讨论】:
-
为您的 Expando 提供 Player 对象并使用
ExpandoInstance.PlayerInstance.AimTargetPos访问它。否则,另一种 hacky 方法是使用 1 长度数组,Expando.AimTargetPos[0]
标签: c# unity3d pointers dynamic expandoobject