Ты все еще привязываешь себя к переменным. Но теперь ты можешь передать объекты, обладающие одинаковыми свойствами в функцию обработки. Пусть функция меняет эти свойства объектов, а не непонятные переменные.
И на сколько я понял ты немного не так применил интерфейс.
public class User : MonoBehaviour, IMoveDirection {
private int direction;
public int Direction
{
get{ return direction;}
set{ direction = value;}
}
public class AI: MonoBehaviour, IMoveDirection {
private int direction;
public int Direction
{
get{ return direction;}
set{ direction = value;}
}
и тогда твоя функция будет вращать/двигать оба этих объекта используя интерфейс для свойства Direction.
вот так:
public void RotatePlayerUnit(IMoveDirection toMove)
{
toMove.Direction++;
}
RotatePlayerUnit(экземпляр_AI_или_User );
PS: private int direction; - это локальная переменная является хранилищем значения. Свойство само по себе это два метода, которые позволяют читать и записывать это значение и если надо делать какие-то дополнительные действия при чтении и сохранении.