// Update is called once per frame void Update() { // キャンセル以外の 何かボタンを押したらセレクト画面へ遷移 foreach (var player in PlayerIndexes.All) { // プレイヤーのキー押下状態を確認。 InputStateDto state = ApplicationDto.ReadInput(player); if (state.Lp.Pressing || state.Mp.Pressing || state.Hp.Pressing || state.Lk.Pressing || state.Mk.Pressing || state.Hk.Pressing || state.Pause.Pressing ) { Debug.Log($"Push key. human={player} input {state.ToDisplay()}"); CommonScript.computerFlags[player] = false; // * Configure scene. // * Click main menu [File] - [Build Settings...]. // * Double click [Assets] - [Scenes] - [Title] in project view. // * Click [Add Open Scenes] button. // * Double click [Assets] - [Scenes] - [Select] in project view. // * Click [Add Open Scenes] button. // * Double click [Assets] - [Scenes] - [Fight] in project view. // * Click [Add Open Scenes] button. // * Double click [Assets] - [Scenes] - [Result] in project view. // * Click [Add Open Scenes] button. // * Right click `Scenes/SampleScene` from `Build Settings/Scene In Build`. and Click [Remove Selection]. SceneManager.LoadScene(CommonScript.Scene_to_name[(int)SceneIndex.Select]); } } }
// Update is called once per frame void Update() { // キャンセル以外の 何かボタンを押したらセレクト画面へ遷移 foreach (var player in PlayerIndexes.All) { // プレイヤーのキー押下状態を確認。 InputStateDto state = ApplicationDto.ReadInput(player); // キャンセル以外の 何かボタンを押したらセレクト画面へ遷移 if (state.Lp.Pressing || state.Mp.Pressing || state.Hp.Pressing || state.Lk.Pressing || state.Mk.Pressing || state.Hk.Pressing || state.Pause.Pressing) { SceneManager.LoadScene(CommonScript.Scene_to_name[(int)SceneIndex.Select]); } } }
// Update is called once per frame void Update() { var player = PlayerIndexes.FromArrayIndex(this.playerIndex); // 現在のアニメーター・ステートに紐づいたデータ AcStateRecordable astateRecord = AControl.Instance.GetCurrentAcStateRecord(animator); #region 入力受付と途中参加 InputStateDto input = ApplicationDto.ReadInput(player); // 人間の途中参加受付 if ( CommonScript.computerFlags[player] && // コンピュータープレイヤーの場合 ( // レバーはコンピューターもいじっているので、区別できない。 // 0 != leverX || // 0 != leverY || 0 != input.LeverX || 0 != input.LeverY || input.Lp.Pressing || input.Mp.Pressing || input.Hp.Pressing || input.Lk.Pressing || input.Mk.Pressing || input.Hk.Pressing || input.Pause.Pressing || input.CancelMenu.Pressing )) { Debug.Log("途中参加 " + player + " プレイヤー" + " leverX = " + input.LeverX + " leverY = " + input.LeverY); // コンピューター・プレイヤー側のゲームパッドで、何かボタンを押したら、人間の参入。 CommonScript.computerFlags[player] = false; // FIXME: 硬直時間を入れたい。 return; } if (CommonScript.computerFlags[player]) { input.LeverX = Random.Range(-1.0f, 1.0f); input.Lp.Pressing = false; input.Mp.Pressing = false; input.Hp.Pressing = false; input.Lk.Pressing = false; input.Mk.Pressing = false; input.Hk.Pressing = false; input.Pause.Pressing = false; input.CancelMenu.Pressing = false; } else { input.LeverX = Input.GetAxisRaw(InputNames.Dictionary[new InputIndex(player, ButtonIndex.Horizontal)]); } #endregion if (AControl.Instance.StateHash_to_record[Animator.StringToHash(Select_Cursor_AbstractAControl.BASELAYER_STAY)].Name == astateRecord.Name) { //カーソル移動中でなければ。 if (CommonScript.computerFlags[player])// コンピュータープレイヤーの場合 { if (CameraBehaviour.READY_TIME_LENGTH < mainCameraScript.ReadyingTime) { input.Lp.Pressing = (0.5 < Random.Range(0.0f, 1.0f)); // たまにパンチ・キーを押して決定する。 } } if ( input.Lp.Pressing || input.Mp.Pressing || input.Hp.Pressing || input.Lk.Pressing || input.Mk.Pressing || input.Hk.Pressing || input.Pause.Pressing ) { // 何かボタンを押したら、キャラクター選択。 animator.SetTrigger(ThisSceneDto.TriggerSelect); } else if (input.LeverX != 0.0f)//左か右を入力したら { //Debug.Log("slide lever x = " + leverX.ToString()); if (input.LeverX < 0.0f) { cursorColumn--; if (cursorColumn < 0) { cursorColumn = 2; } } else { cursorColumn++; if (2 < cursorColumn) { cursorColumn = 0; } } //Debug.Log("slide pos = " + cursorColumn[iPlayerIndex]); animator.SetTrigger(ThisSceneDto.TriggerMove); ChangeCharacter(); //入力方向へ移動 //rigidbody2Ds[iPlayerIndex].velocity = new Vector2(leverX * cursorSpeed, rigidbody2Ds[iPlayerIndex].velocity.y); SlideIn(); } else // ボタン押下も、レバー左右入力もしていなかったら { //横移動の速度を0にしてピタッと止まるようにする myRigidbody2D.velocity = new Vector2(0, myRigidbody2D.velocity.y); } } else if (AControl.Instance.StateHash_to_record[Animator.StringToHash(Select_Cursor_AbstractAControl.BASELAYER_MOVE)].Name == astateRecord.Name) { } else if (AControl.Instance.StateHash_to_record[Animator.StringToHash(Select_Cursor_AbstractAControl.BASELAYER_READY)].Name == astateRecord.Name) { // キャラクター選択済みのとき if ( !CommonScript.computerFlags[player] // 人間プレイヤーの場合 && ( input.Lk.Pressing || input.Mk.Pressing || input.Hk.Pressing || input.CancelMenu.Pressing )) { // キック・ボタンを押したら、キャンセル☆ animator.SetTrigger(ThisSceneDto.TriggerStay); } } }
//void OnCollisionEnter2D(Collider2D col) //{ // Debug.Log("物体だ☆! col.tag = " + col.tag); //} /// <summary> /// BoxCollider2D(等のPhysics2D), Rigidbody2D の2つをアタッチしているものと接触したとき。 /// </summary> /// <param name="col"></param> void OnTriggerEnter2D(Collider2D col) { #region 当たり判定 if (col.tag == playerScript.OpponentHitboxTag)// 相手の 攻撃当たり判定くん が重なった時 { var player = PlayerIndexes.FromArrayIndex(this.playerIndex); // ブロックしているかどうか判定☆ //CommonInput.PlayerInput input = CommonInput.player_to_input[playerIndex]; InputStateDto input = ApplicationDto.ReadInput(player); if (FacingOpponentMoveFwBkSt.Back == playerScript.GetFacingOpponentMoveFwBkSt(input.LeverX)) { //if (PlayerIndex.Player1==player) //{ // Debug.Log("ブロック☆! col.tag = " + col.tag + " input.leverX = " + input.leverX + " Time.deltaTime = " + Time.deltaTime); //} audioSources[1].PlayOneShot(audioSources[1].clip);// 効果音を鳴らすぜ☆ playerScript.Animator.SetTrigger(ThisSceneDto.TriggerBlock); } else { //if (PlayerIndex.Player1 == player) //{ // Debug.Log("痛っ☆! col.tag = " + col.tag + " input.leverX = " + input.leverX + " Time.deltaTime = " + Time.deltaTime); //} playerScript.DamageHitCount++; // 攻撃を受けた回数。 audioSources[0].PlayOneShot(audioSources[0].clip); // 効果音を鳴らすぜ☆ // 爆発の粒子を作るぜ☆ TakoyakiParticleScript.Add(transform.position.x, transform.position.y); // HPメーター { float damage = playerScript.MainCameraScript.PublicPlayerDTOs[playerScript.Opponent].AttackPower; float value = damage * (player == PlayerIndex.Player1 ? -1 : 1); playerScript.MainCameraScript.OffsetBar(value); if (10 <= playerScript.DamageHitCount) { // ダウン・アニメーションの開始 playerScript.Pull_Down(); } else if (100.0f <= damage) { // ダメージ・アニメーションの開始 playerScript.Pull_DamageH(); } else if (50.0f <= damage) { // ダメージ・アニメーションの開始 playerScript.Pull_DamageM(); } else { // ダメージ・アニメーションの開始 playerScript.Pull_DamageL(); } } // 手番 { // 攻撃を受けた方の手番に変わるぜ☆(^▽^) playerScript.MainCameraScript.SetTeban(playerScript.Opponent); } } } else { //Debug.Log("相手の攻撃じゃないものに当たった☆! col.tag = " + col.tag); } #endregion }
void Update() { var player = PlayerIndexes.FromArrayIndex(this.playerIndex); //if (PlayerIndex.Player1 == player) //{ // //ebug.Log("Update Time.deltaTime = " + Time.deltaTime); //} // 現在のアニメーター・ステートに紐づいたデータ AcState astateRecord = (AcState)AControl.Instance.GetCurrentAcStateRecord(animator); #region 入力受付 InputStateDto input = ApplicationDto.ReadInput(player); if (isComputer) { if (input.Lp.Down || input.Mp.Down || input.Hp.Down || input.Lk.Down || input.Mk.Down || input.Hk.Down || input.Pause.Down) { // 人間プレイヤーの乱入☆ 次のフレームから☆ isComputer = false; input.LeverX = 0; input.LeverY = 0; } else { // コンピューター・プレイヤーの場合。 input.LeverX = Random.Range(-1.0f, 1.0f); input.LeverY = Random.Range(-1.0f, 1.0f); if (-0.980f < input.LeverX && input.LeverX < 0.980f) { // きょろきょろするので落ち着かせるぜ☆(^~^) input.LeverX = 0.0f; } if (-0.995f < input.LeverY && input.LeverY < 0.995f) { // ジャンプばっかりするので落ち着かせるぜ☆(^~^) input.LeverY = 0.0f; } if (input.Lp.Pressing) { // 押しっぱなしなら、いつか放す☆(^~^) input.Lp.Up = (0.900f < Random.Range(0.0f, 1.0f)); } else { // 押してないなら、いつか押す☆(^~^) input.Lp.Up = false; input.Lp.Down = (0.900f < Random.Range(0.0f, 1.0f)); } if (input.Mp.Pressing) { input.Mp.Up = (0.990f < Random.Range(0.0f, 1.0f)); } else { input.Mp.Up = false; input.Mp.Down = (0.990f < Random.Range(0.0f, 1.0f)); } if (input.Hp.Pressing) { input.Hp.Up = (0.995f < Random.Range(0.0f, 1.0f)); } else { input.Hp.Up = false; input.Hp.Down = (0.995f < Random.Range(0.0f, 1.0f)); } if (input.Lk.Pressing) { input.Lk.Up = (0.900f < Random.Range(0.0f, 1.0f)); } else { input.Lk.Up = false; input.Lk.Down = (0.900f < Random.Range(0.0f, 1.0f)); } if (input.Mk.Pressing) { input.Mk.Up = (0.990f < Random.Range(0.0f, 1.0f)); } else { input.Mk.Up = false; input.Mk.Down = (0.990f < Random.Range(0.0f, 1.0f)); } if (input.Hk.Pressing) { input.Hk.Up = (0.995f < Random.Range(0.0f, 1.0f)); } else { input.Hk.Up = false; input.Hk.Down = (0.995f < Random.Range(0.0f, 1.0f)); } //buttonUpPA = (0.999f < Random.Range(0.0f, 1.0f)); //buttonDownPA = (0.999f < Random.Range(0.0f, 1.0f)); } } #endregion FacingOpponentMoveFwBkSt facingOpponentMoveFwBkSt = GetFacingOpponentMoveFwBkSt(input.LeverX); if (astateRecord.Tags.Contains((int)Animator.StringToHash(AControl.TAG_BLOCK))) { // ブロック中 if (FacingOpponentMoveFwBkSt.Back != facingOpponentMoveFwBkSt) { // バックを解除している場合。 animator.SetTrigger(ThisSceneDto.TriggerDeblock); } } #region ジャンプ { // キャラクターの下半身に、接地判定用の垂直線を引く // transform.up が -1 のとき、方眼紙の1マス分ぐらい下に相当? isGrounded = Physics2D.Linecast( transform.position + transform.up * 0, // スプライトの中央 transform.position - transform.up * 1.1f, // 足元を少しはみ出すぐらい groundLayer // Linecastが判定するレイヤー // LayerMask.GetMask("Water")// ); //if (PlayerIndex.Player1 == player) //{ // //ebug.Log("B playerIndex = " + playerIndex + " isGrounded = " + isGrounded + " transform.position.y = " + transform.position.y + " Rigidbody2D.velocity.y = " + Rigidbody2D.velocity.y); //} //Animatorへパラメーターを送る animator.SetFloat(ThisSceneDto.FloatVelY, Rigidbody2D.velocity.y); // y方向へかかる速度単位,上へいくとプラス、下へいくとマイナス //ebug.Log("Jumping velY="+animator.GetFloat(SceneCommon.FLOAT_VEL_Y)); animator.SetBool(ThisSceneDto.BoolIsGrounded, isGrounded); } #endregion #region 弾を撃つ // 弾を撃つぜ☆ if ( (3 == animator.GetInteger(ThisSceneDto.IntegerLeverXNeutral) % (30)) // レバーを放して、タイミングよく攻撃ボタンを押したとき && ( input.Lp.Down || input.Mp.Down || input.Hp.Down || input.Lk.Down || input.Mk.Down || input.Hk.Down ) ) { float startY; if (0 < input.LeverY)// 上段だぜ☆ { startY = 1.2f; } else if (0 == input.LeverY)// 中段だぜ☆ { startY = 0.6f; } else // 下段だぜ☆ { startY = 0.0f; } // 弾の作成☆ GameObject newBullet = Instantiate(bullet, transform.position + new Vector3(0f, startY, 0f), transform.rotation); SpriteRenderer newBulletSpriteRenderer = newBullet.GetComponent <SpriteRenderer>(); // 弾の画像を差し替えたいぜ☆(^~^) { int r = Random.Range(0, 14); Sprite[] sprites = Resources.LoadAll <Sprite>("Sprites/Bullet0"); Sprite sprite2; switch (r) { case 0: sprite2 = System.Array.Find <Sprite>(sprites, (sprite) => sprite.name.Equals("Bullet0_0")); break; //歩 case 1: sprite2 = System.Array.Find <Sprite>(sprites, (sprite) => sprite.name.Equals("Bullet0_1")); break; //香 case 2: sprite2 = System.Array.Find <Sprite>(sprites, (sprite) => sprite.name.Equals("Bullet0_2")); break; //桂 case 3: sprite2 = System.Array.Find <Sprite>(sprites, (sprite) => sprite.name.Equals("Bullet0_3")); break; //銀 case 4: sprite2 = System.Array.Find <Sprite>(sprites, (sprite) => sprite.name.Equals("Bullet0_4")); break; //金 case 5: sprite2 = System.Array.Find <Sprite>(sprites, (sprite) => sprite.name.Equals("Bullet0_5")); break; //角 case 6: sprite2 = System.Array.Find <Sprite>(sprites, (sprite) => sprite.name.Equals("Bullet0_6")); break; //飛 case 7: sprite2 = System.Array.Find <Sprite>(sprites, (sprite) => sprite.name.Equals("Bullet0_7")); break; //玉 case 8: sprite2 = System.Array.Find <Sprite>(sprites, (sprite) => sprite.name.Equals("Bullet0_8")); break; //と case 9: sprite2 = System.Array.Find <Sprite>(sprites, (sprite) => sprite.name.Equals("Bullet0_9")); break; //杏 case 10: sprite2 = System.Array.Find <Sprite>(sprites, (sprite) => sprite.name.Equals("Bullet0_10")); break; //圭 case 11: sprite2 = System.Array.Find <Sprite>(sprites, (sprite) => sprite.name.Equals("Bullet0_11")); break; //全 case 12: sprite2 = System.Array.Find <Sprite>(sprites, (sprite) => sprite.name.Equals("Bullet0_12")); break; //馬 default: sprite2 = System.Array.Find <Sprite>(sprites, (sprite) => sprite.name.Equals("Bullet0_13")); break; //竜 } newBulletSpriteRenderer.sprite = sprite2; } } #endregion #region レバーの押下時間の更新 // レバー・ニュートラル時間と、レバー・プレッシング時間は、8フレームほど重複する部分がある。 if (input.LeverX != 0)//左か右を入力したら { animator.SetInteger(ThisSceneDto.IntegerLeverXPressing, animator.GetInteger(ThisSceneDto.IntegerLeverXPressing) + 1); animator.SetInteger(ThisSceneDto.IntegerLeverXNeutral, 0); animator.SetInteger(ThisSceneDto.IntegerLeverXIdol, 0); } else //左も右も入力していなかったら { // 感覚的に、左から右に隙間なく切り替えたと思っていても、 // 入力装置的には、左から右(その逆も)に切り替える瞬間、どちらも押していない瞬間が発生する。 if (8 < animator.GetInteger(ThisSceneDto.IntegerLeverXIdol))// レバーを放した 数フレーム目から、レバーが離れた判定をすることにする。 { animator.SetInteger(ThisSceneDto.IntegerLeverXPressing, 0); animator.SetInteger(ThisSceneDto.IntegerLeverXNeutral, animator.GetInteger(ThisSceneDto.IntegerLeverXNeutral) + 1); } else { animator.SetInteger(ThisSceneDto.IntegerLeverXIdol, animator.GetInteger(ThisSceneDto.IntegerLeverXIdol) + 1); } } if (0 != input.LeverY)// 上か下キーを入力していたら { animator.SetInteger(ThisSceneDto.IntegerLeverYPressing, animator.GetInteger(ThisSceneDto.IntegerLeverYPressing) + 1); animator.SetInteger(ThisSceneDto.IntegerLeverYNeutral, 0); animator.SetInteger(ThisSceneDto.IntegerLeverYIdol, 0); } else // 下も上も入力していなかったら { // 感覚的に、左から右に隙間なく切り替えたと思っていても、 // 入力装置的には、下から上(その逆も)に切り替える瞬間、どちらも押していない瞬間が発生する。 if (8 < animator.GetInteger(ThisSceneDto.IntegerLeverYIdol))// レバーを放した 数フレーム目から、レバーが離れた判定をすることにする。 { animator.SetInteger(ThisSceneDto.IntegerLeverYPressing, 0); animator.SetInteger(ThisSceneDto.IntegerLeverYNeutral, animator.GetInteger(ThisSceneDto.IntegerLeverYNeutral) + 1); } else { animator.SetInteger(ThisSceneDto.IntegerLeverYIdol, animator.GetInteger(ThisSceneDto.IntegerLeverYIdol) + 1); } } #endregion #region レバー操作によるアクション //if (!anim.GetBool(CommonScript.BOOL_JMOVE0))//ジャンプ時の屈伸中ではないなら //{ if (input.LeverX != 0)//左か右を入力したら { if (!astateRecord.Tags.Contains(Animator.StringToHash(AControl.TAG_BUSYX))) { //入力方向へ移動 Rigidbody2D.velocity = new Vector2(Mathf.Sign(input.LeverX) * speedX, Rigidbody2D.velocity.y); } DoFacingOpponent(GetFacingOfOpponentLR()); //ebug.Log("さあ、どっちだ☆ input.leverX = " + input.leverX + " facingOpponentMoveFwBkSt = " + facingOpponentMoveFwBkSt + " Time.deltaTime = " + Time.deltaTime); if (FacingOpponentMoveFwBkSt.Forward == facingOpponentMoveFwBkSt)// 相手に向かってレバーを倒したとき { //if (PlayerIndex.Player1 == player) //{ // //ebug.Log("相手に向かっていくぜ☆ input.leverX = " + input.leverX); //} Pull_Forward(); //if (isGrounded)// 接地していれば //{ //} //if ((int)ActioningIndex.Dash != anim.GetInteger(CommonScript.INTEGER_ACTIONING)) //{ // // ダッシュ・アニメーションの開始 // //if (PlayerIndex.Player1 == player) // //{ // // //ebug.Log("Rigidbody2D.velocity.x = " + Rigidbody2D.velocity.x + " ダッシュ!"); // //} //} //else //{ // // 既にダッシュ中なら何もしない //} } else if (FacingOpponentMoveFwBkSt.Back == facingOpponentMoveFwBkSt)// 相手と反対の方向にレバーを倒したとき(バックステップ) { //if (PlayerIndex.Player1 == player) //{ // //ebug.Log("相手の反対側に向かっていくぜ☆ input.leverX = " + input.leverX); //} Pull_Back(); } else // レバーを倒していない時(ここにはこない?) { //if (PlayerIndex.Player1 == player) //{ // //ebug.Log("止まっているぜ☆ input.leverX = " + input.leverX); //} } } else// 左も右も入力していなかったら { if (isGrounded)// 接地していれば { // 横移動の速度を0にしてピタッと止まるようにする Rigidbody2D.velocity = new Vector2(0, Rigidbody2D.velocity.y); } // 感覚的に、左から右に隙間なく切り替えたと思っていても、 // 入力装置的には、左から右(その逆も)に切り替える瞬間、どちらも押していない瞬間が発生する。 if (8 < animator.GetInteger(ThisSceneDto.IntegerLeverXNeutral))// レバーを放した 数フレーム目から、レバーが離れた判定をすることにする。 { //if (PlayerIndex.Player1 == player) //{ // //ebug.Log("Rigidbody2D.velocity.x = " + Rigidbody2D.velocity.x + " ストップ!"); //} if (isGrounded)// 接地していれば { animator.SetInteger(ThisSceneDto.IntegerActioning, (int)TilesetfileType.Stand); } } } //ebug.Log("leverY = "+ leverY + " player_to_rigidbody2D[" + iPlayer + "].velocity = " + player_to_rigidbody2D[iPlayer].velocity); if (0 != input.LeverY)// 上か下キーを入力していたら { if (!astateRecord.Tags.Contains(Animator.StringToHash(AControl.TAG_BUSYY))) { if (0 < input.LeverY) // 上キーを入力したら { if (isGrounded) // 接地していれば { // ジャンプするぜ☆ Pull_Jump(); } } else if (input.LeverY < 0) // 下キーを入力したら { if (isGrounded) // 接地していれば { // 屈むぜ☆ Pull_Crouch(); } } } } else // 下も上も入力していなかったら { } //} #endregion #region 行動 //if (buttonDownHP && buttonDownHK) //{ // //ebug.Log("投了☆!"); // Resign(); //} //else if (input.Lp.Down) { //ebug.Log("button BUTTON_03_P1_LP"); Pull_LightPunch(); } else if (input.Mp.Down) { //ebug.Log("button BUTTON_04_P1_MP"); Pull_MediumPunch(); } else if (input.Hp.Down) { //ebug.Log("button BUTTON_05_P1_HP"); Pull_HardPunch(); } else if (input.Lk.Down) { //ebug.Log("button BUTTON_06_P1_LK"); Pull_LightKick(); } else if (input.Mk.Down) { //ebug.Log("button BUTTON_07_P1_MK"); Pull_MediumKick(); } else if (input.Hk.Down) { //ebug.Log("button BUTTON_08_P1_HK"); Pull_HardKick(); } else if (input.Pause.Down) { //ebug.Log("button BUTTON_09_P1_PA"); } #endregion if (ThisSceneDto.ReadyTimeLength < mainCameraScript.ReadyingTime) { // 当たり判定くん Motor.Instance.Update(animator, AControl.Instance, player, transform, hitboxsSpriteRenderer, weakboxCollider2D); } }