gpt4 book ai didi

C#代码注入(inject)?

转载 作者:行者123 更新时间:2023-11-30 17:45:26 25 4
gpt4 key购买 nike

所以我有一堆函数,我在随机区域的所有地方一遍又一遍地使用它们。还有一些 getter 和 setter。

例如像这样的东西:

public GameObject GameObjectCache 
{
get
{
if (gameObjectCache == null)
gameObjectCache = this.gameObject;
return gameObjectCache;
}
}
private GameObject gameObjectCache;

public Transform TransformCache
{
get
{
if (transformCache == null)
transformCache = this.GetComponent<Transform>();
return transformCache;
}
}
private Transform transformCache;

如果您看不出来,这适用于 Unity。

我真正想做的是将这些功能放在其他地方。然后在我的类里面做这样的事情

[TransformCache]

某种单行标记,它会将来自其他地方的函数内联到我的类中。

我知道有一些复杂的方法可以用 Mono.Cecil 来做到这一点,如果有人有关于它的简单教程,我会喜欢这个链接。

但是还有比这更简单的方法吗?我知道 C 和 Objective-C,甚至 CG 代码都有执行此操作的功能。有没有办法在 C# 中轻松地做到这一点?

最佳答案

我不知道这是否对您有帮助,但是如何将您想要的这些常见事物包装到一个包装类中,然后将该类添加到您的其他游戏对象中呢?有点像

public class MyWrapper
{
private GameObject parentGameObj;
public MyWrapper(GameObject srcObj)
{
parentGameObj = srcObj;
}

public GameObject GameObjectCache
{
get
{
if (gameObjectCache == null)
gameObjectCache = parentGameObj.gameObject;
return gameObjectCache;
}
}
private GameObject gameObjectCache;

public Transform TransformCache
{
get
{
if (transformCache == null)
transformCache = parentGameObj.GetComponent<Transform>();
return transformCache;
}
}
private Transform transformCache;
}

然后,在您的类(class)中您将使用它

public class YourOtherClass : GameObject
{
MyWrapper mywrapper;

public Start()
{
// instantiate the wrapper object with the game object as the basis
myWrapper = new MyWrapper(this);

// then you can get the game and transform cache objects via
GameObject cache1 = myWrapper.GameObjectCache;
Transform tcache1 = myWrapper.TransformCache;
}
}

抱歉...在 C++ 中,您可以从多个类派生,这些类本质上可以允许类似的事情。我唯一能想到的另一件事是,如果您的函数通过 GetComponent() 调用使用重复的相似类型,则考虑使用泛型。

关于C#代码注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27596311/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com