znk-codesample

<좀비와 열쇠> 코드 샘플

MIT License

Stars
18

< >

< (Zombies and Keys)> . , . .

MessageExchange

        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 MessageExchange

< > . 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 .

MessageInterchange

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 , .

Actor FSM

PlayerActorIdle.cs PlayerActor PlayerControl.cs MessageExchange (FiniteStateMachine.cs) , .

Related Projects