Показать сообщение отдельно
Старый 14.10.2013, 00:53   #84
EvilOkta
Знающий
 
Аватар для EvilOkta
 
Регистрация: 31.07.2008
Сообщений: 321
Написано 108 полезных сообщений
(для 229 пользователей)
Вопрос Ответ: Передача переменной в метод

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

public class 
CameraNavigation MonoBehaviour {
     
    public 
Transform CameraTransform//основа навигации камеры
    
public GameObject CameraTarget//цель камеры
    
public float SpeedSpeedXSpeedYRealSpeedXRealSpeedYSpeedXFromSpeedYFrom;
    public 
int ScreenWidthScreenHeight// размеры экрана
    
public bool inInertia//инерция камеры
        
    
List<floatBorders = new List<float>(); //список экранных маркеров
    
public enum GetBordersInfo {None,Left,Right,Up,Down,UpLeft,UpRight,DownLeft,DownRight}; // присвоение попавшей рамки
    
public GetBordersInfo BordersInfoBordersInfoSave;
    
    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(SpeedXFromSpeedXTime.time/2f);
            
RealSpeedY Mathf.Lerp(SpeedYFromSpeedYTime.time/2f);
            if ((
RealSpeedX == SpeedX)&&(RealSpeedY == SpeedY)) inInertia false;
        }
    }
    

По задумке переменная RealSpeedX должна плавно в течение двух секунд изменяться от SpeedXFrom до SpeedX, притом они отслеживаются при изменении направления движения камеры.
Т.е. если курсор был в левой части экрана GetBordersInfo.Left то при перемещении в центральную часть GetBordersInfo.None скорость должна плавно угаснуть с 1 до 0.
Но не выходит, всю голову поломал.

PS: Внимание, много говнокода!
__________________
Области Хаоса - мой новый Youtube проект
(Offline)
 
Ответить с цитированием