Unity素人なのでその状況がどんな場合にあり得るか推測できませんが・・・
少なくとも単純に次のようにすると期待しておられることができているように見えました。
(1) シーン内に適当なGameObjectをObA, ObBとして配置
(2) ObA, ObBにそれぞれscript(C#) ScA, ScBをコンポーネントとして追加
(3) ScA, ScBをそれぞれ次のようにしてVisual Studio側でSave All
C#
1// ScA.cs
2using UnityEngine;
3public class ScA : MonoBehaviour {
4 public GameObject test;// = GameObject.Find("ObB");
5 public bool first = true;
6
7 void Start () {
8 test = GameObject.Find("ObB");
9 }
10
11 void Update () {
12 if (first) {
13 ScB scb = test.GetComponent<ScB>();
14 if (scb != null) {
15 scb.Test1();
16 } else {
17 Debug.Log("scb was null");
18 }
19 first = false;
20 }
21 }
22}
23
24// ScB.cs
25using UnityEngine;
26public class ScB : MonoBehaviour {
27 void Start() {
28 }
29
30 void Update() {
31 }
32
33 public void Test1() {
34 Debug.Log("Test1");
35 }
36}
(4) Unityに戻ってScAのインスペクターを見るとTest, Firstの両方が表示され、Testの内容は
Run前: None(Game Object)
Run後: ObB
となりました。
ところでVS2015のC#コンパイラーとUnityのそれは仕様に差異があり、scb?.Test1();
なんて書くとVS上ではcompile okなのですが、Unity側へ戻るとConsoleに
Assets/ScA.cs(...): error CS1525: Unexpected symbol '.', expecting '[' or 'identifier'
と表示され、VS側での変更が反映されません。そういうことが起きてないでしょうか?
Windos 10, Unity 5.4.0f3, VS2015(古いです...)