Unity - SetActive не определен - PullRequest
       5

Unity - SetActive не определен

0 голосов
/ 01 августа 2020

При использовании сценария для скрытия и отображения определенных c спрайтов одним нажатием кнопки я получаю эти две ошибки. Assets\Scripts\ButtonLeft.cs(26,5): error CS1061: 'int' does not contain a definition for 'SetActive' and no accessible extension method 'SetActive' accepting a first argument of type 'int' could be found (are you missing a using directive or an assembly reference?)

Assets\Scripts\ButtonLeft.cs(22,8): error CS1061: 'int' does not contain a definition for 'activeSelf' and no accessible extension method 'activeSelf' accepting a first argument of type 'int' could be found (are you missing a using directive or an assembly reference?)

Предыдущие сообщения, некоторые из которых были опубликованы всего несколько недель назад, уверили меня, что activeSelf был правильным способом проверить, был ли спрайт уже скрыт, и я использовал SetActive раньше в этом проекте без проблем. Вот сценарий, который я пытаюсь запустить:

using System.Collections.Generic;
using UnityEngine;

public class ButtonLeft : MonoBehaviour
{

    public void Click ()
    {
    if (23.activeSelf)
    {
        23.SetActive (false);
        3.SetActive (true);
        1.SetActive (false);
    }
    if (3.activeSelf)
    {
        23.SetActive (false);
        3.SetActive (false);
        1.SetActive (true);
    }
    if (1.activeSelf)
    {
        23.SetActive (true);
        3.SetActive (false);
        1.SetActive (false);
    }
    }

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

Синтаксис каким-то образом неправильный? ActiveSelf - неправильный способ проверить, активен ли объект или нет?

Использование Unity 2019.4.5f1 Personal

1 Ответ

0 голосов
/ 01 августа 2020

Причина, по которой вы получаете эти сообщения об ошибках, заключается в том, что они запускаются для целых чисел, а не для спрайтов. Вам необходимо использовать экземпляр GameObject.

Вы можете получить ссылку на что-то в этом роде несколькими способами. Один из них - создать поле, доступное для инспектора, и предоставить ссылку через него.

using UnityEngine;

public class ButtonLeft : MonoBehaviour
{
    [SerializeField]
    private SpriteRenderer sprite1 = null;

    [SerializeField]
    private SpriteRenderer sprite3 = null;

    [SerializeField]
    private SpriteRenderer sprite23 = null;

    public void Click()
    {
        if (sprite23.gameObject.activeSelf)
        {
            sprite23.gameObject.SetActive(false);
            sprite3.gameObject.SetActive(true);
            sprite1.gameObject.SetActive(false);
        }
        if (sprite3.gameObject.activeSelf)
        {
            sprite23.gameObject.SetActive(false);
            sprite3.gameObject.SetActive(false);
            sprite1.gameObject.SetActive(true);
        }
        if (sprite1.gameObject.activeSelf)
        {
            sprite23.gameObject.SetActive(true);
            sprite3.gameObject.SetActive(false);
            sprite1.gameObject.SetActive(false);
        }
    }
}

enter image description here

How things may end up looking in the editor:

введите описание изображения здесь

Если вы хотите иметь возможность перетаскивать любой игровой объект в качестве ссылки

using UnityEngine;

public class ButtonLeft : MonoBehaviour
{
    [SerializeField]
    private GameObject sprite1 = null;

    [SerializeField]
    private GameObject sprite3 = null;

    [SerializeField]
    private GameObject sprite23 = null;

    public void Click()
    {
        if (sprite23.activeSelf)
        {
            sprite23.SetActive(false);
            sprite3.SetActive(true);
            sprite1.SetActive(false);
        }
        if (sprite3.activeSelf)
        {
            sprite23.SetActive(false);
            sprite3.SetActive(false);
            sprite1.SetActive(true);
        }
        if (sprite1.activeSelf)
        {
            sprite23.SetActive(true);
            sprite3.SetActive(false);
            sprite1.SetActive(false);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...