将单个Object分配给多个脚本 - 多少个实例

时间:2016-03-21 07:33:40

标签: c# unity3d

我有两个类 clsA,clsB (两者都是非静态的)。 clsB 附加到20 GameObject,而clsA仅附加到单个GameObject。  现在, clsB 正在使用 ClsA 作为参考。我在 clsB 中创建了一个 clsA 游戏对象的公共变量,现在在clsB中访问其属性,获得了20个Gameobjects(意味着20个脚本到20个gameoBjects)。

我的简单  问题天气全部20包含一个 clsA 对象或全部包含(ClsA)不同的对象/实例。

我知道值类型和引用类型之间的区别,但此时我混淆因为我遇到了一些问题然后我很好地问这个问题  自己的理解说,所有20个脚本( clsB )只有单个clsB实例。请尽快澄清。

作为答案建议我使用此代码来获取实例ID。令人惊讶的是它显示了相同的实例ID。

avgManager = GameObject.Find("AGV Manager").GetComponent<AVGManager>();
        Debug.Log(gameObject.name  + " : " + avgManager.GetInstanceID());

2 个答案:

答案 0 :(得分:1)

每个clsB都有自己的clsA实例。由于有20个ClsB,因此将有20个clsA对象。您可以通过在visual studio调试器中执行 - Make Object ID来验证这一点。

将变量添加到监视窗口,右键单击变量并选择MakeObjectId。再次对其中的clsB和clsA的不同实例执行此操作。如果它们不匹配相同的id,则可以确定它们不是同一个实例。

答案 1 :(得分:0)

我的简单答案是所有20包含一个clsA对象,它们只是一个实例并分配给所有20个对象,因为我按实例ID检查所有显示相同的Id(表示实例编号)。

public static void saveImage(String imageUrl) throws Exception{
     URL url = new URL(imageUrl);
     HttpURLConnection con = (HttpURLConnection) url.openConnection();
     con.setRequestMethod("GET");
    String fileName = "./" + con.getHeaderField("Content-Disposition").split("filename=")[1]; 
    FileUtils.copyURLToFile(url, file);
} 

avgManager 分配到20个位置,所有20个位置显示相同的实例ID。 GetInstanceID 返回对象的实例ID。