//Character Event protected override void OnInit() { base.OnInit(); //카메라 매니저 관련 초기화 m_CameraManager.Init(); (CurrentControl as PlayerCharacterControl).Init(m_CameraManager.CurentCamera); //IsDied 초기값 및 true 변경시 사망처리 IsDied = new DataValue <bool>(false); IsDied.AddValueChangeEvent(() => { if (IsDied.Value) { SetAction(0, m_DieAction); } }, false); //IsUsingRange 초기값 및 값 변경에 따른 Animator 변수 변경 처리 IsWeaponRange = new DataValue <bool>(false); IsWeaponRange.AddValueChangeEvent(() => { m_Animator.SetBool("UsingRange", IsWeaponRange.Value); }, true); //TimeEnergy 초기값 및 최대값 정의, 0이 될 경우 사망처리 TimeEnergy = new DataValue <float>(data.TimeEnergy_Max); TimeEnergy.AddValueChangeEvent(() => { if (data.TimeEnergy_Max < TimeEnergy.Value) { TimeEnergy.SetValue(data.TimeEnergy_Max, false); } if (TimeEnergy.Value <= 0) { IsDied.Value = true; } }, false); //TimeScale 변경에 따른 처리 TimeStopProgress = new DataValue <float>(0); TimeStopProgress.AddValueChangeEvent(() => { //0~1으로 값 Clamp float clampedValue = Mathf.Clamp01(TimeStopProgress.Value); TimeStopProgress.SetValue(clampedValue, false); //시간정지에 따른 플레이어에게 가해지는 효과 설정 m_Animator.speed = PlayerTimeScale; (ChildPhysic as CharacterPhysicCharacterController).SimulateScale = PlayerTimeScale; }, true); //TimeStopTimer 초기값 정의, 0아래로 줄어들면 쿨타임 적용 및 시간정지 종료 TimeStopTimer = new DataValue <float>(0); TimeStopTimer.AddValueChangeEvent(() => { if (TimeStopTimer.Value < 0) { IsUsingTimeStop.Value = false; TimeStopCoolDown.Value = data.TimeStop_CoolDown; } }, false); //BulletCount 초기값 및 최대값 정의, 줄어들때마다 BulletChargeTimer 리셋 BulletCount = new DataValue <int>(data.Bullet_Max); BulletCount.AddValueChangeEvent(() => { if (data.TimeEnergy_Max < BulletCount.Value) { BulletCount.SetValue(data.Bullet_Max, false); } }, false); m_BulletCount_ConsumeTimesReporter = new DataConsumTimesReporter <int>(BulletCount, 0); m_BulletCount_ConsumeTimesReporter.AddValueChangeEvent(() => { BulletChargeTimer.Value = data.Bullet_MsBetweenRecover; //참고 : 이 함수는 BulletCount의 값이 줄어들때만 호출됨 }, false); //BulletChargeTimer 초기값 정의, 타이머가 0아래로 내려가면 총알 1개 추가 및 BulletChargeTimer 리셋 BulletChargeTimer = new DataValue <float>(0); BulletChargeTimer.AddValueChangeEvent(() => { if (BulletChargeTimer.Value < 0) { BulletCount.Value += 1; BulletChargeTimer.Value = data.Bullet_RecoverSpd; } }); //기타 값들 설정 IsUsingTimeStop = new DataValue <bool>(false); TimeStopCoolDown = new DataValue <float>(0); (ChildPhysic as CharacterPhysicCharacterController)?.MoveSpeed.SetValue(data.Char_MoveSpd, false); //MoveSpeed }