//移動を試みる関数(abstractの上書き) protected override void TryToMove() { //移動方向の検知 moveDirection.x = (int)InputFunction.GetAxisRaw("Horizontal"); moveDirection.y = (int)InputFunction.GetAxisRaw("Vertical"); //左右同時押しなどでmoveDirection.x,yがともに0であれば、ここでreturnする if (moveDirection.x == 0 && moveDirection.y == 0) { return; } //shiftが押されているのであれば、斜め方向にしか向く(移動)することができない if (InputFunction.GetKey("LeftShift") && (moveDirection.x == 0 || moveDirection.y == 0)) { return; } //自機ユニットの向きを変える(この時点では振る舞いをしたことにならない) if (moveDirection.x != 0 || moveDirection.y != 0) { //faceDirectionにmoveDirectionを代入する faceDirection = moveDirection; //子要素のコンポーネントarrowAnimatorの変数にfaceDirectionを代入する arrowAnimator.SetFloat("faceDirectionX", faceDirection.x); arrowAnimator.SetFloat("faceDirectionY", faceDirection.y); } //spaceが押されている場合は移動することができない(振る舞いをしていない判定で戻り値を返す) if (InputFunction.GetKey("LeftControl")) { return; } //ユニットが移動可能かを判定する(障害物がないかのチェック) canMove = CheckCanMove(); if (canMove == true) { //Unitの当たり判定を先んじて移動先にずらしておく(こうしないと次のUnitと移動先がかぶることがある) boxCollider2D.offset = moveDirection; //振る舞い予定をmoveにする scheduledBehavior = ScheduledBehavior.Move; } }
//移動可能かどうかを判定し、真偽値を返す関数 //protected bool CheckCanMove() => Unit.CheckCanMove()を継承 //ユニットの連続的な移動を始める関数 //public void StartUnitMovement() => Unit.StartUnitMovement()を継承 //ユニットを連続的に移動させる反復処理関数 //protected IEnumerator MoveSmoothly() => Unit.MoveSmoothly()を継承 //移動を試みる関数 protected override void TryToAttack() { //攻撃ボタン"z"が押されていたら攻撃 if (InputFunction.GetKey("Z")) { attackType = AttackType.Punch; } else { return; } //振る舞い予定を攻撃にする scheduledBehavior = ScheduledBehavior.Attack; //攻撃を発射する LaunchAttack(); }
//自機ユニットの振る舞いを決定する関数(abstractの上書き) public override void DecideBehavior() { //scheduledBehaviorを未定の状態にする scheduledBehavior = ScheduledBehavior.NotDecided; //もしキー入力がされていなかったらすぐにreturnする if (InputFunction.AnyKey() == false) { return; } //もしコマンドウィンドウが表示されている場合 if (GameManager.commandWindowIsDisplaying == true) { } //そうでない場合 else { //pが押された場合パスし、振る舞い予定をパスにする if (InputFunction.GetKey("P")) { scheduledBehavior = ScheduledBehavior.Pass; } //まずは移動判定を検知する。移動可能であれば振る舞い予定を移動にする。 if (scheduledBehavior == ScheduledBehavior.NotDecided) { TryToMove(); } //次に攻撃判定を検知する。攻撃後、振る舞い予定を攻撃にする if (scheduledBehavior == ScheduledBehavior.NotDecided) { TryToAttack(); } } }