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

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

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

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

Unity3D

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

解決済

【Unity】ビリヤードゲームの作成について

M.hosokawa
M.hosokawa

総合スコア0

C#

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

Unity3D

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

2回答

0評価

0クリップ

28閲覧

投稿2018/05/13 13:52

前提・実現したいこと

簡単なビリヤードゲームをUnityで作ろうとしています。
まずは手玉がほかのボール(1~9)に当たった瞬間に、各ボールが弾くという処理を実装したいです。

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

9つのボールをくっつけた状態でゲームを開始すると、再生ボタンを押した瞬間にそれぞれの方向にボールが飛んで行ってしまいます。

該当のソースコード

C#

// 手玉にアタッチするスクリプト using System.Collections; using System.Collections.Generic; using UnityEngine; public class MyBallMove : MonoBehaviour { public float moveSpeed; private Rigidbody rb; // Use this for initialization void Start () { this.GetComponent<Rigidbody>().AddForce( (transform.forward + transform.right) * moveSpeed, ForceMode.VelocityChange); } // Update is called once per frame void Update () { } void OnCollisionEnter(Collision other) { //Ballタグは9つのボールのタグ if (other.gameObject.CompareTag("Ball")){ this.GetComponent<Rigidbody>().AddForce( (transform.forward + transform.right) * moveSpeed, ForceMode.VelocityChange); } } }
//1~9のボールにアタッチするスクリプト using System.Collections; using System.Collections.Generic; using UnityEngine; public class ReboundBall : MonoBehaviour { private float moveSpeed = 2.0f; private GameObject targetBall; // Use this for initialization void Start () { GameObject.Find("One").SetActive(false); GameObject.Find("Two").SetActive(false); GameObject.Find("Three").SetActive(false); GameObject.Find("Four").SetActive(false); GameObject.Find("Five").SetActive(false); GameObject.Find("Six").SetActive(false); GameObject.Find("Seven").SetActive(false); GameObject.Find("Eight").SetActive(false); GameObject.Find("Nine").SetActive(false); } // Update is called once per frame void Update () { } void OnCollisionEnter(Collision other) { if (other.gameObject.CompareTag("Ball")) { this.GetComponent<Rigidbody>().AddForce( (transform.forward + transform.right) * moveSpeed, ForceMode.VelocityChange); } } }

試したこと

9つのボールを非アクティブにし、手玉が当たった瞬間にアクティブ状態にすれば手玉が当たった瞬間に各ボールが弾かれる動きをするか
と思いましたが、GameObject.Find("ボールの名前").SetActive(false);
では、再生ボタンを押した瞬間にボールが消えてしまい、うまくいきません。

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

基礎的なことかもしれませんが、ご教示頂きたいです。
宜しくお願いいたします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

C#

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

Unity3D

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