我开始学习Unity。
据我了解,我们可以用C#文件的形式编写脚本(行为),并将它们应用到场景中的每个对象上。
但是如何为整个场景编写脚本?我知道这是一个显而易见的问题 - 必须有一个整个场景的脚本,以便我的所有对象"表现"以同步的方式,它必须是非常基本的,但初步的谷歌搜索并没有多少成果。
有人可以给我一个快速指南吗?
答案 0 :(得分:1)
带上你的"盒子"示例评论我会做以下事情:
BoxesController
... 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
方法中进行搜索和引用。
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”结合谷歌搜索“游戏经理”一词:)