【发布时间】:2019-12-07 14:59:39
【问题描述】:
首先我要创建一个prefab。当我按 r 时,prefab 的颜色为红色。
现在,我按下按钮 c 并克隆 prefab。克隆的颜色现在默认为白色。但是第一个prefab 的颜色为红色,因此克隆也应该具有相同的颜色。
我试图获取prefab 的颜色,然后将其提供给克隆,不幸的是没有成功。
我现在的问题是,如何给预制件的克隆提供与主预制件相同的颜色?例如,当我创建三个预制件克隆并按 b 时,所有四个预制件都应该是蓝色的。
看看我下面的代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class globalControl : MonoBehaviour
{
public GameObject prefabInstance;
List<Object> prefabInstanceClones = new List<Object>();
GameObject capsule, sphere, cylinder;
private void Start()
{
capsule = GameObject.Find("Capsule");
sphere = GameObject.Find("Sphere");
cylinder = GameObject.Find("Cylinder");
}
void Update()
{
Debug.Log(prefabInstanceClones.Count);
if (Input.GetKeyDown("c"))
{
prefabInstanceClones.Add(Instantiate(prefabInstance, transform.position, Quaternion.identity));
}
if (Input.GetKeyDown("d"))
{
var last = prefabInstanceClones[prefabInstanceClones.Count - 1];
prefabInstanceClones.Remove(last);
Destroy(last);
}
if (Input.GetKeyDown("r"))
{
capsule.GetComponent<Renderer>().material.color = Color.red;
sphere.GetComponent<Renderer>().material.color = Color.red;
cylinder.GetComponent<Renderer>().material.color = Color.red;
} else if (Input.GetKeyDown("b"))
{
capsule.GetComponent<Renderer>().material.color = Color.blue;
sphere.GetComponent<Renderer>().material.color = Color.blue;
cylinder.GetComponent<Renderer>().material.color = Color.blue;
} else if (Input.GetKeyDown("g"))
{
capsule.GetComponent<Renderer>().material.color = Color.green;
sphere.GetComponent<Renderer>().material.color = Color.green;
cylinder.GetComponent<Renderer>().material.color = Color.green;
}
}
}
提前感谢您!期待您的回音。 :)
【问题讨论】:
-
您的
r、g、b键正在更改场景中已有对象的颜色,而不是预制件。
标签: c# visual-studio unity3d