我想使用单个脚本更改Unity中多个游戏对象的颜色。我有点失去了怎么做的方式。我是Unity的新手,这对我来说是一种基本的训练。
Unity版本:5.3.4
观察到的行为:
向其他游戏对象添加了相同的脚本,并且所有脚本都改为相同的颜色
预期行为:
单独更改游戏对象的颜色
尝试的事项列表:
使用-FindGameObject -
尝试使用-GameObject -
访问材料同时尝试了两次
在多个脚本中思考以实现我想要的结果
这是代码
C#:
>boxTidwell(prestige ~ income + education, ~ type + poly(women, 2), data = Prestige)
## Score Statistic p-value MLE of lambda
## income -4.482406 0.0000074 -0.3476283
## education 0.216991 0.8282154 1.2538274
## iterations = 8
也许我做错了,因为我说我是Unity的新手,我很乐意接受任何帮助,如果它不友善则更好。
由于
答案 0 :(得分:0)
有几种不同的方法可以做到这一点。
如果它们都在同一个父母的下面而没有其他对象那么你也可以遍历孩子并改变他们的颜色
GameObject Parent = GameObject.Find("ParentObject");
for( int x = 0; x > Parent.transform.childCount; x++);
{
Parent.transform.GetChild(x).GetComponent<Renderer>().material.color = Color.red;
}
如果小于20ish,则可以创建一个列表,并在将列表大小更改为您拥有的对象数后,将每个变换拖放到检查器中。
/*Make sure you have Using "System.Collections.Generic" at the top */
//put this outside function so that the inspector can see it
public List<Transform> Objs;
// in your function put this (when changing the color)
foreach(Transform Tform in Objs){
Tform.GetComponent<Renderer>().material.color = Color.red;
}
与2类似,如果您想在代码中完成所有操作
//Outside function
public List<Transform> Objs;
//inside function
Objs.Add(GameObject.Find("FirstObject").transform);
Objs.Add(GameObject.Find("SecondObject").transform);
//... keep doing this
//now do the same foreach loop as in 2
你可以按标签搜索(如果你有很多对象)(我想这会花费更长的时间,因为它会通过每个组件,但我没有证据支持它)< / p>
//Outside function
public GameObject[] Objs;
//inside function
Objs = GameObject.FindGameObjectsWithTag("ATagToChangeColor");
foreach(Transform Tform in Objs){
Tform.GetComponent<Renderer>().material.color = Color.red();
}
关于这个评论:
//If I change these variables to -GameObject- //It blocks me to access the renderer //Making the variables public doesn't work either
如果你使用GameObject类型,那么只需这样就可以轻松访问渲染器:
public GameObject cube;
public void Start(){
cube.GetComponent<Renderer>().material.color = Color.red();
}
使变量公开允许unity的检查器查看变量,以便您可以在统一编辑器中更改它们而无需打开脚本。