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

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

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

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

Unity

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

Q&A

解決済

1回答

725閲覧

Unityで名前が事前にわからない他オブジェクトに付与されているC#スクリプトの参照方法

fuguTakahashi

総合スコア21

C#

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

Unity

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

0グッド

0クリップ

投稿2021/12/04 04:41

前提・実現したいこと

恐縮ですが、プログラミングの学習をはじめたばかりの初心者です。
現在, 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)

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

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

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

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

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

guest

回答1

0

ベストアンサー

protectedは「同じクラス内かそれを継承したクラス内でのみ参照できるようにする」という意味なので、protected abstract void hogehoge();ではなく、public abstract void hogehoge();とする必要があります。

投稿2021/12/04 04:53

fiveHundred

総合スコア10152

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

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

fuguTakahashi

2021/12/04 06:09 編集

ご回答ありがとうございました。 ご指摘の通り、 protected を public に変更すると期待通りの動きをいたしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問