void Awake()
    {
        this.model = new CharacterModel();

        // view => model
        view.MovementIntentionObservable.Subscribe((CharacterModel.MovementIntention intention) => {
            this.MovementIntentionHandler(intention);
            this.model.moveIntention.Value = intention;
        });

        view.IsOnTheGroundAsObservalbe().Subscribe((bool isOnTheGround) => {
            this.model.isOnTheGround.Value = isOnTheGround;
            this.model.jumpStateMachine.LandedTransition();
        });

        view.JumpIntentionAsObservable().Subscribe((CharacterModel.JumpIntention intention) => {
            this.model.jumpIntention.Value = intention;
        });

        // model => view
        model.isNotOnTheGround.Subscribe((bool isOnTheGround) => {
            this.view.IsNotOnTheGroundChanged(isOnTheGround);
        });

        model.jumpStateMachine.onDoJump.Subscribe((Unit _) => {
            view.OnDoJump();
        });

        model.jumpStateMachine.jumpState.Subscribe(this.JumpStateChanged);
    }