유니티 기본

정제로·2023년 7월 25일
0

Unity

목록 보기
5/19

Time.deltaTime;

컴퓨터 마다 프레임이 다르다, 어떤 컴퓨터는 100fps(1초에 100개의 프레임)을 가지고 있고, 어떤 컴퓨터는 극한으로 1fps(1초에 1개의 프레임)을 가지고 있다.
자! 이제 두컴퓨터가 총게임 내에서 적으로 만났다고 가정해보자.
100fps유저는 1초에 100발의 총알을쏘는데, 1fps유저는 1초에 1발의 총알만 발사하게 된다!
너무 억울하지 않은가!
그래서 두 컴퓨터 유저가 다른 상황에서도 같은 결과값을 내야하기에, Time.deltaTime을 사용한다

deltaTime값은 프레임이 적으면 크고, 많으면 작다
※ 컴퓨터 성능이 달라도, 같은 조건으로 만들어준다.


ToString("N*");

double pi = 3.141592;
N0N1N2....
33.13.14.......

N이후의 숫자 자리수부터 소수점을 끊어준다


TimeScale;

일시정지나, 게임을 멈추고 싶을때 사용
기본값은 1이며, 2로 설정하면 1의 세상보다 2배 속도로 돌아감

//예시
public void OnTogglePauseButton()
    {
        if (Time.timeScale == 0) //멈춰있으면
        {
            Time.timeScale = 1f; //시작
            pauseText.text = "Pause"; //캐릭터가 움직이는 중이니 움직임을 멈추고 싶어? 물어봐야하므로 Pause라는 text를 띄워놔야함
        }
        else //움직이면
        {
            Time.timeScale = 0; //멈추기
            pauseText.text = "Resume";
        }
    }

horizontal, vertical, Axis

Horizontal

말 그대로 수평의 라는 뜻이다
x축을 의미한다

Vertical

말 그대로 수직의 라는 뜻이다
세로방향 y축을 의미한다

Axis

중심선, 축이라는 의미이다.
밑에 설명할 getaxis/raw 라는 함수로 사용된다

GetAxis, GetAxisRaw

Vector3 vec = new Vector3(Input.GetAxis("Horizontal"),
                          Input.GetAxisRaw("Vertical"), 0);

와 같은 형식으로 사용된다

GetAxis

는 -1f~1f 값을 반환한다.
아주 매끄러운 이동이 필요할때 사용한다.

GetAxisRaw

는 -1f, 0f, 1f의 값을 반환한다.
즉각적인 반응이 필요할때 사용한다.

참고로

위와 같이 피타고라스 공식으로 인해,
a = 1, b = 1일때 c는 √2가 된다.
그래서 캐릭터가 대각선으로 움직일때 정규화를 해주지 않으면 가로 세로로 움직이는 것보다 조금 더 빠르게 움직여지게 된다.
그럴 때!

Vector3 vec = new Vector3(Input.GetAxis("Horizontal"),
                          Input.GetAxisRaw("Vertical"), 0).normalized;

를 해주면 된다!


삼항연산자 '?' (Ternary Operator)

'?'를 사용하여 if else문을 획기적으로 줄일 수 있다.

int a = 10;
bool answer = a == 10 ? "true" : "false";

//or

bool wDown;

transform.position += moveVec * speed * (wDown ? 0.3f : 1f) * Time.deltaTime;

같이 자료형과 함께 형식에 맞춰 사용가능하고(string은 무자열로 받기, int는 정수로 받기 등등)

아니면 움직이는 식에 넣어 그때그때 움직이는 속도를 변하게 만들거나

string food = "김밥";
int numFood = food.Length;
string store = (food == "김밥" && numFood > 2) ? "김가네" : "편의점";

처럼 조건을 여러개 붙힐 수도 있다!


transform.LookAt(); 함수

LookAt함수는 transform 컴포넌트로부터 호출된다.

public Transform target;

void Update()
{
    transform.LookAt(target);
}

과 같이 이 스크립트가 연결된 오브젝트가 타겟을 바라보도록 회전하게 만들수 있다.

moveVec = new Vector3(hAxis, 0, vAxis).normalized;
transform.LookAt(transform.position + moveVec);

이 코드는 이 스크립트가 연결된 오브젝트가 현재 position에 moveVec(움직임)의 방향을 바라보게 하는 함수이다.
캐릭터가 걸어가는 방향을 보게 하는 함수!

이와 같이 마우스를 보게 만들거나, 특정 위치(transform.position)을 보게 만들수도 있다.

Vector3.up / down 등으로 위, 아래를 바라보게 할수도 있다


함수 오버로드 보는법

코드를 치다가 어떤 인자값을 받아야 하는지 모를때, 함수의 오버로드를 참고해야 할때가 있다!

+2의 오버로드가 있다고 하는데 어떻게 확인하지?
방법이 2개 있다

  1. 함수의 '(' 만 치고 해당 괄호위에 마우스를 얹어보는것이다


그렇게 해도 안될때가 있다
그럴땐

  1. 괄호를 모두 입력후 첫째 괄호 뒤로 커서를 놓고 ctrl+shift+space키를 같이 눌러보자


이런식으로 오버로드 목록을 활성화 할수 있다!

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

0개의 댓글