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

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

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

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

Unity

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

Q&A

解決済

2回答

3267閲覧

UnityのScriptableObjectのメンバのUnityEventにメソッドが登録できない

BraveDragon

総合スコア15

C#

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

Unity

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

1グッド

1クリップ

投稿2020/03/12 08:58

前提・実現したいこと

UnityでScriptableObjectを利用しています。
UnityEventを継承して独自のイベントMyEventを作成し、ScriptableObjectを継承したクラスObjectMyEvent型のメンバ変数OnEffectLoadを定義しました。
InspectorビューからEffectA.effect()メソッドを指定しようと思ったのですが、以下の画像の通り、
イメージ説明
リストにEffectA.effect()メソッドが表示されません。どうすればEffectA.effect()メソッドを指定できるようになるでしょうか?
よろしくお願いします。

該当のソースコード

Object.cs

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.Events; 5 6[CreateAssetMenu(fileName = "Object", menuName = "Create Object")] 7public class Object : ScriptableObject 8{ 9 [SerializeField] public MyEvent OnEffectLoad = new MyEvent(); 10 11} 12 13[System.Serializable] public class MyEvent : UnityEvent<bool> { } 14

EffectA.cs

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.Events; 5 6[System.Serializable] public class EffectA : MonoBehaviour 7{ 8 [SerializeField] static public UnityAction<bool> Effect = new UnityAction<bool>(Effect); 9 10 [SerializeField] static public void effect(bool is1P) 11 { 12 //効果の記述 13 } 14}

試したこと

Object.csやEffectA.cs内の「[SerializeField]」を「[System.Serializable]」に変更したり、
その逆を行いましたが、結果は変わりませんでした。

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

Unityのバージョン:Unity2019.3.3f1
使用しているPC:Windows 10 Home

s.k👍を押しています

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

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

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

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

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

guest

回答2

0

もしかしたらスクリプトからEventを登録してみたらいけるかもです
http://negi-lab.blog.jp/ScriptableObject

URL踏んでもらってCtrl+F
「loadCharacterButton.onClick.AddListener」のところです

投稿2020/03/12 19:37

編集2020/03/12 19:40
U_U_Jenkins

総合スコア110

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

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

0

自己解決

空のGameObjectを作ってプレハブ化し、そこにスクリプトをアタッチして、そのスクリプトにpublicvoid型のメソッドを定義することで、Inspectorビューからスクリプト内のメソッドが指定できるようになりました。

実装の際に詰まった点がありますので追記しておきます。
この方法で登録したメソッドを呼び出す場合、スクリプトをアタッチしたGameObjectを呼び出し元のSceneと同一のSceneに配置する必要があります。
そうしておかないと登録したメソッドが実行されません。
もしかしたら配置しなくても登録したメソッドを実行させる方法があるかもしれませんが、少なくとも私がやった限りでは配置しないと実行できませんでした。

投稿2020/03/16 04:48

編集2020/06/23 08:42
BraveDragon

総合スコア15

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問