我正在创建一个基于网格的游戏,使用Vector2Ints
来表示网格上的位置。世界需要在x轴和y轴上包裹,这意味着如果世界是100x100个单元大小,那么对于position = new Vector2Int(99, 99)
和displacement = new Vector2Int(1,1)
的实体,我们会得到newPosition = position + displacement
等于Vector2Int(0, 0)
。最明显的方法最初似乎覆盖了Unity中Vector2Int
结构体的set方法行为,因为这样我就可以继续受益于结构体上的所有其他方法,如加法、整数乘法等,同时仍然获得每个操作的“ Package ”功能。这是关键,所以我不必记住不断调用帮助函数。
我认为实现这一点的方法是以某种方式扩展Vector2Int
,这样我就可以设置mapWidth
和mapHeight
,并将set
方法修改为x = xIn % mapWidth
和y = yIn % mapHeight
。
我希望得到一些建议,说明如何在不复制整个Vector2Int结构体的代码(尽管有一些小的修改)的情况下最好地实现上述目标。
1条答案
按热度按时间e4yzc0pl1#
你可以像这样给任何类添加一个扩展方法:
用法:
vecWrapped现在将为5,5。
正是方法参数中的"this Vector2Int"使它扩展了类。
编辑:关于是否可以覆盖Set方法的问题,不是直接的。你可以添加一个名为Set的扩展方法,但是它不能有相同的签名,也就是说,它不能是Set(x,y)。你可以添加一个名为别的方法。
而且,在对向量进行任何操作后,没有办法让它自动"网格化"。
正如aybe所建议的那样,使用"this ref"可以使它更有用,从而消除了对返回值赋值的需要。
用法:
v现在将是5,5。