VioletaBabel
72. Model View Controller 2 - PostMessage, DelayMessage 본문
이전 편 : http://violetababel.tistory.com/444
PostMessage - 지금 하던 일 끝난 후 할 것 (LateUpdate 이용)
DelayMessage - 일정 시간이 지난 후 함
===
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 | //GameModel.cs using System.Collections; using System.Collections.Generic; using UnityEngine; public class GameModel : MonoBehaviour { public const int _PlayerMan = 0x00000001; public const int _KeyMan = 0x00000010; public const int _KeyMan2 = 0x00000020; //이렇게 한 부분에서도 2의 배수를 이용해 여러 매니저를 한 번에 넣을 수 있다 public const int _KeyMan3 = 0x00000040; public const int _KeyMan4 = 0x00000080; public const int _AllMan = 0x11111111; //[System.Serializable] //public class ManagerID //{ // public string managerName = ""; // public GameObject managerObject = null; //} //[Header("Managers")] //public ManagerID[] managers; //private List<Manager> managerList = new List<Manager>(); //void Start() //{ // for (int i = 0; i < managers.Length; i++) // { // managerList.Add(managers[i].managerObject.GetComponent<Manager>()); // } //} [Header("Managers")] public GameObject playerMan = null; public GameObject keyMan = null; private List<Manager> managerList = new List<Manager>(); private List<Packet> packets = new List<Packet>(); private List<Packet> delayPackets = new List<Packet>(); void Start() { managerList.Add(playerMan.GetComponent<PlayerManager>()); managerList.Add(keyMan.GetComponent<KeyManager>()); } void Update() { } private void LateUpdate() { delayPackets.Clear(); foreach (Packet pk in packets) { if (pk.dispatchTime <= Time.time) { DispatchMessage(pk); } else { delayPackets.Add(pk); } } packets.Clear(); foreach (Packet pk in delayPackets) { packets.Add(pk); } } public void SendMessage(int senderID, int receiveID, PacketList packet, int iPacket, object objPacket1, object objPacket2) { Packet pk = new Packet(); pk.senderID = senderID; pk.recieveID = receiveID; pk.packetID = packet; pk.iMessage = iPacket; pk.objMessage1 = objPacket1; pk.objMessage2 = objPacket2; SendMessage(pk); } public void PostMessage(int senderID, int receiveID, PacketList packet, int iPacket, object objPacket1, object objPacket2) { Packet pk = new Packet(); pk.senderID = senderID; pk.recieveID = receiveID; pk.packetID = packet; pk.iMessage = iPacket; pk.objMessage1 = objPacket1; pk.objMessage2 = objPacket2; packets.Add(pk); } public void DelayMessage(int senderID, int receiveID, PacketList packet, int iPacket, object objPacket1, object objPacket2, float lateTime) { Packet pk = new Packet(); pk.senderID = senderID; pk.recieveID = receiveID; pk.packetID = packet; pk.iMessage = iPacket; pk.objMessage1 = objPacket1; pk.objMessage2 = objPacket2; pk.dispatchTime = Time.time + lateTime; packets.Add(pk); } public void SendMessage(Packet packet) { DispatchMessage(packet); } public void PostMessage(Packet packet) { packets.Add(packet); } public void DelayMessage(Packet packet) { packets.Add(packet); } private void DispatchMessage(Packet pk) { foreach (Manager mn in managerList) { int bReceive = mn.managerID & pk.recieveID; // 여러 곳에 동시에 보내는데, 다 도는 중에 받기로 된 곳만 트루에 뜨게 하기 위해. if (bReceive != 0) { mn.ReceiveMessage(pk); } } } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | //KeyManager.cs using System.Collections; using System.Collections.Generic; using UnityEngine; public class KeyManager : Manager { public override void ReceiveMessage(Packet pk) { } private void Start() { _ManagerID = GameModel._KeyMan; } private void Update() { if (Input.GetKeyDown(KeyCode.Space)) { GM.gm.DelayMessage(GameModel._KeyMan, GameModel._PlayerMan, PacketList.PACKET_KEYDOWN, (int)KeyCode.Space, null, null, 1f); } if (Input.GetKeyUp(KeyCode.Space)) { GM.gm.DelayMessage(GameModel._KeyMan, GameModel._PlayerMan, PacketList.PACKET_KEYUP, (int)KeyCode.Space, null, null, 1f); } } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | //GM.cs using System.Collections; using System.Collections.Generic; using UnityEngine; public class GM { static private GM _gm = null; static public GM gm { get { if (_gm == null) { _gm = new GM(); _gm.init(); } return _gm; } } private GameModel _gameModel = null; private void init() { GameObject gmModel = GameObject.FindGameObjectWithTag("GameModel"); if (gmModel) _gameModel = gmModel.GetComponent<GameModel>(); } public void SendMessage(int senderID, int receiveID, PacketList packet, int iPacket, object objPacket1, object objPacket2) { _gameModel.SendMessage(senderID, receiveID, packet, iPacket, objPacket1, objPacket2); } public void PostMessage(int senderID, int receiveID, PacketList packet, int iPacket, object objPacket1, object objPacket2) { _gameModel.PostMessage(senderID, receiveID, packet, iPacket, objPacket1, objPacket2); } public void DelayMessage(int senderID, int receiveID, PacketList packet, int iPacket, object objPacket1, object objPacket2, float lateTime) { _gameModel.DelayMessage(senderID, receiveID, packet, iPacket, objPacket1, objPacket2, lateTime); } public void SendMessage(Packet packet) { _gameModel.SendMessage(packet); } public void PostMessage(Packet packet) { _gameModel.PostMessage(packet); } public void DelayMessage(Packet packet) { _gameModel.DelayMessage(packet); } } | cs |
'BCA > 4. Unity' 카테고리의 다른 글
71. Unity 팁 3 (0) | 2018.11.21 |
---|---|
70. Unity 팁 2 (0) | 2018.11.21 |
69. Unity 팁 1 (0) | 2018.11.21 |
67. Model View Controller 1 - SendMessage (0) | 2018.11.20 |
66. A*를 응용한 이동 (0) | 2018.08.14 |
Comments