C# 为什么可以';t我使用“;Player.transform.position.y=maxY“;在我的更新功能中?

C# 为什么可以';t我使用“;Player.transform.position.y=maxY“;在我的更新功能中?,c#,unity3d,C#,Unity3d,如果玩家想走得更高,我希望玩家的pos等于maxY。但是代码是无效的,但是在if语句中我可以这么说吗 我用矢量2试过了,但不起作用,因为“player.transform.position.y是一个float” 我希望玩家不能超过maxY。 或者,如果你们有更好的办法来制作一个不可见的边框,请告诉我。因为位置是一个向量3,它是一个结构,它是一种值类型,因此按值传递 您不能对[base].[any\u struct].[component\u of\u struct]进行更改,因为在[any\u

如果玩家想走得更高,我希望玩家的pos等于maxY。但是代码是无效的,但是在if语句中我可以这么说吗

我用矢量2试过了,但不起作用,因为“player.transform.position.y是一个float”

我希望玩家不能超过
maxY

或者,如果你们有更好的办法来制作一个不可见的边框,请告诉我。

因为
位置
是一个
向量3
,它是一个
结构
,它是一种值类型,因此按值传递

您不能对
[base].[any\u struct].[component\u of\u struct]
进行更改,因为在
[any\u struct]
之后生成的结构是分配给
[base]
的结构的副本。二是分离对象。除非指定新的
Vector3
替换原件,否则更改副本的组件将不会反映回原件


在这种情况下,进行如下更改:

var position = Player.transform.position;
position.y = maxY;
Player.transform.position = position;

您可以使用扩展方法进一步简化此过程:

public static class Vector3Extensions {
    public static Vector3 WithY(this Vector3 vector, float y) {
        vector.y = y;
        return vector;
    }
}
然后它变成:

Player.transform.position = Player.transform.position.WithY(maxY);

我就是这么想的,谢谢你们;)

void Update()
{
if(Player.transform.position.y>=maxY)
{
//启动例行程序(“DontFlySoHigh”);
Player.transform.position=新矢量2(Player.transform.position.x,maxY);
}
if(Player.transform.position.x=maxXright)
{
Player.transform.position=新矢量2(maxXright,Player.transform.position.y);
}

它在控制台中告诉您为什么不能执行
position.y=maxY
。对于
transform.position
,您可以指定整个向量3,但不能指定单个值。对于
transform.position
您可以使用
Mathf.Clamp
来将左/右限制在一次操作中,而不是两次IFs。虽然这可能从技术上解决问题中的具体问题,但如果包括如何/为什么解决问题,这个答案对于未来的访问者来说会更好。
Player.transform.position = Player.transform.position.WithY(maxY);
    void Update()
{
    if (Player.transform.position.y >= maxY)
    {
        //StartCoroutine("DontFlySoHigh");
        Player.transform.position = new Vector2(Player.transform.position.x, maxY);
    }
    if (Player.transform.position.x <= maxXleft)
    {
        Player.transform.position = new Vector2(maxXleft, Player.transform.position.y);
    }
    if (Player.transform.position.x >= maxXright)
    {
        Player.transform.position = new Vector2(maxXright, Player.transform.position.y);

    }