【问题标题】:How to calculate different speed averages based on an angle?如何根据角度计算不同的速度平均值?
【发布时间】:2021-04-09 18:52:50
【问题描述】:

在这里,我正在一个 Unity 项目中制作一个攀爬系统,根据你的速度改变方向。在我的情况下,上升速度为 1,横向速度为 1.5,下降速度为 2。

这就是我现在计算角度的方式:

float angle = (Mathf.Atan2(this.characterController.GetAxisControlValue(CharacterAxisControl.Vertical), this.characterController.GetAxisControlValue(CharacterAxisControl.Horizontal)) * Mathf.Rad2Deg);
        angle %= 360.0f;
        if (angle < 0.0f)
        {
            angle += 360.0f;
        }

GetAxisControl 值返回一个介于 -1 和 1 之间的值。现在我需要找出如何获得点之间的平均速度,如下所示:Example

我正在寻找可以解决这个问题的公式。

谁能帮帮我,非常感谢。

【问题讨论】:

  • 这还不够吗?知道你的transform.localEulerAngles.x 吗?
  • @derHugo 考虑到我实际上并没有旋转对象本身,我无法使用它。

标签: c# unity3d angle


【解决方案1】:

如果你想让它与角度成正比,那很简单:

var speed = (angle % 180) / 180 + 1;

这会给你:

  0 deg   1
 90 deg   1.5
180 deg   2
270 deg   1.5
 45 deg   1.25
150 deg   1.83 // this is your picture example

如果您想要任意速度,您可以使用线性插值。假设您希望速度 Vu 向上,Vs 向侧面行驶,Vd 向下。

var t = (angle % 180) / 90; // we only care about vertical direction
var speed = t < 1 
  ? Vu * (1 - t) + Vs * t         // this is for picking the value in the range 0..90
  : Vs * (2 - t) + Vd * (t - 1);  // this is in range 90..180

【讨论】:

  • 你是最棒的,谢谢,我的数学和代数从来都不是很好。
  • 但是,如果我的值是顶部 2,侧面 5,向下 1.5,该怎么办?
  • 实际上并没有,我稍微更新了代码以适应我的脚本:var t = (angle % 180) / 90; // we only care about vertical direction var speed = t &lt; 1 ? climbingUpSpd * (1 - t) + climbingSideWaysSpd * t // this is for picking the value in the range 0..90 : climbingSideWaysSpd * (2 - t) + climbingDownSpd * (t - 1); 值是(在这种情况下)1 代表向上,5 代表向下,1.5 代表横向,但是结果总是以 0.75、1、1.25 或 1.5 结尾
  • 好吧,我的错,它几乎可以工作。我只是把var t = (angle % 180) / 90; 放在了错误的位置。我目前唯一的问题是下降速度最大为 1.5,而应该是 5。
  • 可能是因为climbingDownSpd * (t - 1) 始终为0。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-09
  • 2012-03-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多