파워지훈 2023. 2. 10. 00:25

chat gpt 유니티 api가 있고 영상도 올라와있다

 

싱글톤

클래스자체를 static화 하고 싶은데 class에 static을 붙일순 없으니 사용하는 디자인패턴

 

public static Monster(클래스이름) Instatnce {get; private set;}을 만들어 놓고

Awake()함수에서 

private void Awake()

{

    Instance = this;

} 라고 초기화를 해주면 

이 클래스는 유일한 static이 된다 

 

모노비헤이버를ㄹ상속받으면 생성자사용불가, base키워드도 사용불가

그럼 파생클래스의 생성자에서 매개변수를 : base(hp) 를 붙혀

파생클래스의 매개변수를 부모의 매개변수로 전달해주는 방식은 불가

하지만 그대로 넘겨주는 간단한 방법이 있다는데 고민해보자

 

this는 이 클래스 자체를 의미하고 

gameobject는 this와 비슷하긴 한데 현재 스크립트가 포함되어있는 "게임오브젝트 자체"를 말한다

그럼 부가적인 컴포넨트, 등등이 포함되겠찌

궁금한게 그럼 한 게임오브젝트에 여러 스크립트가 포함되있는 그 모든스크립트에서 각자 gameobject를 사용한다면

모두 그 스크립트들이 포함되어있는 하나의 게임오브젝트를 가리키겠지?

각 컴포넨트 자체도 스크립트니까 그럴것같다

 

Awake() 실행 뒤에 Start() 가 실행됨

 

그럼 초기화할때 Start()에 초기화할 코드를 넣어주면되지 왜 Init()이라는 함수를 따로 만들어 생성자처럼 활용할까?

Awake,Start등등은 기본적으로 게임오브젝트가 활성화 될때 실행된다

게임시작할때 비활성화되어있다가 SetActive()를 해주면 그때 비로소 실행된다는 말

 

그럼  다른 클래스에서 MonsterInit()을 호출하는것과 Monster클래스 자체를 호출할때를 비교해보자

MonsterInit()이 더빠름 ㅇㅋ? 테스트해보자 나중에

 

 

TMP 에서 한글 사용

 

TMP에서 한글을 입력하면 네모네모

https://blockdmask.tistory.com/590

 

[유니티] 텍스트 메시 프로 한글이 네모로 나올때 (Text Mesh Pro 한글 세팅)

안녕하세요. BlockDMask입니다. 유니티 최신 LTS 버전인 2021.3.X 버전으로 작업을 하던중 디폴트 text 가 UGUI 텍스트가 아닌 Text Mesh Pro 로 변경되어있는걸 알게 되었습니다. 그래서 Text Mesh Pro 로 한글을

blockdmask.tistory.com

 

this와 gameobject의 차이점

 

 

https://medium.com/@devfallingstar/unity-this%EC%99%80-gameobject%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90-61b91d2e3dd5

 

[Unity] this와 gameObject의 차이점

GameManager와 같은 클래스의 인스턴스는 하나의 게임에 여러개가 있으면 안될 때가 있다.

medium.com

 

 

 

혹시 과거버전 스크립트에 

public GUIText text; 이런식으로 되어있으면 이게 개편되어서 오류난다.

해결위해 

using UnityEngine.UI; 추가하고,

GUIText를 Text로 바꿔주면 된다

 

using System.Collections.Generic; 

: 딕셔너리 타입 사용가능하게 해줌

 

 

bool 프로퍼티 활용

bool조건 검사가 필요한 경우 get 메서드만 가진 프로퍼티로 따로 빼서 하는듯.

 

 public bool IsNull
    {
        get
        {
            return pokerCards == null;
        }
    }

    public bool IsFlush
    {
        get
        {
            if (IsNull)
                return false;
            int tmp = (int)pokerCards[0] / 13;
            for (int i = 1; i < pokerCards.Length; i++)
            {
                if ((int)pokerCards[i] / 13 != tmp)
                    return false;
            }
            return true;
        }
    }
    public bool IsStraight
    {
        get
        {
            if (IsNull)
                return false;
            var tmp = from card in pokerCards
                      orderby (int)card % 13
                      select card;
            if ((int)tmp.First() % 13 + 4 == (int)tmp.Last() % 13)
                return true;
            return false;
        }
    }
    public bool IsMountain
    {
        get
        {
            if (IsNull)
                return false;
            var tmp = from card in pokerCards
                        orderby (int)card % 13
                        select card;
            PokerCard[] tmp2 = tmp.ToArray();
            if ((int)tmp2.First() % 13 == 0 && (int)tmp2[1] % 13 == 9 && (int)tmp2.Last() % 13 == 12)
                return true;
            return false;
        }
    }