如何解决在 Unity 中使用 & 引用和使用 * 取消引用
这是 Unity 中的 C 变量引用问题,而不是游戏对象引用问题。
我需要获取 newVar
的地址,如 &newVar
。
这在 Unity 中可能吗?我尝试了很多搜索,但都没有找到答案。
有关于如何在 C 中执行此操作的文档,但我需要在 Unity 中执行此操作。
解决方法
我从未使用过 Archimatix,但查看我在网上看到的手册,看起来这会起作用。在 C# 中,lambda 通过引用捕获变量,因此您可以让参数从 lambda 读取结果以获取最新变量。
public class ParamUpdater: MonoBehaviour {
[SerializeField] AXModel model;
List<AXParameter> params;
List<Func<float>> paramGetters;
// Use this for initialization
void Awake () {
// Establish refernces to AXModel parameters.
Params = new List<AXParameter>();
if (model != null)
{
Params.Add(model.getParameter("Engine.Param0"));
Params.Add(model.getParameter("Engine.Param1"));
// add more params here
}
paramGetters = new List<Func<float>>();
// create default getters
for (int i = 0 ; i < Params.Count ; i++)
{
paramGetters.Add(()=>0f);
}
}
public void ConfigureParamGetter(int index,Func<float> getter)
{
paramGetters[index] = getter;
}
public void Recalculate()
{
for(int i = 0 ; i < Params.Count ; i++)
{
float curVal = paramGetters[i]();
// Maybe a different method would be better?
// online API is very lacking...
Params[i].initiatePARAMETER_Ripple_setFloatValueFromGUIChange(curVal);
}
model.autobuild();
recalculate();
}
}
然后例如在一个存在感兴趣的浮点数的类中,使用返回变量的 ConfigureParamGetter
调用 Func
。如前所述,捕获是通过引用完成的,因此在 ParamUpdater
中调用时它始终是最新的。
public class ImportantClass: MonoBehaviour
{
[SerializeField] ParamUpdater paramUpdater;
float importantFloat;
// Use Start to call after ParamUpdater initializes in Awake
void Start()
{
paramUpdater.ConfigureParamGetter(0,()=>importantFloat);
}
// for example
void Update() { importantFloat = Time.time; }
// called whenever
void DoRecalculate()
{
paramUpdater.Recalculate();
}
}
如果我犯了任何语法错误或任何其他问题,请告诉我,我可以尝试修复它们。
,您需要 Pointers 和 unsafe code 关键字。
C# 中的类已经是引用,因此转换为指针并没有多大用处。 IE a GameObject
已经是一个引用类型,它已经像一个指针一样工作了。
对于其他事物,例如 unmanaged types,您可能会使用不安全的代码和指针。
所以你可以做一些事情,比如char* pc = &c;
还记得使用文件>构建设置...=>“允许不安全的代码” 点击播放器设置 => 代码设置 => 允许“不安全”代码。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。