Unity - 如何为整个场景编写“行为”或脚本(在C#中)?

时间:2014-04-02 19:09:40

标签: c#-4.0 unity3d

我开始学习Unity。

据我了解,我们可以用C#文件的形式编写脚本(行为),并将它们应用到场景中的每个对象上。

但是如何为整个场景编写脚本?我知道这是一个显而易见的问题 - 必须有一个整个场景的脚本,以便我的所有对象"表现"以同步的方式,它必须是非常基本的,但初步的谷歌搜索并没有多少成果。

有人可以给我一个快速指南吗?

2 个答案:

答案 0 :(得分:1)

带上你的"盒子"示例评论我会做以下事情:

  1. 创建一个空的游戏对象,让我们称之为BoxesController ...
  2. BoxesController.cs脚本附加到
  3. 下方
  4. 在编辑器检查器中引用所有框
  5. BoxesController.cs

    public class BoxesController: MonoBehaviour 
    {
        public Transform box1, box2, box3;
    
        void Update() {
            // change boxes position
        }
    }
    

    现在想象你需要有>当前场景中的30个框...你将有很多工作来引用每个框。因此,如果向所有框添加Tag,则可以更改脚本。我们假设你在Unity Tag Manager中创建了一个名为" Box"并把它交给所有盒子。

    您现在可以将BoxesController.cs脚本更改为上述内容,您无需在编辑器检查器中引用所有框,因为它们将在Start方法中进行搜索和引用。

    BoxesController.cs

    public class BoxesController: MonoBehaviour 
    {
        public GameObject[] boxes; 
    
        void Start()
        {
            boxes = GameObject.FindGameObjectsWithTag("Box");
        }
    
        void Update() {
            // change boxes position
            foreach (GameObject go in boxes)
            {
                 //get box name
                 string box_name = go.Name;
                 // get box transform property
                 Transform t = go.transform;
    
            }
        }
    }
    

    请注意GameObject.FindGameObjectsWithTag是一项繁重的操作,这就是为什么我在Start方法中执行此操作并保存结果以在Update方法调用中重复使用它。< / p>

答案 1 :(得分:0)

你可以做的是创建一个空的GameObject并向其添加一个脚本,并使用链接中描述的技术之一来访问你想要移动的3个框。

http://docs.unity3d.com/412/Documentation/ScriptReference/index.Accessing_Other_Game_Objects.html

在这种情况下,您可能希望使用“1.通过检查员可分配的引用”。这只是意味着在脚本中创建一个公共Transform变量,保存,然后在Inspector中拖动脚本组件中出现的插槽中的框

编辑:为了进一步阅读,我建议用“Singelton”和“Unity”结合谷歌搜索“游戏经理”一词:)