【问题标题】:How to access script from multiple Game Objects?如何从多个游戏对象访问脚本?
【发布时间】:2018-07-30 09:03:58
【问题描述】:

我知道如何访问脚本,但不确定如何访问不同游戏对象的脚本?示例:

我有 1 辆车,名为“Vehicle1”,代码:

CarScript driveScript;

driveScript = GameObject.Find ("Vehicle1").GetComponent<CarScript > ();

这样我从 Vehicle1 访问 CarScript,但是如果另一辆车的名称是“Vehicle2”,我如何使用相同的脚本访问它?我知道自从 Unity 5 以来这是一种方法,但如果有多个对象可以访问,我不确定如何访问脚本。

任何帮助将不胜感激!

【问题讨论】:

  • "但是如果另一辆车的名称是“Vehicle2”",我如何使用相同的脚本访问它? GameObject.Find ("Vehicle2").GetComponent??
  • @Programmer 我说的是访问两辆车,而不仅仅是一个......

标签: c# unity3d


【解决方案1】:

如果你想获得许多相似的对象并使用类似GameObject.Find() 的东西,你需要使用GameObject.FindGameObjectsWithTag()。 因此,您将拥有标签“Vehicle”,并且许多具有不同名称的对象必须带有选定的标签“Vehicle”。

var vehicles = GameObject.FindGameObjectsWithTag("Vehicle");
foreach(var vehicle in vehicles)
{
    vehicle.GetComponent<CarScript>();
}

【讨论】:

    【解决方案2】:

    据我了解,您想访问具有相同组件的不同GameObjects,但如果它们的名称不同,则执行不同的操作?

    如果是这样,试试这个:

     CarScript[] carScripts = FindObjectsOfType<CarScript>();
    
     foreach(CarScript carScript in carScripts)
     {
         if(carScript.gameObject.name == "Vehicle1")
             print("I am vehicle 1!")
    
         if(carScript.gameObject.name == "Vehicle2")
             print("I am vehicle 2!") 
     }
    

    【讨论】:

      【解决方案3】:

      所以你想让Vehicle1Vehicle2 上检查isDrivingVehicle1 是否引用了 GameObjectVehicle2?如果是这样,您可以创建一个脚本变量并从 Vehicle2's GameObject 获取对它的引用

      scriptName vehicle2Script = vehicle2Obj.GetComponent<scriptName>();
      
      if (vehcile2Script.isDriving).........
      

      scriptName 是包含isDriving 的脚本的名称

      vehicle2Obj 是对GameObject 的引用,用于vehicle2

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多