gpt4 book ai didi

c# - 我不能在Unity中为Vector3添加扩展方法吗?

转载 作者:行者123 更新时间:2023-12-02 08:44:33 26 4
gpt4 key购买 nike

当我想改变Unity中变换的位置时,我通常这样做:

var x = 10f;
transform.position = new Vector3(x, transform.position.y, transform.position.z);

但我认为这有点乏味。所以我将此扩展方法添加到 Vector3 类中。

public static class Vector3Extensions
{
public static void SetX(this Vector3 pos, float x)
{
pos = new Vector3(x, pos.y, pos.z);
}
....

当我调用它时,没有错误,但实际上值没有改变。是的,我知道会发生这种情况,因为 Vector3 是结构体。我尝试在我的方法中添加 ref 关键字,

    public static void SetX(ref this Vector3 pos, float x)
{
pos = new Vector3(x, pos.y, pos.z);
}

但它不起作用,因为出现“属性或索引器可能无法作为 out 或 ref 参数传递”错误。我想做的就像:

transform.position.SetX(10f);

有什么办法吗?谢谢。

最佳答案

试试这个:

public static class Vector3Extensions
{
public static Vector3 SetX(this Vector3 pos, float x)
{
return new Vector3(x, pos.y, pos.z);
}
}

并像这样使用它:

Vector3 v = new Vector3(1, 2, 3);

v = v.SetX(4);

或者,对于转换,如下所示:

transform.position = transform.position.SetX(4);

编辑:

根据 D. Stanley 的观点,您可以使用以下方法扩展 Transform 类:

public static class TransformExtensions
{
public static void SetXPos(this Transform t, float x)
{
t.position = t.position.SetX(x);
}
}

并这样调用它:

transform.SetXPos(4);

关于c# - 我不能在Unity中为Vector3添加扩展方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60622785/

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