Стало интересно.
Решил на graph.tk прикинуть как еще можно траекторию построить.
Показалось подходящей формула -
y=( -(x-1)^2+1 ) * h y - высота объекта.
x - его положение между стартом и финишем.
h - кривизна параболы
Получилось что-т такое:
Используется javascript
var moving : boolean;
var currentPosition : Transform;
var targetPosition : Vector3;
var height : float;
var distance : float;
var currentDistance : float;
var relativeDistance : float;
function Start () {
currentPosition = gameObject.transform;
targetPosition = gameObject.transform.position;
}
function Update () {
currentDistance = Vector3.Distance( gameObject.transform.position, Vector3(targetPosition.x, 0, targetPosition.z));
if (currentDistance < 0.25){moving = false;}
if (!moving){
if (Input.GetMouseButtonDown(0)) {
var hit: RaycastHit;
var ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, hit)) {
if (hit.rigidbody != null){
targetPosition = hit.point;
distance = Vector3.Distance( gameObject.transform.position, Vector3(targetPosition.x, 0, targetPosition.z));
moving = true;
}
}
}
}
if (moving){
relativeDistance = (currentDistance / distance) * 2;
var tmpY = ( - ( (relativeDistance - 1) * (relativeDistance - 1) ) + 1) * (distance / 6) ; //y=-(x-1)^2+1 - парабола с плюсовыми Y от 0 до +2 по Х
gameObject.transform.position.y = tmpY;
gameObject.transform.LookAt(Vector3(targetPosition.x, gameObject.transform.position.y ,targetPosition.z));
gameObject.transform.Translate(Vector3.forward * Time.deltaTime * 15);
}
}
единственное в чем косяк, на высоких параболах, начинает адово глючить почему то...
а так по горизонтали прямолинейно, по вертикали скорость меняется, имитировать полет ядра - норм.