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

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

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

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

Unity

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

Q&A

解決済

1回答

1894閲覧

Unityでオブジェクトを結合したい

minokiti

総合スコア45

C#

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

Unity

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

0グッド

1クリップ

投稿2021/12/04 09:48

前提・実現したいこと

unityで分子を飛ばすゲームを作っています。
分子が衝突すると結合するようにしたいのですが衝突したオブジェクト両方がプレハブを作ってしまうので1回の衝突で2つオブジェクト
ができてしまいます。

発生している問題

イメージ説明

イメージ説明

該当のソースコード

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Hydrogen : MonoBehaviour 6{ 7 [Header("Molecule")] 8 public GameObject hydrogen_mol; 9 [Space] 10 public float weight; 11 public Vector2 force; 12 public Vector2 GeneratePos; 13 public Vector2 GenerateForce; 14 GameObject molecule; 15 16 void Update() 17 { 18 Rigidbody2D rb = GetComponent<Rigidbody2D>(); 19 rb.AddForce(force); 20 } 21 private void OnCollisionEnter2D(Collision2D collision) 22 { 23 if (collision.gameObject.tag == "Hydrogen") 24 { 25 GeneratePos = this.transform.position; 26 molecule = (GameObject)Instantiate(hydrogen_mol, GeneratePos, Quaternion.identity); 27 Rigidbody2D mol_rb = molecule.GetComponent<Rigidbody2D>(); 28 29 GenerateForce = new Vector2(mol_rb.velocity.x, mol_rb.velocity.y); 30 mol_rb.AddForce(GenerateForce); 31 Destroy(gameObject, 0f); 32 } 33 } 34}

補足情報(バージョン)

Unity 2021.2.0f1

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

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

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

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

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

guest

回答1

0

ベストアンサー

2つのHydrogenオブジェクトがそれぞれOnCollisionEnter2Dを実行するためでしょう。
ならば、2回起こさないようにすればいいと思います。

策1. 衝突時に誰と衝突したかを取得して片方だけ処理、もう片方は処理済みのフラグを立てて処理しない。
相手方をどうやって取得するかは考えないといけません。

策2. 2回に一回しか処理にないようにする。
接触は必ずペアで起こるとしたらこのような突貫の処理でもうまくいくかもしれません。

「unity 衝突 2つ」で検索するとこういうQiitaの記事もあるようですので検討してみてください。

投稿2021/12/16 17:21

vann_2921

総合スコア190

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

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

vann_2921

2021/12/16 17:30

蛇足ですが質問タイトルを変えたほうがいいと思います。 問題の要は衝突イベントが2回起こるのをうまく制御することだと思いますが「Unityでオブジェクトを結合したい」では何が問題なのかさっぱりわかりません。 また回答者も超人ではないため人の作ったよくわからないコードをみても答えられないと思います。 なので、やりたいことがあるときはなぜそれができないのか(今回だと2回起きてほしくない衝突が2回起きてしまう)を考えてから質問した方がいいと思います。
minokiti

2022/01/22 09:41

ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問