24.July.2023

정제로·2023년 7월 24일
0

C#

목록 보기
5/30

Random.Range(val 1, val 2)

int 형과 float형 에서 사용할 수 있다
기본적으로 val 1~ val 2사이의 랜덤한 값을 추출할 때 사용한다.

int A = Random.Range(0, 10);

float F = Random.Range(0, 10.0f);

중요한 점
1. int값 = val 1 포함, val 2 미포함
-> 0포함, 10미포함, 0~10사이의 랜덤한 int 값

  1. float값 = val 1 포함, val 2 포함
    -> 0f포함, 10.0f포함, 0~10사이의 랜덤한 float 값
    이다

color, color32의 차이

공부를 하던 중에,

GetComponent<SpriteRenderer>().color = 
new Color(100 / 255f, 
100 / 255f, 
255 / 255f, 
255 / 255f);

이런 코드를 봤다. 그러고 설명에는

  • 색 변경할 때 255?
    255.0f 로 나눠주는 게 핵심!

이라고만 되어있었다.
뭔뜻인가 싶어 인터넷 검색!
찾아보니

colorcolor32
빨강/초록/파랑/알파(투명도)빨강/초록/파랑/알파(투명도)
0~1까지의 float값으로 색상을 나타냄0~255까지의 int값으로 색상을 나타냄
4개의 float값을 사용하여 하나의 색상을 표현, 16바이트 크기의 메모리를 차지4개의 8비트 정수(byte)값을 사용하여 하나의 색상을 표현, 4바이트 크기의 메모리를 차지
주 사용처 : 머티리얼(Material)과 같은 컴포넌트와 상호작용할 때 사용주 사용처 : 2D 그래픽과 GUI 요소와 관련된 작업

gamemanager이란?

게임 전체를 조율하는 오브젝트!
주로 점수 / 다시 시작 / 3번 째 다시 시작에 부스터 / 광고보기 등 의 작업을 처리

Instantiate

인스턴스(instance)

instance란?

설계도(클래스)를 바탕으로 소프트웨어 세계에 구현된 구체적인 실체, 인스턴스는 객체에 포함된다.

인스턴스(instance)화란?

이미 만들어진 게임 오브젝트를 필요할 때마다 실시간으로 만든다는 의미

public GameObject Rain;

    void Start()
    {
        InvokeRepeating("makeRain", 0, 0.5f);
    }

    void Update()
    {
        
    }

    void makeRain()
    {
        Instantiate(Rain);
    }

이런식으로 public으로 게임오브젝트를 열고, 그 안에 prefab을 넣는다

prefab이란?

재사용을 더 효율적으로 하기위해 사용한다
복붙(duplicate)을 이용해서 할수있다만... 오브젝트가 10000개가 넘어가면 그게 가능할까...

이런식으로 prefab화 된 오브젝트는 파란색 육면체로 변한다.
-> prefab화 한다는 것은, 오브젝트를 Asset으로 만든다는 의미이기도 하다

Destroy

Destroy, 말 그대로 파괴한다는 의미이다.

void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.tag == "Ground") 
        {
            Destroy(gameObject);
        }
    }

위 코드처럼 서로 다른 두 오브젝트가 서로 충돌(collision)했을때, 원하는 오브젝트를 Destroy(제거)하도록 사용할 수 있다.
응용법은 무궁무진!


Invoke/InvokeRepeating

Invoke(string methodName, float Time)

invoke함수는 말 그대로 딜레이를 주는 함수이다.
두 인자값을 받는데 하나는 method이고 다른 하나는 딜레이 시간이다.
-> 해당 method를 Time초 만큼의 딜레이를 준다

void Start()
    {
        Invoke("makeRain", 0);
    }

InvokeRepeating(string methodName, float Time, float repeatRate)

invokeRepeat함수는 invoke + 반복이 추가된 함수이다.
세 인자값을 받는데, 첫 두 인자값은 invoke와 동일하고 세번째 인자값은 몇초마다 repeat을 할지 하면 된다.
-> 해당 method를 Time초 만큼의 딜레이 후, repeatRate초마다 반복해라

void Start()
    {
        InvokeRepeating("makeRain", 0, 0.05f);
    }

싱글톤

어디서도 부를 수 있는 '하나'로 만들어주는 것

public static GamaManager I;

void Awake() //게임오브젝트가 실행될때 제일 먼저 1회 실행되는 함수
{
	I = this;
}

위의 코드처럼, GameManager는 public+static으로 선언이 되어 다른스크립트나 다른 함수에서 GameManager안의 내용들을 불러와 사용할 수 있다.

예를들어, 커피숍이 있는데, 쿠폰은 딱 1장만 발행하고 카운터에 놔둬서 커피를 사는 모든손님이 한 쿠폰에만 도장을 찍는 원리이다.

I = this;

조금 특별한 구문이다.
선언된 I가 this라니..
찾아보니,
I라는 변수에 현재 객체(인스턴스)를 할당하는 것을 의미합니다. 이렇게 함으로써 I 변수는 해당 클래스의 유일한 인스턴스를 참조하게 됩니다
라고 한다.
솔직히 뭔뜻인지 이해가 안된다..

즉, I 변수를 할당하고 this를 사용하게 되면, 싱글톤이 되는 원리이다.

this

this는
현재 인스턴스(객체)를 가리키는 특수한 키워드. 즉, 객체가 자기 자신을 참조하는 용도로 사용함.

※ GPT의 예시를 봐보자
//GameManager = 대통령
//I = 비서
public class GameManager : MonoBehaviour
{
    public static GameManager I; // 비서 변수

    void Awake()
    {
        I = this; // 비서는 자기 자신(게임 매니저/ 대통령)이에요!
    }

    // ... (다른 멤버 변수와 함수 정의)
}

위 코드 그대로, I라는 비서가 대통령 역할을 맡게 되는거다!
그리고 다른 사람이 대통령 역할을 못하도록 유일한 대통령을 비서가 맡게되는거다!

다시 돌아와서

this란

객체가 자기자신을 가리키고 싶을 때 사용한다.

즉 이 상황에서

I = this란

해당클래스 (ex GameManager)의 유일한 인스턴스(객체)를 변수 I에 할당하는것을 의미한다.

profile
초보자입니다.. 잘못된 정보, 달게 받겠습니다..

1개의 댓글

comment-user-thumbnail
2023년 7월 24일

글 잘 봤습니다.

답글 달기

관련 채용 정보