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

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

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

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Q&A

解決済

1回答

615閲覧

「Unity3D」キャラクターにアニメーションをアタッチすると動かなくなる原因が知りたい。

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

0グッド

0クリップ

投稿2022/04/09 02:26

編集2022/04/09 03:51

提示コードの下部のvoid Jump()関数ですが画像のアニメーションですがidleには何もアニメーションを設定していません。
jumpにはjumpするアニメーションを設定しています。質問ですがアニメーターコンポーネントをプレイヤーにアタッチして以下のスクリプトをアタッチしてゲームを実行するとプレイヤー動かないのですがこれは何が原因なのでしょうか?

色々デバッグしたのですが原因がわかりません。またAnimatorコンポーネントを無効にすると動きます。一体なぜでしょうか?
※移動はキャラクターコントローラーで行っています。

参考サイト https://gametukurikata.com/basic/questions

イメージ説明

PlayerControl.cs

cs

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5namespace Player 6{ 7 8 /* 9 * ################################################# 10 * プレイヤーコントロール 11 * ################################################# 12 */ 13 14 public class Control : MonoBehaviour 15 { 16 17 [SerializeField] const float walkSpeed = 10; //移動速度 18 [SerializeField] const float fallSpeed = 15; //落下速度 19 [SerializeField] GameObject weapon; //武器 20 private Vector3 moveSpeed; 21 private CharacterController controller; 22 private Vector3 moveVector = new Vector3(); 23 24 25 void Start() 26 { 27 controller = GetComponent<CharacterController>(); 28 } 29 30 void Update() 31 { 32 Animation(); 33 Move(); 34 Attack(); 35 Jump(); 36 } 37 38 /*########################################## アニメーション ##########################################*/ 39 private void Animation() 40 { 41 Vector3 move = Vector3.Scale(moveSpeed, new Vector3(1, 0, 1)); 42 GetComponent<CharacterController>().Move(moveSpeed * Time.deltaTime); //移動 43 44 moveVector = move.normalized; //移動向き 45 } 46 47 48 /*########################################## 移動 ##########################################*/ 49 private void Move() 50 { 51 float inputHorizontal = Input.GetAxis("Horizontal"); 52 float inputVertical = Input.GetAxis("Vertical"); 53 54 Quaternion horizontalRotation = Quaternion.AngleAxis(Camera.main.transform.eulerAngles.y,Vector3.up); 55 Vector3 velocity = horizontalRotation * new Vector3(inputHorizontal, 0, inputVertical).normalized; 56 57 if (velocity.magnitude > 0.3f) 58 { 59 transform.rotation = Quaternion.LookRotation(velocity, transform.up); 60 moveSpeed.x = (velocity * walkSpeed).x; 61 moveSpeed.z = (velocity * walkSpeed).z; 62 63 } 64 else 65 { 66 moveSpeed.x = 0; 67 moveSpeed.z = 0; 68 } 69 70 moveSpeed.y = -20; //落下重力 71 } 72 73 74 private void Attack() 75 { 76 if(Input.GetButtonDown("Circle") == true) 77 { 78 weapon.GetComponent<Animator>().SetTrigger("Attack"); 79 } 80 } 81 82 83 private void Jump() 84 { 85 if (Input.GetButtonDown("Cross") == true) 86 { 87 GetComponent<Animator>().SetTrigger("Jump"); 88 } 89 } 90 91 92 93 } 94}

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

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

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

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

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

m.ts10806

2022/04/09 02:42

自分で書いたコードではないんですよね。 出典を明示してください。
退会済みユーザー

退会済みユーザー

2022/04/09 02:56

いえ、自分で書いたコードです。
m.ts10806

2022/04/09 03:02

ではなぜ自分が書いたコードに対して赤の他人に説明求めるんですか?
退会済みユーザー

退会済みユーザー

2022/04/09 03:29

どういう意味でしょうか?原因がわからないので質問しているのですが
m.ts10806

2022/04/09 03:31

「そう動くように書かれているから」が他人に言えることです。 もしかして、自身で書いたコードを何も説明できないということですか?
m.ts10806

2022/04/09 03:34

言い換えれば「自分で書いて、理解しているならデバッグも多少はできるはず」という意味です。まさかここまでのコードを自分で書ける人が、デバッグを全くできないわけがないですから。 ただ、質問内容からするとデバッグを全く進めていないようなので、「自分で理解して書いていない」とこちらは理解しました。
fiveHundred

2022/04/09 04:29

とりあえず「void Update()」を「void LateUpdate()」にするとどうなりますか? (これで直った場合は後で詳細書きます)
m.ts10806

2022/04/09 05:28

>色々デバッグしたのですが 「色々」で伝わる情報量はゼロなので、具体的に。
bboydaisuke

2022/04/09 07:59 編集

「原因」は単純に「Unity のアニメーション機能によりキャラクターそのものの座標を制御(固定)してしまっているから、スクリプトから何をしようと動かない」なんでしょうけどね。Unity としては FAQ と言える問題だと思います。
退会済みユーザー

退会済みユーザー

2022/04/09 09:12

LateUpdateにしたら治りましたが、LateUpdateとは` Update 関数が呼び出された後に実行されます`という説明がありますがアニメーションによって座標が変更された後に呼び出されるから動くのでしょうか?
guest

回答1

0

ベストアンサー

コメント欄に記載した通り、「void Update()」を「void LateUpdate()」に変更すれば直ります。

LateUpdateにしたら治りましたが、LateUpdateとは Update 関数が呼び出された後に実行されますという説明がありますがアニメーションによって座標が変更された後に呼び出されるから動くのでしょうか?

その通りです。
こちらにある通り、アニメーションの後に実行されます。

投稿2022/04/09 09:54

fiveHundred

総合スコア9796

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

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

退会済みユーザー

退会済みユーザー

2022/04/10 02:23

なるほど質問ですがLateUpdate()に置いたら動いたのですが今度はジャンプが出来ません。Update()に置いたりLateUpdate()に置いたり逆にしたり色々試しましたがどちらか片方が行えません。これはなぜでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問