前提・実現したいこと
恐縮ですが、プログラミングの学習をはじめたばかりの初心者です。
現在, Unity ver.2020.3.4f1で1人称視点の3Dゲームを作成しています。
ゲームプレイ中、Raycastで衝突判定が起きたオブジェクトやプレイヤーが物体を拾うことでプレイヤーオブジェクトの子オブジェクトとして登録されたオブジェクトなどに付与されたC#スクリプト内の関数にアクセスする機能を実装しようとしています。
発生している問題・エラーメッセージ
調べたところ、Unityでほかオブジェクトに付与されているC#スクリプトを取得する際は、
参照するスクリプト名 変数名 = GetComponent<参照するスクリプト内のクラス名>();
で、参照できるということですが、上記のような実装をしようとした場合、Raycast衝突判定や子オブジェクト登録がされるまで該当のスクリプト名がわからず、困っています。
試したこと
その他、以下二つの方法を試しました。
RayHit.collider.GetComponent<Monobehavior>()
で、スクリプト名やクラスのタイプは取得できるが、RayHit.collider.GetComponent<Monobehavior>().hogehoge()
のように関数にアクセスしようとしてもできない。
(以下のサイトを参考にしました: https://www.ame-name.com/archives/6286)
Monobehavior
クラスを継承した抽象クラスTangible
を作り、そのなかでprotected abstract void hogehoge();
を定義、その後Tangible
を継承したクラス内でhogehoge()
をオーバーライドする。RaycastでTangible
を継承したクラスのスクリプトが付与されているゲームオブジェクトを参照した際、Tangible 変数名 = RayHit.collider.GetComponent<Tangible>()
のように参照するも、hogehoge()
には1つ目の試み同様、アクセスできない。
(以下の質問内容を参考にしました: https://teratail.com/questions/194289)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/04 06:09 編集