Доброе время суток. Следующая проблема: нужно перемещать объект между 3 точками
Х1(-1.0, -1.5, 0.5),
Х2(0.0, -1.5, 0.5) и
Х3(1.0, -1.5, 0.5) . И делать это плавно, не просто задавать новую position, а с интерполяцией между двумя точками. Но при использовании Vectror3.Lerp() нужная координата не достигает максимума. Т.е. если мы перемещаем с
Х2 в
Х1, то координата х = -0.9999. Я так понимаю это из-за использования float. Но поэтому не срабатывают условия. Что нужно сделать? Округлять. Но как если используем Vector3.Lerp(), или сам подход в плавном перемещении не верен и мой код - говнокод. Тогда как по другому это осуществить?
using UnityEngine;
using System.Collections;
public class pController : MonoBehaviour {
public float speed;
private Vector3 left;
private Vector3 right;
private bool leftOn = false;
private bool rightOn = false;
private Vector3 target;
// Use this for initialization]
void Start () {
}
// Update is called once per frame
void Update () {
if (transform.position.x == 0.0f) {
left = new Vector3 (-1.0f, -1.5f, 0.5f);
right = new Vector3 (1.0f, -1.5f, 0.5f);
}
if (transform.position.x == -0.1f) {
right = new Vector3 (0.0f, -1.5f, 0.5f);
}
if (transform.position.x == 1.0f) {
left = new Vector3(0.0f, -1.5f, 0.5f);
}
if(Input.GetKeyDown(KeyCode.A) && transform.position.x!=-1.0f && !leftOn && !rightOn){
leftOn = true;
} else if(Input.GetKeyDown(KeyCode.S) && transform.position.x!=1.0f && !rightOn && !leftOn){
rightOn = true;
}
if(leftOn){
target = transform.position;
transform.position = Vector3.Lerp(target, left, Time.deltaTime*speed);
}
if(rightOn){
target = transform.position;
transform.position = Vector3.Lerp(target, right, Time.deltaTime*speed);
}
if ((transform.position.x == 0.0f) || (transform.position.x == -1.0f)) {
leftOn = false;
}
if ((transform.position.x == 0.0f) || (transform.position.x == 1.0f)) {
rightOn = false;
}
}
}