>source

버튼을 클릭 할 때 스크립트를 사용하여 특정 스프라이트를 숨기거나 숨기기 해제 할 때이 두 가지 오류가 발생합니다. 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

    이러한 오류 메시지가 나타나는 이유는 스프라이트 대신 정수로 실행하기 때문입니다. 당신은의 인스턴스를 사용해야합니다 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);
            }
        }
    }
    
    
    에디터에서 결과를 보는 방법 : 게임 오브젝트를 참조로 드래그 할 수있게하려면
    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);
            }
        }
    }
    
    

  • 이전 ios - indexPathrow가 0이 아닌 1에서 시작하는 이유
  • 다음 asp.net mvc - 컨트롤러에서 AJAX jQuery로 오류 반환