유니티 기본 C# 문법 정리

Damin Ryu's avatar
Mar 03, 2024
유니티 기본 C# 문법 정리

Debug.Log(“~~~”);

디버그 멘트를 콘솔창에 띄워줌.

void Start()
{
	Debug.Log("프로그램 시작");
}

Time.deltaTime

프레임, 즉 컴퓨터의 사양에 관계 없이 오브젝트가 동일한 속도로 움직일 수 있도록 함. ‘이동이나 회전 등 움직임에 있어서 시간의 영향을 받는 기능을 만들 때에는 값에 deltaTime을 곱해서 흘러간 프레임 시간만큼만 가중치를 줌으로써 프로세서 속도의 영향에서 자유로워짐’

참고할 글 : https://wergia.tistory.com/313

HP = -1.0f * Time.deltaTime;
h = h * speed * Time.deltaTime;

Input.GetMouseButtonDown(숫자)

숫자가 0일 때 : 왼쪽 마우스 버튼 클릭

숫자가 1일 때 : 오른쪽 마우스 버튼 클릭

숫자가 2일 때 : 마우스 휠 클릭

if (Input.GetMouseButtonDown(0)) {}

왼쪽 마우스 버튼이 클릭됐을 때

참고할 글 : https://8strength.tistory.com/4

https://8strength.tistory.com/5

Input.GetMouseButtonUp(숫자)는 이와 반대. 스와이프를 구현할 때 사용함

참고할 글 : https://8strength.tistory.com/5

Vector2

2D 프로젝트에서 좌표를 표현하는 데이터. 말 그대로 벡터!

참고할 글 : https://hotstudy.tistory.com/93

ex) Vector2 startPos = Input.mousePosition;

Input.mousePosition

마우스 위치를 불러옴

if (Input.GetMouseButtonDown(0))
	{
    	Vector2 startPos = Input.mousePosition;
	}
else if (Input.GetMouseButtonUp(0))
	{
    	Vector2 endPos = Input.mousePosition;
	}
    
float Length = endPos.x - startPos.x;

transform.Translate(변수1, 변수2, 0);

2D에서 움직임을 진행하는 기능

참고할 글 : https://8strength.tistory.com/5

transform.Translate(speed, 0, 0);

transform.Rotate(0, 0, 변수);

2D에서 회전을 진행하는 기능. 2D에서 회전은 z축, 3D라면 xyz에서 모두 회전 가능할 듯.

참고할 글 : https://8strength.tistory.com/4

transform.Rotate(0, 0, RotationSpeed);

Input.GetAxis, Input.GetAxisRaw

키보드 및 마우스의 (벡터 형태로 볼 수 있는 이동에 대한) input을 수직, 수평 벡터로 분해하여 각각의 벡터 크기값을 가져오는 기능... 이라고 이해된다(잘 모르겠음). 대충 방향키 키보드를 오래 누르고 있으면 그 이동 벡터의 크기가 커지고, 그만큼 더 많은 거리를 이동하게 되는 것 같음. 출력값은 float.

Input.GetAxis("Horizontal")은 위로 이동할 때 +, 아래로 이동할 때 -의 값을 가지고, Input.GetAxis("Vertical")은 오른쪽으로 이동할 때 +, 왼쪽으로 이동할 때 -의 값을 가진다.

이 값을 상수와 Time.deltaTime을 곱해 얼마나 (빠르게) 이동시킬 지 정할 수 있다. 실제 이동의 형태는

transform.Translate(Vector2.right * 수평이동의값변수)

transform.Translate(Vector2.up * 수직이동의값변수)

로 표현된다.

참고할 글 : https://keemeesuu.github.io/2021/unity/Input

https://8strength.tistory.com/6

    void Update()
    {
        // 수평, 수직 입력(이동 기능 구현)
        // 수평(Horizontal), 수직(Vertical)

        // 키보드 입력
        float h = Input.GetAxis("Horizontal");
        float v = Input.GetAxis("Vertical");

        // 이동 속도 보정
        h = h * speed * Time.deltaTime;
        v = v * speed * Time.deltaTime;

        //Time.deltaTime : The time in seconds it took to complete the last frame
        //                 한 프레임이 완료되기까지 걸리는 시간. 주로 움직임에서 이 값을 곱하여 프레임 당 이동을 구현하는 용도로 활용
        //                 성능의 영향을 받음.

        // 실제 이동
        transform.Translate(Vector2.right * h);
        transform.Translate(Vector2.up * v);
    }

회전

https://8strength.tistory.com/4

스와이프

https://8strength.tistory.com/5

Time.timeScale = 0;

시간이 흘러가는 흐름을 설정하기 위한 변수

1.0일 경우 실시간, 0.5일 경우 실시간보다 2배 느리게, 0일 경우 정지 상태 처리.

게임 내 일시정지 또는 타워디펜스 게임 시간 조절 등을 설정하는데 사용

 

enum

https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/builtin-types/enum

    enum Rainbow
    {
        RED, ORANGE, YELLOW, GREEN
    }

열거형 자료형.

 

coroutine

https://novlog.tistory.com/54

    Startcoroutine(함수명()); // 코루틴 실행
    Stopcoroutine(함수명()); // 코루틴 멈춤

    IEnumerator 함수명()
    {
        진행할 명령문;
        yield return waitForSeconds(1.0f);
    }

가 기본 형식임.

스킬 사용이나 물약 쿨타임 등을 설정할 때, Update 내에서 계속 데이터를 돌리는 것은 비효율적이기 때문에 사용한다.

public bool isDelay;

void Update()
{
	if(Input.GetKeyDown(KeyCode.Space))
    {
    	if(isDelay==false)
        {
        	isDelay = true;
            Debug.Log("물약 사용");
            StartCoroutine(Drink());
        }
        else
        	Debug.Log("쿨타임");
    }
}
        	
            
IEnumerator Drink()
{
	yield return new WaitForSeconds(5.0f);
    isDelay = false;
}

 

직렬화

유니티에서 사용할 값을 필드 값으로 작성합니다.
필드 값은 클래스 내부의 변수를 의미합니다.

 

인스펙터에 공개

다른 스크립트에서 접근 가능

GameObject Square;

X

X

public GameObject Square2;

O

O

[SerializeField]GameObject Square2;

O

X

[HideInInspector]public GameObject Square3;

X

O

[HideInInspector] 을 사용하는 이유 : 해당 코드에서 딱히 이 값을 수정할 일이 없고, 다른쪽에서 작업이 주로 처리된다면 굳이 인스펙터창에서 보이지 않게 해서 다른 사용하는 값만 확인할 수 있게 해줌.

 

#region ~~~

#endregion

코드 정리를 도와주는 도구

 

벡터 사용법

Vector2 v_ex; // 선언

void Start()
{
	v_ex = new Vector2 (3, 5); // 값 대입
}

void Update()
{
	if (~~)
		transform.position = v_ex; // 오브젝트 위치 초기화
}

 

다른 오브젝트의 함수 호출

GameObject.Find("호출할 게임오브젝트".GetComponent<호출할 스크립트>().호출할 함수();

이때 호출할 함수는 public이어야 함

 


https://8strength.tistory.com/8

https://8strength.tistory.com/10

Share article

8strength