使用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;
}
}
}
感谢您提前提供任何帮助:)
答案 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)具有不同的值。