You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中如何通过代码访问内置方形Sprite或创建对应GameObject?

解决方案

因为你开发的是Asset Store资源,不能依赖Resources文件夹或Unity版本特定的内置资源路径,最稳妥的方式是通过代码生成符合需求的方形Sprite,或者模拟Unity手动创建Square Sprite的行为。

方案一:自行生成指定尺寸的方形Sprite

这种方法完全不依赖外部资源,兼容性强,适合Asset Store资源发布:

单次创建示例

using UnityEngine;

public static class SpriteCreator
{
    public static GameObject CreateSquareObject(int spriteSize = 256)
    {
        // 创建指定尺寸的纯白色纹理
        Texture2D whiteTexture = new Texture2D(spriteSize, spriteSize, TextureFormat.RGBA32, false);
        whiteTexture.filterMode = FilterMode.Bilinear;
        
        // 填充纹理像素为白色
        Color[] pixelData = new Color[spriteSize * spriteSize];
        for (int i = 0; i < pixelData.Length; i++)
        {
            pixelData[i] = Color.white;
        }
        whiteTexture.SetPixels(pixelData);
        whiteTexture.Apply();

        // 将纹理转换为Sprite(锚点居中,像素单位匹配尺寸)
        Sprite squareSprite = Sprite.Create(whiteTexture, new Rect(0, 0, spriteSize, spriteSize), new Vector2(0.5f, 0.5f), spriteSize);

        // 创建GameObject并挂载SpriteRenderer组件
        GameObject squareGameObject = new GameObject("Square");
        SpriteRenderer renderer = squareGameObject.AddComponent<SpriteRenderer>();
        renderer.sprite = squareSprite;

        return squareGameObject;
    }
}

复用Sprite的优化版本(减少内存开销)

如果需要多次创建方形对象,建议缓存生成的Sprite,避免重复创建纹理:

using UnityEngine;
using System;

public static class BuiltInSpriteCache
{
    private static Sprite _cachedSquareSprite;
    private static int _cachedSize;
    private const int DefaultSpriteSize = 256;

    public static Sprite GetSquareSprite(int spriteSize = DefaultSpriteSize)
    {
        // 缓存不存在或尺寸不匹配时重新生成
        if (_cachedSquareSprite == null || _cachedSize != spriteSize)
        {
            _cachedSize = spriteSize;
            
            Texture2D whiteTexture = new Texture2D(spriteSize, spriteSize, TextureFormat.RGBA32, false);
            whiteTexture.filterMode = FilterMode.Bilinear;
            
            Color[] pixelData = new Color[spriteSize * spriteSize];
            Array.Fill(pixelData, Color.white); // Unity 2021.2+支持,低版本替换为for循环
            whiteTexture.SetPixels(pixelData);
            whiteTexture.Apply();

            _cachedSquareSprite = Sprite.Create(whiteTexture, new Rect(0, 0, spriteSize, spriteSize), new Vector2(0.5f, 0.5f), spriteSize);
        }

        return _cachedSquareSprite;
    }

    // 快速创建带SpriteRenderer的GameObject
    public static GameObject CreateSquareObject(int spriteSize = DefaultSpriteSize)
    {
        GameObject squareObj = new GameObject("Square");
        squareObj.AddComponent<SpriteRenderer>().sprite = GetSquareSprite(spriteSize);
        return squareObj;
    }
}

方案二:尝试加载Unity内置Square Sprite(不推荐)

部分Unity版本中,内置Square Sprite存在于Resources的特定路径,但该路径可能随版本变更,兼容性无法保证,仅作参考:

Sprite squareSprite = Resources.Load<Sprite>("Sprites/Square");
if (squareSprite != null)
{
    GameObject squareObj = new GameObject("Square");
    squareObj.AddComponent<SpriteRenderer>().sprite = squareSprite;
}

内容的提问来源于stack exchange,提问作者user23083479

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 14:22:40