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

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

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

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

Unity

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

Q&A

解決済

1回答

2134閲覧

Unity(C#)を使ったゲーム作りで戸惑ってます助けてくださいm(_ _"m)

iZu-chan

総合スコア7

C#

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

Unity

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

0グッド

0クリップ

投稿2017/04/04 07:27

###前提・実現したいこと
プログラム学習歴1か月のTHE初心者です
unityでFPSを作ってるのですが、武器の切り替えがうまくいきません
やり方の例などを教えてほしいです。

###発生している問題・エラーメッセージ
エラーはでません
切り替えたら指定のコードが次に切り替えるまでずっと実行されるようにしたいのですが....なんか無理です(頭が破裂しそう

エラーメッセージ

###該当のソースコード

float

1 if (wheel == -0.1f) 2 { 3 changeWeapon(); 4 Debug.Log("回"); 5 } 6 } 7 public void changeWeapon() 8 { 9 type = (type + 1) % num; 10 Debug.Log("武器は" + type); 11 if (type == 0) 12 { 13 Debug.Log("0."); 14 attack01_gun(); 15 } 16 else if 17 (type == 1) 18 { 19 Debug.Log("1."); 20 attack02_bom(); 21 } 22 } 23 private void attack01_gun() 24 { 25 //左クリックしたら 26 if(Input.GetMouseButton(0)) 27 { 28 if (bullet < 1) 29 return; 30 Shot(); 31 bullet--; 32 gunsound.Play(); 33 } 34 } 35 //以下、他人様のコードをコピペしたもの 36 private void attack02_bom() 37 { 38 if (Input.GetMouseButton(0)) 39 { 40 Vector3 pos = transform.position + transform.TransformDirection(Vector3.forward); // プレイヤー位置 + プレイヤー正面にむけて1進んだ距離 41 GameObject bom = Instantiate(prefab_bom, pos, Quaternion.identity) as GameObject; // 手榴弾を作成 42 43 Vector3 bom_speed = transform.TransformDirection(Vector3.forward) * 5; // 手榴弾の移動速度。『プレイヤー正面に向けての速度ベクトル』を5。 44 bom_speed += Vector3.up * 5; // 手榴弾の『高さ方向の速度』を加算 45 bom.GetComponent<Rigidbody>().velocity = bom_speed; // 手榴弾の速度を代入 46 47 bom.GetComponent<Rigidbody>().angularVelocity = Vector3.forward * 7; // 手榴弾を回転速度を代入. 48 } 49 }//おっおっ(^ω^)

###試したこと
デバッグ.ログで間違えて記述していないか試しましたが問題ありませんでした

###補足情報(言語/FW/ツール等のバージョンなど)
Unity(ver.5.5.0f3),C#

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

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

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

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

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

guest

回答1

0

ベストアンサー

ソースの正確な意図がイマイチよく分からないので憶測でいろいろつけてみると、

c#

1 /* なんかのオブジェクトのUpdate関数の中身かな? */ 2 if (wheel == -0.1f) //武器変更の条件を満たしていれば 3 { /* 武器変更時の処理 */ 4 changeWeapon(); 5 Debug.Log("回"); 6 } 7 } 8 public void changeWeapon() 9 { 10 /* 武器変更処理 */ 11 type = (type + 1) % num; 12 Debug.Log("武器は" + type); 13 /* typeに応じて武器を使用 */ 14 if (type == 0) 15 { 16 Debug.Log("0."); 17 attack01_gun(); 18 } 19 else if 20 (type == 1) 21 { 22 Debug.Log("1."); 23 attack02_bom(); 24 } 25 } 26 /* 以下省略 */

みたいな感じかなあと勝手に解釈してみると、
今のソースではchangeWeapon関数内で、武器の「変更」と「使用」をどっちもやっていて、
しかもchangeWeapon関数が呼ばれるのは武器変更の条件が満たされた時だけだから、
それ以外の時には武器の「変更」は行われないけど「使用」も行われないってワケ。

つまり、武器を変更したか関係なく使用してほしいんだったら、武器の「変更」と「使用」を別々に分けなければならない。
とりあえずuseWeapon関数を新しく作り、武器の「使用」を分けてみると、

c#

1 /* 武器使用 */ 2 public void useWeapon() 3 { 4 /* typeに応じて武器を使用 */ 5 if (type == 0) 6 { 7 Debug.Log("0."); 8 attack01_gun(); 9 } 10 else if 11 (type == 1) 12 { 13 Debug.Log("1."); 14 attack02_bom(); 15 } 16 } 17 /* 武器変更処理 */ 18 public void changeWeapon() 19 { 20 type = (type + 1) % num; 21 Debug.Log("武器は" + type); 22 }

という感じになる。
それで、あとは適切なタイミングで武器の「変更」と「使用」を行う。
後半のソースを見ると恐らく武器使用の条件は「if (Input.GetMouseButton(0))」であるので、
Update関数の中身は、

c#

1 /* なんかのオブジェクトのUpdate関数の中身かな? */ 2 if (wheel == -0.1f) //武器変更の条件を満たしていれば 3 { /* 武器変更時の処理 */ 4 changeWeapon(); 5 Debug.Log("回"); 6 } 7 if (Input.GetMouseButton(0)) //武器使用の条件を満たしていれば 8 { /* 武器使用 */ 9 useWeapon(); 10 } 11 }

みたいな感じになる。これで後半2つの関数では武器使用の条件を満たしているかの判定が不要になるので、
今までのことを全部まとめたソースを作ると、

c#

1 /* なんかのオブジェクトのUpdate関数の中身かな? */ 2 if (wheel == -0.1f) //武器変更の条件を満たしていれば 3 { /* 武器変更時の処理 */ 4 changeWeapon(); 5 Debug.Log("回"); 6 } 7 if (Input.GetMouseButton(0)) //武器使用の条件を満たしていれば(左クリックしたら) 8 { /* 武器使用 */ 9 useWeapon(); 10 } 11 } 12 /* 武器使用 */ 13 public void useWeapon() 14 { 15 /* typeに応じて武器を使用 */ 16 if (type == 0) 17 { 18 Debug.Log("0."); 19 attack01_gun(); 20 } 21 else if 22 (type == 1) 23 { 24 Debug.Log("1."); 25 attack02_bom(); 26 } 27 } 28 /* 武器変更処理 */ 29 public void changeWeapon() 30 { 31 type = (type + 1) % num; 32 Debug.Log("武器は" + type); 33 } 34 private void attack01_gun() 35 { 36 if (bullet < 1) 37 return; 38 Shot(); 39 bullet--; 40 gunsound.Play(); 41 } 42 //以下、他人様のコードをコピペしたもの 43 private void attack02_bom() 44 { 45 Vector3 pos = transform.position + transform.TransformDirection(Vector3.forward); // プレイヤー位置 + プレイヤー正面にむけて1進んだ距離 46 GameObject bom = Instantiate(prefab_bom, pos, Quaternion.identity) as GameObject; // 手榴弾を作成 47 48 Vector3 bom_speed = transform.TransformDirection(Vector3.forward) * 5; // 手榴弾の移動速度。『プレイヤー正面に向けての速度ベクトル』を5。 49 bom_speed += Vector3.up * 5; // 手榴弾の『高さ方向の速度』を加算 50 bom.GetComponent<Rigidbody>().velocity = bom_speed; // 手榴弾の速度を代入 51 52 bom.GetComponent<Rigidbody>().angularVelocity = Vector3.forward * 7; // 手榴弾を回転速度を代入. 53 }//おっおっ(^ω^)

てな感じだと思われまする。

投稿2017/04/04 09:44

grainrigi

総合スコア43

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

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

iZu-chan

2017/04/04 15:17

この通りにやったらうまくいきました。 わかりやすく教えていただきありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問