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

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

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

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

Unity3D

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

Unity

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

Q&A

解決済

1回答

576閲覧

AddForceで力を加えて、velocity.magnitudeで速度を表示したいが、常に速度が0と表示されてしまう

tokiwokakeru

総合スコア25

C#

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

Unity3D

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

Unity

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

1グッド

1クリップ

投稿2019/08/02 05:25

編集2019/08/02 05:29

前提・実現したいこと

戦車から砲弾を発射する
こちらのチュートリアルの手順に沿って、砲弾を作成し発射させることができましたが、
なぜか速度ベクトルと速度が常に0と表示されてしまいます。

速度を正しく表示させたいです。

スクリプトは上記のサイトの4枚目のスライドにあります。

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

エラーメッセージは出ていません。

該当のソースコード

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class ShotShell : MonoBehaviour 6{ 7 8 public GameObject shellPrefab; 9 public float shotSpeed; 10 public AudioClip shotSound; 11 12 void Update() 13 { 14 15 // もしもZキーを押したならば 16 if (Input.GetKeyDown(KeyCode.Z)) 17 { 18 19 // 砲弾のプレハブを実体化する。 20 GameObject shell = Instantiate(shellPrefab, transform.position, Quaternion.identity) as GameObject; 21 22 // 砲弾に付いているRigidbodyコンポーネントにアクセスする。 23 Rigidbody shellRb = shell.GetComponent<Rigidbody>(); 24 25 // forward(青軸=Z軸)の方向に力を加える。 26 shellRb.AddForce(transform.forward * shotSpeed); 27 28 // 発射した砲弾を3秒後に破壊する。 29 Destroy(shell, 3.0f); 30 31 32 // 速度ベクトルを表示 33 Debug.Log("速度ベクトル: " + shellRb.velocity); 34 35 // 速度を表示 36 Debug.Log("速度: " + shellRb.velocity.magnitude); 37 } 38 } 39}

試したこと

イメージ説明
先ほどのサイトのチュートリアルに従って作成しました。
スクリプトのvelocity.magnitudenの箇所は自分で追加しました。

ウェブサイトで、velocity.magnitudeが0になる原因を調べましたが参考になるサイトはありませんでした。

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

Unity2019.1.2f1

bochan2👍を押しています

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

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

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

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

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

hogefugapiyo

2019/08/02 06:15

発射した時点でのを見ているみたいですが、これデバッグログをupdate内とかに移して発射したあとの値を確認したらどうなりますか?
tokiwokakeru

2019/08/02 11:21

ifの外側という事ですか? プレハブの扱いがまだよく分かっていなくて、外側に持っていくとshellRbを宣言していない、となります...。 かといって、if内の最初の2文を持ってくると、エラーになります...。
guest

回答1

0

ベストアンサー

質問頂きありがとうございます。
発射された直後しか速度を見ていないので速度は0
になります。
配列などでRigidBodyを保持しておいて毎フレーム読み出すか、新しいMonoBehaviorクラスを砲弾にアタッチしたら良いと思います。

投稿2019/08/02 06:13

bochan2

総合スコア2050

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

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

tokiwokakeru

2019/08/04 06:05

配列をまだ勉強していないので新しく別のスクリプトで速度を表示させるようにしました。 なんとか表示させることはできましたが、if文を使って力を1回だけ加えるようにすると速度が0になってしまいます。もう一回スクリプトを載せたいので別の質問としてテラレイルにアップしようと思います。
bochan2

2019/08/09 10:43

またの質問をお待ちしております。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問