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

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

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

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

Unity

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

Q&A

解決済

2回答

7103閲覧

T型が任意のクラスを継承しているか判定するには?

MiyamotoSatoshi

総合スコア30

C#

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

Unity

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

0グッド

0クリップ

投稿2016/10/26 01:55

編集2016/10/26 05:10

Tがある方を継承しているかを調べる方法はないでしょうか?

public static string CheckClassType<T>() where T : UnityEngine.Object { // ここにTがUnityEngine.ScriptableObject型を継承しているかチェックを書きたい }

■環境
Unity5.4.1f1
Windows7
.NetFrameWork3.0
C#4.0

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

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

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

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

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

guest

回答2

0

こことか参考にしてみてください。

そのコードの例だと、肝心のT型を一切使ってないのでどう回答していいか難しいですね。
そもそも、クラスの型を知りたいなら以下のようなやり方で調べられますよ。

C#

1var a = GetObject(); 2var check = a as ScriptableObject; 3if (check == null) // 型変換できない場合はNULLが変える。ScriptableObjectを継承したクラスならScriptableObjectには変換できるのでScriptableObjectを継承しているかもわかる。

追記:
もしかしてこんな感じですかね?求めてるやつって

C#

1public static string CheckClassType<T>() where T : UnityEngine.Object 2{ 3 var baseType = typeof(T).BaseType; 4 if (baseType != null) 5 { 6 return baseType.ToString(); 7 } 8 else 9 { 10 return "継承クラスじゃない"; // UnityEngine.Object縛りがあるのでまず来ないはずですが 11 } 12} 13

投稿2016/10/26 02:43

編集2016/10/26 03:00
ishi9

総合スコア1294

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

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

MiyamotoSatoshi

2016/10/26 03:58 編集

わかりづらくてすいません、 Unityにリソースを復元するアセットバンドルと言う仕組みがあり アセットバンドルファイルのファイル名の接尾語が リソースタイプになっています。 Textureのアセットバンドルファイル名 例)abc.png ---> ハッシュ + _ + texture ただScriptableObjectの場合、 継承されているものしかなく接尾語を統一したいのでobjectとしています。 例えば Skill クラスの継承関係は Skill ---> ScriptableObject ---> Object となっています。 Card クラスの継承関係は Card ---> ScriptableObject ---> Object となっています。 継承先がskillの場合のアセットバンドルファイル名 例)skill.asset ---> ハッシュ + _ + object 上記が下準備になり、各担当者がリソースをロードすると こちらで用意した関数で変換して接尾語をつけそのファイルをロードするという目的です。 なので T が ScriptableObject を継承している場合、 "object" という文字列を返します。
MiyamotoSatoshi

2016/10/26 03:55 編集

汚いやり方ですが一応下記で判定できました。 public static string GetStringByClassType(System.Type type) { string returnString = ""; // ScriptableObjectを継承元に含むか? if (type.IsSubclassOf(typeof(UnityEngine.ScriptableObject)) == true) { returnString = ”object”; } return returnString; }
guest

0

自己解決

C#

1public static string GetStringByClassType(System.Type type) 2{ 3 string returnString = ""; 4 // ScriptableObjectを継承元に含むか? 5 if (type.IsSubclassOf(typeof(UnityEngine.ScriptableObject)) == true) 6 { 7 returnString = ”object”; 8 } 9 10 return returnString; 11 12}

投稿2016/10/26 05:11

MiyamotoSatoshi

総合スコア30

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問