gpt4 book ai didi

c# - 类似于 Mathf.Clamp 函数的东西?

转载 作者:太空宇宙 更新时间:2023-11-03 21:32:18 33 4
gpt4 key购买 nike

我有一个 Vector2 变量,其中 vector.x 和 vector.y 已被限制,因此两者都只允许有 0 到 4 之间的值。显然,这使我在坐标 2 周围有一个二次空间,2 到移动游戏对象。但我想要实现的是有一个圆形空间来移动游戏对象,这意味着我需要它将 vector.x+vector.y 的值限制在 0 到 4 之间的总值,但我不能似乎无法正常工作。我应该使用其他函数来代替 clamp 吗?

这是我目前拥有的:

Vector2 pos = rigidbody2D.transform.position;
pos.x = Mathf.Clamp (pos.x, 19.5f, 24);
pos.y = Mathf.Clamp (pos.y, 3.3f, 6);
rigidbody2D.transform.position = pos;

我怎样才能给它们一个总的最小值和最大值,而不是单独夹紧每个轴?

最佳答案

向量有一个类似的函数:Vector2.ClampMagnitudeVector3.ClampMagnitude

您只能指定最大长度,因此您必须自己处理最小长度。最小值的问题在于,如果向量的长度为 0,函数将不知道要做什么。向量应该指向哪个方向才能达到最小长度?

将输入限制在一个圆圈内

如果只想将移动限制在一个圆圈内,则不需要最小值。而是将中心定义为 (2,2) 并将移动限制在 2 的半径范围内。

Vector2 center = new Vector2(2f, 2f);
Vector2 moveBy = new Vector(4f, 7f); // set this to whatever your input is

moveBy = Vector2.ClampMagnitude(moveBy, 2f);

Vector2 newPosition = center + moveBy;

newPosition 将位于以 (2,2)

为中心的半径为 2 的圆内

将给定的位置限制在一个圆圈内

如果你想将给定的位置夹在一个圆上,你可以稍微修改上面的版本。这就像将物体拴在皮带上,当它离开圆圈时将其拉回。

Vector2 center = new Vector2(2f, 2f);
Vector2 position = new Vector2(6f, 5f); // outside your desired circle

Vector2 offset = position - center;
Vector2.ClampMagnitude(offset, 2f);

position = center + offset;

关于c# - 类似于 Mathf.Clamp 函数的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23618861/

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