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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Unity

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

Q&A

解決済

2回答

1580閲覧

Unityで、次のコードを書くとエラーになります。

middle

総合スコア28

Unity

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

0グッド

0クリップ

投稿2018/08/09 11:05

以下のコードを書き、ScriptableObjectを実体化すると、
「AmbiguousMatchException: Ambiguous matching in method resolution」と出てエラーになります。
なぜでしょうか?

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5namespace Database 6{ 7 [CreateAssetMenu(menuName = "ScriptableObject/Database/SystemColor")] 8 public class SystemColor : ScriptableObject 9 { 10 [SerializeField] Color m_Color; 11 } 12}

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

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

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

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

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

guest

回答2

0

AmbiguousMatchException クラス

この例外は、メンバーへのバインディングで、バインディングの基準に一致するメンバーが複数検出された場合にスローされます。

平たく言うと、メソッド呼び出しの際にオーバーロードがいくつかあり、引数の型ではそのどれにあたるか判断できなかった場合にこの例外がスローされます。
質問のコードではなく、メソッド呼び出し部分を見てください。

投稿2018/08/10 12:26

Zuishin

総合スコア28660

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

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

Zuishin

2018/08/10 12:45

リフレクションについてご存知のようなのでメンバーへのバインディングという言葉にも馴染みがあるとは思ったのですが、念のために一応解説しました。悪しからず。
middle

2018/08/10 12:47

メソッド呼び出し部分といっても、このクラスにアクセスするようなクラスは存在しないと思われます。 強いて言うなら、UnityのEditorがアクセスしていますが... そのような状態でこのクラスを作成し、右クリックで表示されるコンテキストメニューから実体化すると質問のエラーが出てしまいます。 メソッド呼び出し部分を特定する方法はありますか?
Zuishin

2018/08/10 12:49

スタックトレースを見てください。
middle

2018/08/10 12:58

質問文の通り、メソッドは何も定義していないのですよ? ですので、ScriptableObjectかUnityEngine.Colorで定義されているメソッドで例外がスローされているんですよ。 どのメソッドを呼び出そうとした際に例外がスローされているのか不明なので、スタックトレースを見る方法がない状況です。
Zuishin

2018/08/10 13:00

コンストラクタを定義して名前を色々変えて試してみてください。 例外の意味はわかりましたか?
middle

2018/08/10 13:09

うーん、コンストラクタの名前を変えても特に新しい情報はないですが... AmbigiousMatchException自体は分かるのですが、なぜこのコードでエラーが出るのか疑問なのです。 当然ですがColor m_Color;の行を消せば消えるので、UnityEngine.Colorに問題があると思われるのですが...
Zuishin

2018/08/10 13:10

コンストラクタの名前はクラスを変えないと変えられないでしょう。
Zuishin

2018/08/10 13:11

例外の意味がわかったなら色々が何を指すのか自明だと思ったのですが。
middle

2018/08/10 13:18

当然クラス名も変更していますよ。 コンストラクタ名を変えることに何の意味があるのかは私には分からないんですが、回答頂いたことを無為にするのは良くないのでとりあえずやってみた次第です。 失礼ながらUnityどれくらいお詳しいですか?本当にソリューションをご存知ならばそんな吐き捨てるような短文の回答しないで下さいよ。。私はソリューションを知らないから質問させてもらっているのですよ
Zuishin

2018/08/10 13:21

コンストラクタは定義してくださいとだけ言いました。 なぜだかわかりませんか? それでは ScriptObject から派生させた何も拡張しない別のクラスを新規作成してそれが同様の手順でインスタンス化できるか確かめてください。
middle

2018/08/10 13:28

「コンストラクタを定義して『名前を色々変えて』試してみてください。」って自分で仰ってるじゃないですか... 後述の文も、Color m_Color;の行を消せばエラーも消えるって2つ前の返信文に書きましたよね... Color型のメンバさえなければ正常に実体化できるのですよ、(私にとっては)不思議なことに。 .NETではなく「Unityの」AmbiguousMatchExceptionですよ?たぶん、一般的なソリューションは通用しないと思うのですが...
Zuishin

2018/08/10 13:29

色々がコンストラクタのことだと思ったのですか? なぜ複数回変える必要がありますか?
Zuishin

2018/08/10 13:31

ということは m_Color の変更は試していないということですね?
middle

2018/08/10 13:34

m_Colorの方でしたか!てっきりコンストラクタ名を変えよって意味かと思っちゃいましたよ
middle

2018/08/10 13:34

まあm_Colorを複数回変える理由もあるなら知りたいですが...
Zuishin

2018/08/10 13:38 編集

なぜ複数回変える必要がありますか?
Zuishin

2018/08/10 13:35

本当に例外の意味がわかってるんですか?
Zuishin

2018/08/10 13:47

m_Color の名称変更はまだですか? やってみてそれでもだめなら先ほど言った通り新しいクラスで試してください。
Zuishin

2018/08/10 13:56

何をやっているか理解できないので怒ってしまいましたかね? あなたの出す情報が小出しなのでこちらでインタラクティブに原因を調べているのです。
Zuishin

2018/08/10 23:28 編集

あとこれだけの情報から考えられるのはファイル名が正しくないという可能性ですかね?
guest

0

自己解決

Unityエディタが壊れていたことが原因のようです。
Unityを再インストールしたところ、直りました。

投稿2018/12/02 03:03

middle

総合スコア28

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問