質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

2556閲覧

Unityでコンボ攻撃をしたい

dedede914

総合スコア62

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/09/19 10:04

編集2020/09/20 04:01

前提・実現したいこと

prefabを使ったコンボ攻撃を実現したい
キャラ本体から離れたところから手(出てくる手をprefabにしました)が出てきてパンチするというものです
3コンボを考えていているが、ボタンを押すと3つ同時に表れてしまう
攻撃する本体にpunchnumという変数を持たせて、ボタンを押すごとに+1し、
punchnum%3で場合分けしてコンボ攻撃ができるか試してみましたがうまいこと行きませんでした
普通のパンチキックコンボみたいに、本体のアニメーション遷移でコンボしたいわけではないのでstatemachinebehaviourをはっつけてどうこうではないかなと思い、上の手段を取りました

発生している問題・エラーメッセージ

ひとつずつ表示したい

該当のソースコード

C#

1//追加1個目 2public class playermanager : MonoBehaviour 3{ 4 public static int punchnum; 5   public void setpunchnum() 6 { playermanager.punchnum += 1;} 7 8 public int getpunchnum() 9 { return playermanager.punchnum ; } 10 11 public void resetpunchnum() 12 {playermanager.punchnum = 0;} 13 14  Update() 15 {Punch();} //エラー 16 17  void Punch() 18 { 19 if (Input.GetKeyDown(KeyCode.Space)) 20 { 21 playermanager playermanager = new playermanager(); 22 punch1 punch1 = GetComponent<punch1>(); //普通にインスタンス化したらnullが出たので何となくこうしました 23 punch2 punch2 = GetComponent<punch2>(); 24 punch3 punch3 = GetComponent<punch3>(); 25 26 animator.SetTrigger("attack"); 27 UnityEngine.Debug.Log(playermanager.getpunchnum()); 28 switch (playermanager.getpunchnum()) 29 { 30 31 case 0: 32 punch1.Punch();  33 break; 34 case 1: 35 punch2.Punch(); 36 break; 37 case 2: 38 punch3.Punch(); 39 break; 40 } 41 playermanager.setpunchnum(); 42 if (playermanager.getpunchnum() >= 3) playermanager.resetpunchnum(); 43 } 44 } 45}

C#

1//追加2個目 2//punch2とpunch3もあります 3public class punch1 : MonoBehaviour 4{ 5 public Transform punchtyu; 6 public GameObject punchtyufab; 7 public Transform appearpoint; 8 public GameObject appearpointprefab; 9 10 public void Punch() 11 { 12 Instantiate(punchtyufab, punchtyu.position, transform.rotation); 13 Instantiate(appearpointprefab, appearpoint.position, transform.rotation); 14 } 15} 16

C#

1//こちらはいったん忘れていただいて 2//Punch1()と同じように2,3もあります 3void Punch() 4 { 5 playermanager playermanager = new playermanager(); { 6 if (Input.GetKeyDown(KeyCode.Space)){ 7 if (playermanager.punchnum % 3 != 0) {   //Punchの種類によって !=0,1,2で場合分け 8 UnityEngine.Debug.Log("1 another"); 9 } 10 else{ 11 UnityEngine.Debug.Log("punch1"); 12 UnityEngine.Debug.Log(playermanager.punchnum); 13 //animation 切り替える 14 animator.SetTrigger("attack"); 15 Instantiate(punchtyufab, punchtyu.position, transform.rotation); 16 Instantiate(appearpointprefab, appearpoint.position, transform.rotation); 17 playermanager.setpunchnum(); 18 UnityEngine.Debug.Log(playermanager.punchnum); 19 } 20 } 21 }

試したこと

デバッグは3回目のボタン以降punch~ も anotherも出ず数字しか出てこなくなります
1回目のボタンでpunch1とpunch2が表れて
another3
punch1
0
1
punch2
1
2

2回目のボタンでpunch1,2,3すべて表れて
punch3
2
3
3
4
4
5

補足情報(FW/ツールのバージョンなど)

ここによ

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

i_zna

2020/09/19 11:00

貼られた部分だけではさっぱり解りかねます。 回答にはpunch2()、punch3()、playermanager.setpunchnum()の中身が必要かと思います。 (すぐ実行できるMonoBehaviour1枚に書き直して全文貼っていただけると、より答えやすいです)
guest

回答1

0

ベストアンサー

…と思ったんですが、Punch1~3を同時に呼んでそれぞれの先で実行の判断をさせているようですね。
根本で分岐したほうが早いんじゃないでしょうか。

C#

1void Punch() 2{ 3 playermanager playermanager = new playermanager(); 4 if (Input.GetKeyDown(KeyCode.Space)){ 5 switch (playermanager.punchnum) { 6 case 0: 7 Punch1(); 8 break; 9 case 1: 10 Punch2(); 11 break; 12 case 2: 13 Punch3(); 14 break; 15 } 16 playermanager.punchnum++; 17 if (playermanager.punchnum >= 3) playermanager.punchnum = 0; 18 } 19}

投稿2020/09/19 12:01

i_zna

総合スコア198

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dedede914

2020/09/20 03:58

ありがとうございました  詳細を追加しました是非確認してください 参考にさせてもらってやってみましたが複数同時に出るし、nullが出てしまいます インスタンス化のところが問題なんでしょうか 下記エラーが出てきましす NullReferenceException: Object reference not set to an instance of an object playermanager.Punch () (at Assets/program/playermanager.cs:126) playermanager.Update () (at Assets/program/playermanager.cs:32)
dedede914

2020/09/20 05:42

すみません まとめてひとつのスクリプトにしたらできました ありがとうございました!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問