要在Unity的启动画面中创建动态淡入效果,我试图在运行时获取启动画面背景的颜色。
在编辑器中,可以在编辑>处找到颜色。项目设置>播放器>飞溅图像>背景
在研究如何获得这种颜色时,我偶然发现了
PlayerSettings.SplashScreen.backgroundColor
。但是,PlayerSettings
类包含在UnityEditor
命名空间中,无法在运行时访问。
如何在运行时动态获取启动画面背景的颜色?
编辑:使用IL反编译器,我发现UnityEditor程序集使用外部方法解决了这个问题。但是,我仍然没有看到从编辑器程序集中获取背景颜色的方法。
public static Color backgroundColor
{
get
{
Color result;
PlayerSettings.SplashScreen.INTERNAL_get_backgroundColor(out result);
return result;
}
// ...
}
private static extern void INTERNAL_get_backgroundColor(out Color value);
答案 0 :(得分:4)
Unity的构建假设您在运行时永远不需要这个值,因此您需要采取一些技巧来解决这个问题。我经常做的一件事就是解决使编辑器变量可访问的特殊问题,即编写一个预构建步骤,将任何想要的数据保存到资源文件中,然后可以在运行时读取。
您需要执行此操作的唯一API是IPreprocessBuild
界面,Resources.Load
和MenuItem
属性(MenuItem
是可选的但会让你的工作流程更容易一些。)
首先,实现一个IPreprocessBuild
(这个位于"编辑器"目录和引用UnityEditor
)以将设置保存到资源:
class BackgroundColorSaver : IPreprocessBuild
{
public int callbackOrder { get { return 0; } } // Set this accordingly
public void OnPreprocessBuild(BuildTarget target, string path)
{
SaveBkgColor();
}
[MenuItem("MyMenu/Save Background Splash Color")]
public static void SaveBkgColor()
{
// Save PlayerSettings.SplashScreen.backgroundColor to a
// file somewhere in your "Resources" directory
}
}
每次启动构建时,此类都会调用SaveBkgColor()
,MenuItem
标记可让您选择在需要时调用该函数(使测试/迭代变得更容易) )。
之后,您将要编写一个运行时脚本,该脚本只使用Resources.Load
加载您的资产并将其解析/转换为Color
对象。
这些是制作"仅限编辑器的基础知识。运行时可用的资源。使用Color
:
TextAsset
。Color.ToString()
,加载时使用ColorUtility.TryParseHtmlString
。另请注意,由于您希望这是一个来自初始屏幕的混合,因此您需要立即运行此代码(可能在Awake()
函数中运行您的某些行为第一个场景)。
旁注:有更有效的方法可以将Color保存/加载为二进制blob而不是原始文本资源,但这很简单,并且可以在离开{{1}时轻松交换该部分。实施完好。