Unity/수업내용(C#)
[3.24] delegate를 이용한 드론과 컨트롤러
ljw4104
2021. 3. 24. 12:02
using System;
namespace Study10
{
public struct Vector3
{
public int x;
public int y;
public int z;
public static Vector3 zero = new Vector3(0, 0, 0);
public Vector3(int x, int y, int z)
{
this.x = x;
this.y = y;
this.z = z;
}
public override string ToString()
{
return String.Format("Position : {0}.{1}.{2}", this.x, this.y, this.z);
}
}
public class Drone
{
public enum eDirection
{
UP,DOWN,FORWARD,LEFT,RIGHT
}
private Vector3 position;
public Drone()
{
position = Vector3.zero;
}
public void Move(eDirection dir)
{
switch ((int)dir)
{
case 0:
position.z++;
break;
case 1:
position.z--;
break;
case 2:
position.x++;
break;
case 3:
position.y++;
break;
case 4:
position.y--;
break;
default:
Console.WriteLine("잘못된 방향입니다.");
break;
}
SendPosition();
}
public Vector3 SendPosition()
{
return position;
}
}
public class Monitor
{
private Drone drone;
public Monitor(Drone drone)
{
this.drone = drone;
}
public void Print()
{
Console.WriteLine(drone.SendPosition());
}
}
public class Controller
{
private Drone drone;
public Action<Drone.eDirection> droneMove;
public Controller()
{
}
public void Connect(Drone drone)
{
this.drone = drone;
droneMove = drone.Move;
Console.WriteLine("Connected with {0}\n", this.drone.ToString());
}
public void Move(Drone.eDirection dir)
{
this.droneMove(dir);
}
}
public class App
{
public App()
{
Drone drone = new Drone();
Controller controller = new Controller();
Monitor monitor = new Monitor(drone);
Console.WriteLine("드론과 컨트롤러를 연결합니다.");
controller.Connect(drone);
controller.droneMove(Drone.eDirection.FORWARD);
monitor.Print();
controller.droneMove(Drone.eDirection.UP);
monitor.Print();
}
}
}
드론의 좌표는 Vector3라는 구조체를 만들어서 저장시킨다.
따로 Position 구조체의 ToString 형태를 오버라이딩해서 출력을 편하게 하였다.
좌표는 3차원 좌표계를 따른다.