如果玩家想更高,我希望玩家pos等于maxY。但是代码无效,但是在if语句中我可以说出来吗?
我使用Vector 2进行了尝试,但由于“ player.transform.position.y是浮点数”而无法使用
public float maxY;
void Start
{
Player = GameObject.FindGameObjectWithTag("MyPlayer");
}
void Update()
{
if (Player.transform.position.y >= maxY)
{
StartCoroutine("DontFlySoHigh");
Player.transform.position.y = maxY;
}
}
我希望玩家不能超过maxY
。
或者,如果你们有更好的主意做一个隐形边框,那就告诉我。
答案 0 :(得分:4)
因为position
是Vector3
,而struct
是值类型,因此是按值传递。
您无法对[base].[any_struct].[component_of_struct]
进行更改,因为您在[any_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);
答案 1 :(得分:0)
像这样得到它,谢谢;)
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);
}