【问题标题】:UNITY CS1061 Sprite does not contain definition for enabledUNITY CS1061 Sprite 不包含启用的定义
【发布时间】:2019-09-25 16:33:07
【问题描述】:

我正在统一关注 2048 的教程。他正在使用文本和图像来渲染他的“瓷砖”,我决定使用精灵,因为我在 adobe 中有预制的瓷砖。第一个代码是 TileStyleHolder,第二个脚本称为 Tile(附加到将启用/禁用的实际精灵/图像本身。)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[System.Serializable]
public class TileStyle 
{
    public Sprite tile_number;
}

public class TileStyleHolder : MonoBehaviour
{
    //SINGLETON
    public static TileStyleHolder Instance;

    public TileStyle[] TileStyles;

    void Awake() 
    {
        Instance = this;
    }
}

这是第二个脚本~~

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Tile : MonoBehaviour
{
    public int Number 
    {
        get 
        {
            return number;
        }
        set 
        {
            number = value;
            if (number == 0)
                SetEmpty();
            else 
            {
                ApplyStyle(number);
                SetVisible();
            }
        }
    }
    private int number;

    private Sprite TileSprite;

    void Awake() 
    {
        TileSprite = transform.Find("numcell").GetComponent<Sprite>();
    }

    void ApplyStyleFromHolder(int index) 
    {
        TileSprite = TileStyleHolder.Instance.TileStyles[index].tile_number.ToSprite();
    }

    void ApplyStyle(int num) 
    {
        switch (num) 
        {
            case 2:
            ApplyStyleFromHolder(0);
            break;

            case 4:
            ApplyStyleFromHolder(1);
            break;

            case 8:
            ApplyStyleFromHolder(2);
            break;

            case 16:
            ApplyStyleFromHolder(3);
            break;

            case 32:
            ApplyStyleFromHolder(4);
            break;

            case 64:
            ApplyStyleFromHolder(5);
            break;

            case 128:
            ApplyStyleFromHolder(6);
            break;

            case 256:
            ApplyStyleFromHolder(7);
            break;

            case 512:
            ApplyStyleFromHolder(8);
            break;

            case 1024:
            ApplyStyleFromHolder(9);
            break;

            case 2048:
            ApplyStyleFromHolder(10);
            break;

            case 4096:
            ApplyStyleFromHolder(11);
            break;

            default:
            Debug.LogError("Check the numders that you pass to ApplyStyle");
            break;
        }
    }

    private void SetVisible() 
    {
        TileSprite.enabled = true;
    }

    private void SetEmpty() 
    {
        TileSprite.enabled = false;
    }


    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {

    }
}

【问题讨论】:

  • 是的,你不能......精灵是一种资产。您宁愿使用该精灵启用/禁用组件/游戏对象...请添加完整代码
  • 停止EDIT您的问题并在那里添加您所有的相关代码。使用{ } 按钮对其进行格式化!
  • 好的,已修复,希望清楚
  • 是的更好;) Sprite 不是一个组件,所以你不能使用GetComponent&lt;Sprite&gt; 如上所述,你必须找到使用该精灵的组件,例如SpriteRendererImage 并启用/禁用它
  • 问题是你在尝试什么?这个Sprite 是如何/从哪里来的?它在哪里使用?您试图实现的预期行为是什么?

标签: c# unity3d


【解决方案1】:

如果您使用的是Image 组件,您可以通过以下方式引用精灵:

Sprite mySprite = GetComponent<Image>().sprite;

如果您使用的是SpriteRenderer 组件,您可以使用以下方式引用精灵:

Sprite mySprite = GetComponent<SpriteRenderer>().sprite;

【讨论】:

  • 这个。这救了我。因为这个,我刚刚经历了很大一部分,非常感谢!
猜你喜欢
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 2021-08-11
  • 2011-08-21
  • 2023-03-20
  • 2018-04-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多