如何在Unity3D中创建距离计?

3
我正在尝试制作一个距离计。但是我没有得到我想要的结果,所以我上传了一张图片。我想要弯曲的距离,但我得到的是直线的位移量。

enter image description here

这是我的代码:

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class DistanceMeter : MonoBehaviour {

    public GameObject current;
    public GameObject destination;
    private float beginPos;
    private float targetPos;
    private float currPos;
    public Text dist;

    void Start()
    {
        beginPos = current.transform.position.x;
        targetPos = destination.transform.position.x;
    }

    void Update()
    {
        currPos = current.transform.position.x - targetPos;
        int Distance = Mathf.Abs(Mathf.RoundToInt (currPos));
        dist.text = Distance.ToString()+ " meters";
    }
}

我建议在math.stackexchange.com上提出这个问题。 - Bizhan
这个问题似乎有点不完整,您的对象沿着曲线移动还是其他方式,曲线的半径是多少? - Bizhan
是的,物体沿着曲线移动。 - Jamshaid Alam
这只是数学问题:http://www.had2know.com/academics/parabola-segment-arc-length-area.html - user2299169
1个回答

2
您可以累积行驶距离来计算曲线上的行驶距离:
public class DistanceMeter : MonoBehaviour
{
    public GameObject current;
    public GameObject destination;
    private float beginPos;
    private float targetPos;
    private float currPos;
    private float displacement;
    public Text dist;

    void Start()
    {
        beginPos = current.transform.position.x;
        targetPos = destination.transform.position.x;
    }

    void Update()
    {
        float currDelta = current.transform.position.x - currPos;
        currPos = current.transform.position.x;
        displacement += Mathf.Abs(currDelta);
        dist.text = displacement.ToString() + " meters";
    }
}

但是为了找出剩余的距离(或尚未行驶的位移),您至少需要知道曲线的半径:

我假设曲线是圆的一部分

如果曲线是圆的一半,则位移为半径×π

如果角度已知,则位移为半径×角度(弧度)

如果角度未知但半径和距离已知,则位移为2×半径×arcsin(距离/ 2×半径)

enter image description here


好的,谢谢你的回答,我明白了。但是如果有像波浪或道路弯曲之类的不规则曲线怎么办? - Jamshaid Alam
在这种情况下,你需要进行近似计算。或者你可以利用像样条曲线这样的库来沿着路径移动你的对象。这些方法中的值指的是路径上的位移。只需在谷歌上搜索Unity样条路径即可。 - Bizhan
实际上我应该在问题上写下,对于这个我很抱歉错过了。我正在使用样条来移动物体,一个Hermite样条控制器。 - Jamshaid Alam
我自己没有使用样条曲线工作过,但如果您提出另一个问题并完整描述情况,我相信您一定会得到答案。 - Bizhan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接