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

фух, разобрался с реализацией интерфейса при передаче в него одного свойства. Действительно зациклился на переменных, использование свойств более удобно (ура! +1 к опыту программирования).
Но теперь возник вопрос, а как быть если у объекта (this) есть два свойства и надо выборочно передать в метод лишь одно из них, ну или изменить одно из них?

Создал свойства DirectionNS и DirectionEW у объекта, изначально равны нулю. При передаче в метод RotatePlayerUnit надо увеличить либо одно из них, либо второе в зависимости от значения переменной UnitDirection. Есть способ?

using UnityEngine;
using System.Collections;

public interface 
IMoveDirection {
    
int Direction {getset;}
}

public class 
MoveGamer MonoBehaviourIMoveDirection {
    
    public 
bool UnitIsMove false// Движется ли юнит?
    
public float UnitCurrentAngle 100f// Скорость вращения юнита
    
public Vector3 UnitRotatingVectorUnitRotationPoint// Вектор вращения и точка вращения юнита
     
public    bool UnitSetMove true// Переменная отвечающая за инициализацию вектора
    
    
public string UnitDirection// Направление движения
    
public int UnitXPosUnitYPos;
    
    public 
int directionNS 0// Текущие углы поворота север-юг/запад-восток. Исходные углы = 0, Север+, Юг-, Восток-, Запад+
    
public int DirectionNS 
    

        
get{ return directionNS;} 
        
setdirectionNS value;} 
    }
    
    public 
int directionEW 0// Текущие углы поворота север-юг/запад-восток. Исходные углы = 0, Север+, Юг-, Восток-, Запад+
    
public int DirectionEW 
    

        
get{ return directionEW;} 
        
setdirectionEW value;} 
    }  
    
    
// Use this for initialization
    
void Start () 
    {
    
    }
    
    
// Update is called once per frame
      
    
void Update () 
    {
         
UnitWaitMove (); // Юнит ожидает движение
    
}
    
    public 
void UnitWaitMove () 
    {    
    
        
// Блок выбора направления движения
        
if ((Input.GetKeyDown(KeyCode.W)) & !(UnitIsMove)) UnitDirection "North"// север
        
if ((Input.GetKeyDown(KeyCode.S)) & !(UnitIsMove)) UnitDirection "South"// юг
        
if ((Input.GetKeyDown(KeyCode.D)) & !(UnitIsMove)) UnitDirection "East"// восток
        
if ((Input.GetKeyDown(KeyCode.A)) & !(UnitIsMove)) UnitDirection "West"// запад
        
        
if (UnitDirection != ""UnitSetMove true// Если команда задана, то инициировать вектор поворота
        
if ((UnitIsMove) & ((UnitDirection == "North") && (UnitDirection == "South"))) RotatePlayerUnit(this.directionNS);    
        if ((
UnitIsMove) & ((UnitDirection == "East") && (UnitDirection == "West"))) RotatePlayerUnit(this.directionEW);
    }
    
        
    public 
void RotatePlayerUnit(IMoveDirection toMove
    {
        
//float UnitAngle;
        //if (UnitSetMove) 
        //{
        //UnitRotationPoint = new Vector3(transform.position.x, transform.position.y - 0.5f, transform.position.z + 0.5f);
        //UnitRotatingVector = new Vector3(1,0,0);
        //UnitSetMove = !UnitSetMove;
        //}
            
        //transform.RotateAround(UnitRotationPoint, UnitRotatingVector, UnitCurrentAngle * Time.deltaTime);
        //UnitAngle = transform.eulerAngles.x;
            
        //if (UnitAngle == 90f) 
        //{
        //transform.rotation = Quaternion.Euler(90,transform.rotation.eulerAngles.y, transform.rotation.eulerAngles.z);
        //UnitIsMove = false;
        
toMove.Direction++;
        
//}
    
}

__________________
Области Хаоса - мой новый Youtube проект
(Offline)
 
Ответить с цитированием