gpt4 book ai didi

c# - 通过代码检索内置的 UI Sprite

转载 作者:太空狗 更新时间:2023-10-29 23:49:23 25 4
gpt4 key购买 nike

Unity 中包含大约 7 个 Sprites,可在您创建 UI 时使用。我想通过代码访问这些。这些包括 UISprite、UIMask、旋钮、背景等,如下面的屏幕截图中圈出的。

enter image description here

我深入研究了 UI 源代码,发现它们的所有位置都在 MenuOptions.cs 中声明。脚本。

private const string kStandardSpritePath = "UI/Skin/UISprite.psd";
private const string kBackgroundSpritePath = "UI/Skin/Background.psd";
private const string kInputFieldBackgroundPath = "UI/Skin/InputFieldBackground.psd";
private const string kKnobPath = "UI/Skin/Knob.psd";
private const string kCheckmarkPath = "UI/Skin/Checkmark.psd";
private const string kDropdownArrowPath = "UI/Skin/DropdownArrow.psd";
private const string kMaskPath = "UI/Skin/UIMask.psd";

在编辑器中,我能够使用 GetBuiltinExtraResource 函数检索它们:

Sprite img = UnityEditor.AssetDatabase.GetBuiltinExtraResource<Sprite>("UI/Skin/InputFieldBackground.psd");
Debug.Log(img); //NOT NULL

不幸的是,AssetDatabase.GetBuiltinExtraResource 来自 UnityEditor 命名空间,无法在构建或独立程序中使用。它甚至无法编译。


我尝试将 Resources.GetBuiltinResource 用于构建和独立,但它始终返回 null。它找不到内置 Sprite 。

UnityEngine.Object img = Resources.GetBuiltinResource(typeof(UnityEngine.Object), "UI/Skin/InputFieldBackground.psd");
Debug.Log(img); NULL

尝试了 typeof(Sprite) 而不是 typeof(UnityEngine.Object) 但也失败了。

如何在独立构建而不是编辑器中访问这些内置 Sprite ?

注意:

我不想使用预制件或公共(public)变量来执行此操作,这需要先手动执行操作。这是我目前已经在做的方式。我只想访问已打包在构建中的内置 Sprite 。

最佳答案

嗯...只是复制。只有七个文件,将它们复制到 Resources/Textures(如果必须的话,请制作它)然后用以下方式调用它们:

Sprite knob = Resources.Load<Sprite>("Textures/Knob.psd") as Sprite;

这将是简单的方法..但是为了好玩让我们看看这个

static void CreateMaterial()
{
// Create a simple material asset

Material material = new Material(Shader.Find("Specular"));
AssetDatabase.CreateAsset(material, "Assets/MyMaterial.mat");

// Add an animation clip to it
AnimationClip animationClip = new AnimationClip();
animationClip.name = "My Clip";
AssetDatabase.AddObjectToAsset(animationClip, material);

// Reimport the asset after adding an object.
// Otherwise the change only shows up when saving the project
AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(animationClip));

// Print the path of the created asset
Debug.Log(AssetDatabase.GetAssetPath(material));
}

我在统一文档中找到了它。现在我知道它在谈论一种 Material ......但在我看来你可以手动将有问题的 Sprites 添加到你的 Assets 中,这样可以确保它们被引用并将包含在构建中。

关于c# - 通过代码检索内置的 UI Sprite ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47638453/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com