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

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

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

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

Unity

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

Q&A

解決済

2回答

6913閲覧

[初心者]UnityでFPSを作っています。

gikokun

総合スコア7

C#

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

Unity

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

0グッド

0クリップ

投稿2016/06/14 14:08

###前提・実現したいこと
unityでFPSを作っています、今銃から弾を発射するscriptで悩んでいます。
###発生している問題・エラーメッセージ
scriptを作成後bullet,nozzleに該当してるprefabを入れても弾が速度をもって飛びません。

エラーメッセージ なし ###該当のソースコード ```C# using UnityEngine; using System.Collections; public class SC_bullet : MonoBehaviour { public GameObject bullet; public Transform bullet1; public Transform muzzle; public float speed = 1000f; // Use this for initialization void Start () { } // Update is called once per frame void Update () { if (Input.GetButton("Fire1")) { GameObject.Instantiate (bullet, muzzle.position, bullet1.rotation); Vector3 direction = (muzzle.position - transform.position).normalized; bullet.GetComponent<Rigidbody>().velocity = direction; } } } ###試したこと FPSで銃のノズルから弾を発射したいです。 ###補足情報(言語/FW/ツール等のバージョンなど) unity

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

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

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

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

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

guest

回答2

0

ベストアンサー

コードを見る限りいくつか気になる点があります。

  • 変数muzzleSC_bulletGameObjectが同じ位置にあった場合、directionが(0,0,0)になってしまい動かないと思います。
  • velocityに渡している値が正規化された向きを渡しているので小さな値になっています。スピードの値をかけた方がいいとおもいます。
  • Rigidbodyのパラメータを変更しているのが、GameObject.Instantiate()で生成されたGameObjectではなく、生成元のGameObjectを変更しているようです。

csharp

1using UnityEngine; 2using System.Collections; 3 4public class SC_bullet : MonoBehaviour 5{ 6 7 public GameObject bullet; 8 public Transform bullet1; 9 public Transform muzzle; 10 public float speed = 1000f; 11 12 // Use this for initialization 13 void Start() 14 { 15 16 } 17 18 // Update is called once per frame 19 void Update() 20 { 21 if( Input.GetButton( "Fire1" ) ) 22 { 23 var newBullet = GameObject.Instantiate( bullet, muzzle.position, bullet1.rotation ) as GameObject; 24 Vector3 direction = ( muzzle.position - transform.position ).normalized; 25 26 // 仮で向きベクトルが(0,0,0)無い場合は、z方向に進ませる 27 if( direction.sqrMagnitude <= Mathf.Epsilon ) 28 { 29 direction = Vector3.forward; 30 } 31 32 // GameObject.Instantiate()で生成されたオブジェクトに対して処理を行う 33 // speedが弾の速度のための変数かわかりませんが、とりあえず使ってみる 34 newBullet.GetComponent<Rigidbody>().velocity = direction * speed; 35 } 36 } 37}

以上の点を確認してみてください。

投稿2016/06/16 22:11

urahimono

総合スコア714

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

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

gikokun

2016/06/18 13:05

お手数かけました、解決しました!!
guest

0

velocityではなく、AddForceを使ったら意図通りに動かないですか?

http://docs.unity3d.com/jp/current/ScriptReference/Rigidbody.AddForce.html

投稿2016/06/14 14:22

edo_m18

総合スコア2283

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

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

gikokun

2016/06/16 13:45

addforceにしてもうまく動きませんでした><
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問