блин, ребят помогите, опять застрял, четвертый час бьюсь а косяка не могу найти до сих пор.
В чем смысл - делаю навигацию камеры с небольшим движением по инерции после смены направления. Но почему-то весь блок где инерция должна по идее происходить - не происходит. Хотя если вставить отладчики, то видно что эти блоки выполняются.

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class CameraNavigation : MonoBehaviour {
public Transform CameraTransform; //основа навигации камеры
public GameObject CameraTarget; //цель камеры
public float Speed, SpeedX, SpeedY, RealSpeedX, RealSpeedY, SpeedXFrom, SpeedYFrom;
public int ScreenWidth, ScreenHeight; // размеры экрана
public bool inInertia; //инерция камеры
List<float> Borders = new List<float>(); //список экранных маркеров
public enum GetBordersInfo {None,Left,Right,Up,Down,UpLeft,UpRight,DownLeft,DownRight}; // присвоение попавшей рамки
public GetBordersInfo BordersInfo, BordersInfoSave;
const float ScreenPercent = 0.05f;
// Use this for initialization
void Start () {
ScreenWidth = Screen.width;
ScreenHeight = Screen.height;
CameraTransform = transform;
Speed = 0.5f;
inInertia = false;
Borders.Add ((float)ScreenWidth*ScreenPercent); // 0 - слева
Borders.Add ((float)ScreenWidth*(1-ScreenPercent)); // 1 - справа
Borders.Add ((float)ScreenHeight*ScreenPercent); // 2 - сверху
Borders.Add ((float)ScreenHeight*(1-ScreenPercent)); // 3 - снизу
}
// Update is called once per frame
void Update () {
СheckInBorders(); // - проверка попадания в рамки
CameraTransform.Translate(new Vector3(RealSpeedX,0,RealSpeedY));
}
public void CheckInBorders () {
float MouseXCord = Input.mousePosition.x;
float MouseYCord = Input.mousePosition.y;
if (inInertia == false) {
BordersInfoSave = BordersInfo;
if ((MouseXCord <= Borders[0])&&(BordersInfo != GetBordersInfo.Left)) BordersInfo = GetBordersInfo.Left;
if ((MouseXCord >= Borders[1])&&(BordersInfo != GetBordersInfo.Right)) BordersInfo = GetBordersInfo.Right;
if ((MouseYCord <= Borders[2])&&(BordersInfo != GetBordersInfo.Down)) BordersInfo = GetBordersInfo.Down;
if ((MouseYCord >= Borders[3])&&(BordersInfo != GetBordersInfo.Up)) BordersInfo = GetBordersInfo.Up;
if ((MouseXCord <= Borders[0])&&(MouseYCord >= Borders[3])&&(BordersInfo != GetBordersInfo.UpLeft)) BordersInfo = GetBordersInfo.UpLeft;
if ((MouseXCord >= Borders[1])&&(MouseYCord >= Borders[3])&&(BordersInfo != GetBordersInfo.UpRight)) BordersInfo = GetBordersInfo.UpRight;
if ((MouseXCord <= Borders[0])&&(MouseYCord <= Borders[2])&&(BordersInfo != GetBordersInfo.DownLeft)) BordersInfo = GetBordersInfo.DownLeft;
if ((MouseXCord >= Borders[1])&&(MouseYCord <= Borders[2])&&(BordersInfo != GetBordersInfo.DownRight)) BordersInfo = GetBordersInfo.DownRight;
if ((MouseXCord >= Borders[0])&&(MouseXCord <= Borders[1])&&(MouseYCord >= Borders[2])&&(MouseYCord <= Borders[3])&&(BordersInfo != GetBordersInfo.None)) BordersInfo = GetBordersInfo.None;
}
if (BordersInfoSave != BordersInfo)
{SpeedXFrom = SpeedX;
SpeedYFrom = SpeedY;
inInertia = true;
switch (BordersInfo) {
case GetBordersInfo.Left:
SpeedY = Speed;
SpeedX = 0f;
break;
case GetBordersInfo.Right:
SpeedY = -Speed;
SpeedX = 0f;
break;
case GetBordersInfo.Up:
SpeedX = Speed;
SpeedY = 0f;
break;
case GetBordersInfo.Down:
SpeedX = -Speed;
SpeedY = 0f;
break;
case GetBordersInfo.UpLeft:
SpeedX = SpeedY = Speed;
break;
case GetBordersInfo.DownLeft:
SpeedX = -Speed;
SpeedY = Speed;
break;
case GetBordersInfo.UpRight:
SpeedX = Speed;
SpeedY = -Speed;
break;
case GetBordersInfo.DownRight:
SpeedX = SpeedY = -Speed;
break;
case GetBordersInfo.None:
SpeedX = SpeedY = 0f;
break;
}
BordersInfoSave = BordersInfo;
}
if (inInertia == true) {
RealSpeedX = Mathf.Lerp(SpeedXFrom, SpeedX, Time.time/2f);
RealSpeedY = Mathf.Lerp(SpeedYFrom, SpeedY, Time.time/2f);
if ((RealSpeedX == SpeedX)&&(RealSpeedY == SpeedY)) inInertia = false;
}
}
}
По задумке переменная RealSpeedX должна плавно в течение двух секунд изменяться от SpeedXFrom до SpeedX, притом они отслеживаются при изменении направления движения камеры.
Т.е. если курсор был в левой части экрана GetBordersInfo.Left то при перемещении в центральную часть GetBordersInfo.None скорость должна плавно угаснуть с 1 до 0.
Но не выходит, всю голову поломал.
PS: Внимание, много говнокода!