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

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

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

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

Q&A

解決済

2回答

7763閲覧

[Unity 3D] キャラクターが攻撃中に移動しない方法を教えてください。

creatorsGame

総合スコア18

C#

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

0グッド

0クリップ

投稿2019/05/06 13:46

unityで攻撃中に移動ができてしまうので困っています。
改善策を教えてください。

コードは「攻撃」と「移動」の二つに分けて使って、「攻撃」ではSetBoolと書いていますがAnimatorではTriggerを使っています。

攻撃アニメーター  攻撃コード
移動アニメーター+移動コード
上記の記事を参考に作りました。
長くてすいません...

「攻撃」 スクリプト名[Attack]

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Attack : MonoBehaviour 6{ 7 //PlayerのAnimatorコンポーネント保存用 8 private Animator animator; 9 10 // Use this for initialization 11 void Start() 12 { 13 //PlayerのAnimatorコンポーネントを取得する 14 animator = GetComponent<Animator>(); 15 } 16 17 // Update is called once per frame 18 void Update() 19 { 20 21 //左クリックで攻撃 22 if (Input.GetButtonDown("Fire1")) 23 { 24 animator.SetBool("Attack", true); 25 } 26 27 } 28 29}

「移動」 スクリプト名[Move]

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Move : MonoBehaviour 6{ 7 public Animator anim; 8 public bool isGround; 9 public RaycastHit hit; 10 11 public float InputHorizontal; 12 public float InputVertical; 13 public Rigidbody rb; 14 public float moveSpeed; 15 public GameObject Cam; 16 public Vector3 Cam_forward; 17 public Vector3 move_forward; 18 public Vector3 InputMagnitude; 19 20 void Start() 21 { 22 anim = this.gameObject.GetComponent<Animator>(); 23 rb = this.gameObject.GetComponent<Rigidbody>(); 24 } 25 26 void Update() 27 { 28 InputHorizontal = Input.GetAxis("Horizontal");   //横入力 29 InputVertical = Input.GetAxis("Vertical");     //縦入力 30 31 InputMagnitude = new Vector3(InputHorizontal, 0, InputVertical); 32 33 //移動 34 35 if (InputMagnitude.magnitude > 0.001f) 36 { 37 anim.SetFloat("Speed", InputMagnitude.magnitude); 38 } 39 else 40 { 41 anim.SetFloat("Speed", 0); 42 } 43 44 45 46 Cam_forward = Vector3.Scale(Cam.transform.forward, new Vector3(1, 0, 1)).normalized; 47 48 move_forward = Cam_forward * InputVertical + Cam.transform.right * InputHorizontal; 49 50 rb.velocity = move_forward * moveSpeed + new Vector3(0, rb.velocity.y, 0); 51 52 53 if (move_forward != Vector3.zero) 54 { 55 this.transform.rotation = Quaternion.LookRotation(move_forward); 56 } 57 58 } 59}

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

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

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

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

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

guest

回答2

0

ベストアンサー

現在再生しているアニメーションがAtackではないときに移動を受け付ければいいのではないでしょうか?
animator.GetCurrentAnimatorStateInfo(0).IsName("クリップ名")で現在のAnimatorの遷移状態が「クリップ名」か判断できるっぽいので、これを利用できませんか?

投稿2019/05/08 13:26

YAmaGNZ

総合スコア10222

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

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

creatorsGame

2019/05/08 14:50

すみません、この場合if( かっこ )のなかに何を入れれば良いしょうか。
YAmaGNZ

2019/05/09 12:42

MoveスクリプトのUpdateに入った時にAttackが再生中であればreturnすればいいんじゃないですかね? void Update() { if(anim.GetCurrentAnimatorStateInfo(0).IsTag("Attack")) { return; } InputHorizontal = Input.GetAxis("Horizontal");   //横入力 InputVertical = Input.GetAxis("Vertical");     //縦入力 みたいなかんじですかね。 ただ、私もUnityはほぼ知らない状態で、リファレンスや検索結果から書いているだけなので、あまり突っ込まれても分からない可能性が高いです。
creatorsGame

2019/05/09 14:27

攻撃中に移動しなくなりました。ありがとうございます。 ただ、たまに移動アニメーションがしなくなるなどの不具合があるので、またお聞きするかもしれませんが できるだけ自分でやっていこうと思います。 ありがとうございました。
guest

0

Attack内に攻撃中か否かのbool(InAttackとでもしましょう)を一つ容易して動作中切り替える。Move内にAttackのインスタンスを設置して、InAttackが正ならUpdateを早期リターンでキャンセルするとかどうでしょうね

投稿2019/05/06 20:35

DeadEndShoot666

総合スコア203

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

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

creatorsGame

2019/05/08 13:00

回答ありがとうございます。 自分はまず、Attackをboolに変えてアニメーターの方でチェックの付け外しを繰り返して確かめたのですが、上記の攻撃アニメーターの記事のように連続攻撃はアニメーターで制御しているので攻撃1はできても攻撃2がうまくできなかったりします。 なので、この記事https://gametukurikata.com/program/continuityattackを参考に攻撃中に移動できないスクリプトは作れるでしょうか。また、もっと良い方法があったら教えてください。お願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問