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

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

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

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Unity

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

Q&A

1回答

730閲覧

Unityでブロック崩しゲームを作っていて、残機数計算が途中で機能しなくなります。

Nanami_

総合スコア12

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Unity

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

0グッド

1クリップ

投稿2017/08/15 15:07

###前提・実現したいこと
こちらのサイトをみながら、Unityでブロック崩しゲームを作っています。

###発生している問題・エラーメッセージ
上記ウェブサイト中で、「ボールが消えたときに残機数を1減らし、残機数が1残っていればボールを再び出現させる」のタイトルのところで、見本通りにスクリプトを書きましたが、うまいくいきません。一つ目のボールはBottomWallにぶつかった後新しいボールが出てきて残機数が3→2に減るのですが、2つ目のボールはPlayer(ボールを跳ね返すバー)もBottomWallも貫通して(反応しない)、下まで落ちてしまいます。また、BottomWallに「ぶつかった」にも関わらず、残機数が2のままで減りません。
2つ目のボールもBottomWallにぶつかると残機数が2→1に減り、新しいボールがでてくるようにするには、どうしたら良いでしょうか?

エラーメッセージ

###該当のソースコード
どのソースが原因なのかわかりませんが、残機計算をするプログラムはBottomWall.Scriptに書きましたので、まずはこれを載せます。

JavaScriptです。

#pragma strict var obj :GameObject; var script :SceneScript; var ball :Transform; obj = GameObject.Find("SceneScript"); script = obj.GetComponent(SceneScript); function OnCollisionEnter (collision : Collision) { Destroy(collision.gameObject); if(script.life > 0){ Instantiate(ball); script.life--; } else if (script.life == 0){ Application.LoadLevel("GameOver"); } }

###試したこと
スペルのチェック
Unityを再起動

###補足情報(言語/FW/ツール等のバージョンなど)
Unityのバージョンは5.6.1f1。
エディターはAtomを使っています。

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

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

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

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

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

guest

回答1

0

ball変数に指定されているPrefabオブジェクトにColliderコンポーネントが付いていないのではないでしょうか。
確認してみてください。

投稿2017/08/15 23:44

sakura_hana

総合スコア11427

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

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

Nanami_

2017/08/16 11:45 編集

アドバイスありがとうございます。 「ball変数に指定されているPrefabオブジェクト」とはballのスクリプトのことで良いのでしょうか? BallScriptは、見本通りに書いて、Colliderコンポーネントの指示はありませんでした。OnCollisonEnterというのがColliderコンポーネントに当たるのでしょうか? スクリプトは下記です /// #pragma strict var Speed : float = 30.0; function Update () { if (Input.GetButtonUp("Jump") && GetComponent.<Rigidbody>().velocity == Vector3(0, 0, 0)){ } } function OnCollisionEnter () { GetComponent.<Rigidbody>().velocity = GetComponent.<Rigidbody>().velocity.normalized * 15; if (Mathf.Abs(GetComponent.<Rigidbody>().velocity.y) < 5) { GetComponent.<Rigidbody>().velocity.y *= 5; } if (Mathf.Abs(GetComponent.<Rigidbody>().velocity.x) < 5) { GetComponent.<Rigidbody>().velocity.x *= 5; } } ///
sakura_hana

2017/08/16 12:16

「BallオブジェクトをPrefab化して、BottomWallオブジェクトのInspectorパネルにあるBottomWallScriptのところに、BallのPrefabをドラッグ&ドロップで指定してください。」 このBallオブジェクトのPrefabのことです。 今気づいたんですがこのBallオブジェクト、元々Colliderコンポーネント付いていないんですね…… 普通物理演算させる場合、当たるオブジェクトに「Box Collider」などのColliderコンポーネントをつけます。 (「PlayerにCapsuleColliderの追加」で付けてるやつです) これが無くなると衝突しなくなるんで、これが存在しなくなってるのかな?と思ったんですが違うようです。 2個目のボールが生成されたタイミングで一時停止して、 Ballオブジェクト・Playerオブジェクト・BottomWallオブジェクトを見て、 オフになっているコンポーネントが無いか確認してみてください。
Nanami_

2017/08/16 13:33

なるほど、丁寧に解説くださってありがとうございます。 勉強になりますし、助かります。 Inspectorバネルの一番上、オブジェクト名のチェックボックスにチェックがついていれば、オンだという理解で大丈夫でしょうか?そうであれば、一時停止して確認しましたが、オフになっているコンポーネントはなさそうです。
sakura_hana

2017/08/17 05:39

> オブジェクト名のチェックボックスにチェックがついていれば、オン この認識で合っています。 全部オンであれば原因不明です……申し訳ありません。
Nanami_

2017/08/18 14:12

なるほど、そうですか、、 ご回答ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問