<좀비와 열쇠> 코드 샘플
MIT License
< (Zombies and Keys)> . , . .
MonoBehaviour . MonoBehaviour .
< > [MessageExchange.cs] () . (, ) .
MessageExchange Meditator PubSub , interface MonoBehaviour , Unity UI Messaging System GameObject , , GameObject Hierarchy .
MessageExchange interface IMessageExchangeTarget
, IMET
. , PlayerHealth.cs MessageExchange .
public interface IMETPlayerHealthOnChanage : IMessageExchangeTarget
{
void OnChanage(int healthRemaining);
}
// NOTE: Garbage readonly .
private static readonly Action<IMETPlayerHealthOnChanage, int> callOnChange =
(t, healthRemaining) => t.OnChanage(healthRemaining);
messageExchange.Invoke(callOnChange, health);
1 , HUD , HUD PlayerHUDDriver.cs IMETPlayerHealthOnChanage
.
// .
public class PlayerHUDDriver : MonoBehaviour,
IMETPlayerHealthOnChanage
{
[SerializeField] private MessageExchange messageExchange;
[SerializeField] private HUDDotContainer hudHealth;
void OnEnable()
{
messageExchange.Register(this);
}
void OnDisable()
{
messageExchange.Deregister(this);
}
void IMETPlayerHealthOnChanage.OnChanage(int healthRemaining)
{
hudHealth.IsBlinking = healthRemaining == 1;
}
}
< > . Animator State State .
Animator MessageExchange Unity Animator .
PlayerSMBIdle.cs PlayerSMB
Animator State StateMachineBehaviour
Enter, Exit MessageExchange .
Animator GameObject Component Animation Event PlayerAnimationEventProxy.cs Animation Event MessageExchange .
MessageExchange MessageInterchange.cs . ScriptableObject . "".
, , . [PlayerInputDriver.cs] Unity New Input System MessageInterchange . MessageExchange MessageInterchange interface `IMIT` .
public interface IMITPlayerInputDriver : IMessageInterchangeTarget
{
void OnMove(Vector2 inputDir);
void OnAttack(Vector2 inputDir);
void OnRoll(bool isPressing);
void OnTake(bool isPressing);
void OnDrop(bool isPressing);
}
Player PlayerControl.cs IMITPlayerInputDriver
, .
PlayerActorIdle.cs PlayerActor
PlayerControl.cs MessageExchange (FiniteStateMachine.cs) , .