今までアクセスできていたクラス、メソッドにアクセス出来なくなった…。
原因は2つ考えられます。
初心者がやりがちなパターン
クラスやメソッド、プロパティに public を付け忘れ、別のクラスから呼ぼうとした場合このエラーになります。
Visual Studio では ClassA.CallFunc() はアクセスできない保護レベルになっています。と日本語でエラーになっていると思います。
public static void CallFunc() にするとエラーは出なくなります。
なぜつける必要があるかについては C# のルールですので、これを機に勉強するといいかもしれません。
ClassA
using UnityEngine; public class ClassA : MonoBehaviour { // これのせいでエラーになる static void CallFunc() { Debug.Log("Function Called."); } }
ClassB
using UnityEngine; public class ClassB : MonoBehaviour { void Start() { ClassA.CallFunc(); } }
中級者がハマりがちなパターン
中級者の場合 public 付け忘れはまず考えられないと思いますが(protected や internal はワンチャン…?)、Assembly Definition でやらかしてしまう事があります。
この場合、2つのエラーメッセージを確認しました。
エラーその1
The type or namespace name 'ClassA' could not be found (are you missing a using directive or an assembly reference?)
こちらの方が直球のメッセージなのでわかりやすいですね。
Visual Studio 側では Assembly Definition を認識していないせいか、ちょっと見当違いのエラーメッセージになります。
エラーその2
'ClassA' is inaccessible due to its protection level
タイトルと同じく、こちらのエラーが出る場合もあるようです。なぜエラーその1にならないのかについては正直よくわかりませんでした…。
対処法
AssemblyB は AssemblyA を参照する必要があるので、インスペクタで参照設定を行います。
Assembly Definition Referenses で + ボタンを押し、AssemblyA をドラッグしてください。
最後に Apply ボタンを押します。
Visual Studio で参照設定するのは無意味ですので、やめましょう。
Assembly Definition を変更するとちょくちょく unity が固まってしまったり、コンパイルに失敗することがあるので、念のためエディタを再起動するといいかもしれません。