如何让游戏对象将更改应用于脚本中的预制件

时间:2013-12-27 15:47:59

标签: c# unity3d

使用Unity 3D编辑器。我有一个物体在与其他物体碰撞时会改变颜色,这一切都有效,但是当改变场景时,球会恢复到默认颜色。所以我在改变颜色时需要球来通过脚本更新预制件,这样其他场景中对象的其他实例也会改变颜色。 这是我为改变颜色而编写的代码:

    using UnityEngine;
using System.Collections;

public class colourpicker : MonoBehaviour {

    public GameObject whiteblock;
    public GameObject limegreentintblock;
    public GameObject cyantintblock;
    public GameObject redtintblock;
    public GameObject yellowtintblock;
    public GameObject player;

    public Material limegreentint;
    public Material redtint;
    public Material cyantint;
    public Material yellowtint;
    public Material white;

    void OnTriggerEnter(Collider other)
    {
        if (other.gameObject == whiteblock) 
        {
            renderer.material = white;
        }
        else if (other.gameObject == redtintblock) 
        {
            renderer.material = redtint;
        }
        else if (other.gameObject == limegreentintblock) 
        {
            renderer.material = limegreentint;
        }
        else if (other.gameObject == cyantintblock) 
        {
            renderer.material = cyantint;
        }
        else if (other.gameObject == yellowtintblock) 
        {
            renderer.material = yellowtint;
        }
    }
}

感谢您提前提供任何帮助:)

1 个答案:

答案 0 :(得分:3)

如果我是你,我会创建一个带有空游戏对象的静态类,您可以在其中保存对象颜色的状态。在Ball的Initialize部分中,您应该检查此静态类的变量(必须是静态的)是否与Initial状态不同,然后将静态变量的颜色分配给Ball对象。这个LINK教会你如何实现它(你必须改变一些东西才能实现你想要的东西)

修改

在静态类中,您可以创建类似

的内容
public static Material BallMaterial = null;   // or you can assign a Material that will act as InitialState

之后,在您的代码中,当您将新材质指定给球时,您还将新材质指定给 BallMaterial ,然后在加载新场景时检查< em> BallMaterial 与其InitialState(或null)具有不同的值。