🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

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

ドラッグ&ドロップ

コンピューターのGUIにおいて、バーチャルなものを「つかむ」ことによって選択し、別の場所や他のバーチャルなものの上に動かす行為、またはその行為に対応していることを指す。

Unity

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

Q&A

解決済

1回答

2876閲覧

【Unity】ScriptableObjectにシーン内のGameObjectではなく、Scriptそのものをアタッチする方法

Enoki_Nameko

総合スコア8

C#

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

ドラッグ&ドロップ

コンピューターのGUIにおいて、バーチャルなものを「つかむ」ことによって選択し、別の場所や他のバーチャルなものの上に動かす行為、またはその行為に対応していることを指す。

Unity

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

0グッド

0クリップ

投稿2019/12/10 22:34

https://teratail.com/questions/33565

上記URLの質問を読んで、シーン内のオブジェクトにアタッチされているScriptならScriptableObjectにドラッグアンドドロップすることができたのですが、特にシーン内にオブジェクトを用意しておきたいわけではないので、Scriptそのものをアタッチすることはできないでしょうか?

public class SkillEffect : MonoBehaviour { public virtual IEnumerator Effect() { } } //他にもアイスボルトとか、そういった感じで演出を持ったスクリプトを作りたいと思っています。 public class Effect_FireBall : SkillEffect { public override IEnumerator Effect() { //処理 } } public class SkillData : ScriptableObject { public string skillName; public Sprite skillIcon; public string skillDescription; public int skillSp; public int damage; //ここにリソースフォルダからスクリプトをアタッチしてしまいたいのですが、やり方がよくわからないです。 public SkillEffect skillEffect; }

Prefab化したオブジェクトをアタッチすればいいんでしょうが、スキルが増えてくるとフォルダ内が散らかりそうだなぁ、と思い質問させていただきました。

ご教授よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

結論から言うと出来ません
ScriptableObject上にある変数に対してリソースフォルダからスクリプトをアタッチする理由が私には分からないので、そもそも考え方が違うのかなと思います。

変数に持つということは、そのクラスがインスタンス化(実体化)がされているということです。
MonoBehaviourを継承しているクラスの場合、インスタンス化はGameObjectにセットされた時に発生します。
なのでインスペクタからセットするには事前にGameObjectに付与されている必要があります。
(ちなみにScriptableObjectの場合はScriptableObjectファイルを生成時点でインスタンス化されます)

投稿2019/12/11 01:49

sakura_hana

総合スコア11427

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

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

Enoki_Nameko

2019/12/11 01:52

ありがとうございます!おとなしくPrefabを指定することにします!
sakura_hana

2019/12/11 02:03

一応指摘ですが、演出をやるならシーン上にGameObjectが存在する必要があると思います。 もしも「プロジェクトパネル内にPrefab作ってskillEffect.StartCorutineすれば動くだろ」と思っているなら多分そうはならないです。 「skillEffectにPrefabをセット→そのPrefabをInstantiate(新たなGameObjectを生成)→生成後のSkillEffectクラスのコルーチンを呼ぶ」というフローになるかと思います。
Enoki_Nameko

2019/12/11 02:20

PictureManagerというものでImageをもったPrefabを生成するつもりでした。中身は割愛しますが、 PictureManager.Instance.DrawPicture(引数); みたいな感じでエフェクト用のピクチャを生成するつもりでした。それらをすべてまとめ上げたものをEffect_FireBallに記述し、それを外部から呼びたかったんです。
sakura_hana

2019/12/11 02:31

全体のコードと何がどのオブジェクトに付いているのかが分からないのでそれでいいと断言は出来ませんが、理解されているなら問題無いです。余計なお世話だったかもしれません、すみません。
Enoki_Nameko

2019/12/11 02:35

いえ!お気遣いありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問