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

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

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

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

Unity

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

Q&A

解決済

2回答

329閲覧

Unityの衝突判定の汎用プログラムが、どういう理屈で動いているのかが分からない。

Mirai_Unity_fun

総合スコア1

C#

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

Unity

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

0グッド

0クリップ

投稿2025/01/01 15:33

実現したいこと

  • [ ]衝突判定の汎用プログラムの作成

前提

ある衝突判定を検知するためのオブジェクトを作成し、そのオブジェクトにこのスクリプトをアタッチする。そのオブジェクトのコライダーに衝突しているオブジェクトを感知し、指定したイベントを呼び出す。また、その時、そのイベントに引数として衝突したオブジェクトを渡す。

該当のソースコード

`C#
using System;
using UnityEngine;
using UnityEngine.Events;

[RequireComponent(typeof(Collider))]
public class CollisionDetector : MonoBehaviour
{
[SerializeField]
TriggerEvent onTriggerStay = new TriggerEvent();

private void OnTriggerStay(Collider other) { onTriggerStay.Invoke(other); } [Serializable] public class TriggerEvent : UnityEvent<Collider> { }

}

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

Unityで入門書を購入し、そのコードを書いていたときに、急に難しい文法が出てきて、挫折してしまいました。解説を読んでも、Serializableというものが何なのか、なぜ新しいクラスを作成しているのかなどの説明がなく、ここに質問をしたら解決するかもしれないと思い、質問させていただきました。初めての質問なので説明不足なところがあるかもしれませんが、よろしくお願いします。

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

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

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

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

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

maisumakun

2025/01/01 23:50

> Serializableというものが何なのか、なぜ新しいクラスを作成しているのかなどの説明がなく これらのものは、「衝突判定」という問題の解決そのものに関係する話では、おそらくありません。 「文法を知りたい」のか、「衝突判定の処理」について学びたいのか、まずは片方に絞ったほうがいいかと思います。
Mirai_Unity_fun

2025/01/02 12:30 編集

アドバイスありがとうございます🙇 初めての質問なので、至らぬ点があったかもしれません。 次からは、より質問の意図を明確に示すよう改善します! maisumakunさん、貴重なご意見をありがとうございます!
guest

回答1

0

ベストアンサー

単に衝突時の処理を行うだけであれば、以下で十分です。

C#

1using System; 2using UnityEngine; 3 4public class CollisionDetector : MonoBehaviour 5{ 6 private void OnTriggerStay(Collider other) 7 { 8 // 衝突時の処理 9 } 10}

[RequireComponent(typeof(Collider))]については、Colliderを必須にする、というものです。
これがある場合、Colliderが無いオブジェクトにアタッチすることが出来なくなります。
これは必須でありませんが、「Colliderが必要なのに無かった」ということを防ぐことができます。

残りは「インスペクター上でonTriggerStayを設定できるようにする」ための処理です。
通常ではその変数に[SerializeField]をつけるだけでいいのですが、クラスの場合だと型のほうにも[Serializable]を付ける必要があるので、そのためのクラス定義です。

投稿2025/01/02 08:58

fiveHundred

総合スコア10177

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.34%

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

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

質問する

関連した質問