фух, разобрался с реализацией интерфейса при передаче в него одного свойства. Действительно зациклился на переменных, использование свойств более удобно (ура! +1 к опыту программирования).
Но теперь возник вопрос, а как быть если у объекта (this) есть два свойства и надо выборочно передать в метод лишь одно из них, ну или изменить одно из них?
Создал свойства DirectionNS и DirectionEW у объекта, изначально равны нулю. При передаче в метод RotatePlayerUnit надо увеличить либо одно из них, либо второе в зависимости от значения переменной UnitDirection. Есть способ?
using UnityEngine;
using System.Collections;
public interface IMoveDirection {
int Direction {get; set;}
}
public class MoveGamer : MonoBehaviour, IMoveDirection {
public bool UnitIsMove = false; // Движется ли юнит?
public float UnitCurrentAngle = 100f; // Скорость вращения юнита
public Vector3 UnitRotatingVector, UnitRotationPoint; // Вектор вращения и точка вращения юнита
public bool UnitSetMove = true; // Переменная отвечающая за инициализацию вектора
public string UnitDirection; // Направление движения
public int UnitXPos, UnitYPos;
public int directionNS = 0; // Текущие углы поворота север-юг/запад-восток. Исходные углы = 0, Север+, Юг-, Восток-, Запад+
public int DirectionNS
{
get{ return directionNS;}
set{ directionNS = value;}
}
public int directionEW = 0; // Текущие углы поворота север-юг/запад-восток. Исходные углы = 0, Север+, Юг-, Восток-, Запад+
public int DirectionEW
{
get{ return directionEW;}
set{ directionEW = 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++;
//}
}
}