簡體   English   中英

更改預制實例的顏色

[英]Change color of prefab instances

我的斷言中有兩個預制件。 在我的場景中,我有兩個預制件的實例。 我試圖通過單擊按鈕來更改一個預制件的所有實例的顏色,但是我得到的是兩個預制件的所有實例的顏色都改變了。 我如何指示預制件在特定功能內進行更改? 我猜想gameObject指的是我場景中的所有gameObjects,可能就是所有實例更改顏色的原因。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class eventSensors : MonoBehaviour {


    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {

    }

    public void tempSensor() {

        print("estas en la funcuion de tempSensor");
        // this.gameObject.GetComponent<Renderer> ().material.color = Color.red;
        //gameObject.GetComponent<Renderer>().sharedMaterial.color = Color.red;
   var prefab=     Instantiate(gameObject, transform.position, transform.rotation);

        prefab.GetComponent<Renderer>().material.SetColor("_Color", Color.red);
    }
    public void lightSensor()
    {
        print("estas en la funcuion de lightSensor");
       gameObject.GetComponent<Renderer>().sharedMaterial.color = Color.green;

    }
    //Sent to all game objects before the application is quit
    //this is called when the user stops playmode.
    private void OnApplicationQuit()
    {
        //reset all prefab color to default
        gameObject.GetComponent<Renderer>().sharedMaterial.color = Color.white;
    }
}

只需調用GetComponent<Renderer>().material.colorRenderer.material返回材質的實例,而不是共享的實例。

當渲染器包含多種材質時,可以使用相同的方法來調用GetComponent<Renderer>().materials[i]而不是GetComponent<Renderer>().sharedMaterials[i]

附帶說明一下,由於您的腳本繼承自MonoBehaviour ,因此gameObject.GetComponent<>()可以簡化為GetComponent<>()

希望這可以幫助,

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM