2016-11-05 4 views
3

Я пытаюсь сделать измеритель расстояния. Но я не понимаю, чего хочу. поэтому я загрузил фотографию. Я хочу искривленную дистанцию, но я получаю прямое смещение.Как сделать измеритель расстояния в единстве3d

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"; 
    } 
} 
+0

Я предлагаю задать этот вопрос в math.stackexchange.com – Bijan

+0

вопрос кажется немного неполным, делает ваш объект перемещается вдоль кривой или иначе, что радиус кривой? – Bijan

+0

Да, объект движется вдоль кривой. –

ответ

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

+0

ОК, спасибо за ваш ответ, я это понимаю. но что, если есть нерегулярная кривая, например, волновая или дорожная кривая или что-то в этом роде. –

+0

В этом случае вам нужно приблизиться. или вы можете использовать библиотеки, такие как сплайны и кривые, для перемещения объекта по его пути. значение в этих методах относится к смещению на пути. просто путь единства google – Bijan

+0

На самом деле я должен был написать на вопрос, извините за то, что я его пропустил. Я использую Spline для перемещения объекта. Гермитовый сплайн-контроллер. –

Смежные вопросы