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

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

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

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

Unity3D

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

Q&A

解決済

2回答

2913閲覧

向いている方向に進ませたい。(とても速い速度で)

obasuteyama-

総合スコア43

C#

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

Unity3D

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

0グッド

0クリップ

投稿2020/08/21 09:44

編集2020/08/21 15:09

前提・実現したいこと

初心者、windows10、語彙力がない
銃弾のプログラムが作りたい。
ワールドの座標とか関係なく向いている方向に進ませたい。

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

.AddForce(transform.forward...とすればできることを知ったけど、
速度が全くでなかった。

試したこと

.AddForce(transform.forward * 10000 ...として何倍にもしたけど、
速度は何も変わらなかった。

よろしくお願いします!

スクリプト

このような状態です
クリックしたら弾丸が出る感じで(別のスクリプトで)
重くなるので1秒たったら消そうと思っています。
弾丸のプレハブのスクリプト (変更済み)
イメージ説明
空のオブジェクトのスクリプト
イメージ説明

### 追加
弾丸のプレハブ
イメージ説明

空のオブジェクト
イメージ説明

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

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

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

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

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

guest

回答2

0

ベストアンサー

2020.08.22追記

スクリプトのスクショもありがとうございました。
弾丸のスピードが変わらなかったのは、弾丸のRotation指定などが悪影響していたかもしれません。

また、現在のスクリプトだとそもそも、 「向いている方向に発射する」 という仕様を実現できないと思うので、それぞれのスクリプトを以下の様に変更した方が処理がスッキリすると思われます。

「やはりスピードが変わらない」などあればご指摘ください
(弾丸となるカプセルオブジェクトは、こちらで少し工夫したので横を向いていますが、質問者様の方だともしかしたら向きがおかしくなるかもです。その場合は別途ご質問ください)

・弾丸のプレハブにアタッチするスクリプト(弾丸を削除する処理のみにする)

C#

1using UnityEngine; 2 3public class ExBulletPrefab : MonoBehaviour 4{ 5 public float timer = 1.0f; 6 7 void Update() 8 { 9 // 指定秒数後にオブジェクトを削除する 10 timer -= Time.deltaTime; 11 if (timer < 0.0) { 12 Destroy(this.gameObject); 13 } 14 } 15}

・空のオブジェクトにアタッチするスクリプト(こっちに、弾丸のスピードを持たせる)

C#

1using UnityEngine; 2 3public class ExBullet : MonoBehaviour 4{ 5 [SerializeField]private GameObject bulletPrefab; // 弾丸のプレハブ設定用 6 [SerializeField]private float shotSpeed = 10f; // 弾丸のスピード設定用(デフォルト"10") 7 8 9 void Update() 10 { 11 // マウス押下時処理 12 if (Input.GetMouseButtonDown(0)) { 13 14 // プレハブから、GameObjectを生成する 15 // ※このスクリプトがアタッチされているオブジェクト(Bulletオブジェクト)と同じ位置に生成する 16 GameObject bulletObj = Instantiate(bulletPrefab, transform); 17 18 // 生成されたGameObjectから"RigidBody"取得後、指定したスピードで動かす 19 bulletObj.GetComponent<Rigidbody>().AddForce(transform.forward * shotSpeed, ForceMode.Impulse); 20 } 21 } 22}

・弾丸オブジェクトのInspector
弾丸スクショ

↓動作結果(スピード"100"で連射)
サンプル


当初の回答

処理の方向性は合っているかと思います。
質問者様の処理も以下とほぼ変わらないかと思いますが、こちらの"AddForce"部分と同じ様な処理にしても速度は変わりませんでしょうか。
変わらない場合、弾丸となるGameObjectの、Inspectorのスクショを質問に追記頂けると助かります。

C#

1using UnityEngine; 2 3public class AddForceScript : MonoBehaviour 4{ 5 [SerializeField]private GameObject bullet; // <-弾丸となるオブジェクトを設定する 6 public float shotSpeed = 5000; 7 8 void Start() 9 { 10 bullet.GetComponent<Rigidbody>().AddForce(bullet.transform.forward * shotSpeed); 11 } 12} 13

以下、弾丸となるGameObjectのスクショ。
確認点は以下
・RigidBodyを付与しているか
・"Mass"プロパティの値が、極端に大きい値になっていいないか(大きい値ほど、速度が出にくい)

イメージ説明

投稿2020/08/21 13:55

編集2020/08/21 18:08
tsuki01

総合スコア1751

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

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

obasuteyama-

2020/08/21 14:32

回答ありがとうございます!とてもうれしいです! やってみましたが変わりませんでした。 もしかしたらと質量のところを0.1などとしてみましたが1のほうが進みました。 なぜでしょうか...
tsuki01

2020/08/21 14:46

処理をこちらが提示したソースに書き換えても、速さが変わらなかったってことですよね? こちらでは動作しているので、GameObjectの設定方法に問題があるのかもしれません。 弾丸のGameObject(Hierarchyウィンドウと、Inspectorウィンドウ)のスクショも質問に追記をお願いできますでしょうか? 質問内容とは別ですが、追加して頂いた修正前のソースコードは正常にオブジェクトがDestroyされていますでしょうか?処理内容が本当に問題ないのか気になりましたの。
obasuteyama-

2020/08/21 14:59

すみません、これでいいでしょうか? 弾丸のほうはプレハブでやっており、空のオブジェクトの位置にクローンする感じです。 ちいさくて見にくくなってしまっていてすみません。 Destroyはしっかりされていますよ。
guest

0

回答のようにしてみたらとてもうまくいきました!
空のオブジェクトに子のオブジェクトとしてクローンし、
向きもあってるし、スピードがとても出ました。
しかし、子のオブジェクトなので自身が動くと停止した弾丸が一緒に動いてしまいました。
なのでクローンされた直後に親子関係を解除するプログラムをしてやれば
自身が動いても一緒に動きませんし、とてもうまくいっています!
また、Collision Detection(衝突判定)のところを上から3番目(連続的かつ動的)にしてやると
壁のオブジェクトなんかにも一切貫通しなくなりました!
回答してくださったtsuki01さん本当いありがとうございました!

投稿2020/08/22 01:38

obasuteyama-

総合スコア43

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問