본문 바로가기
Unity 공부

10.13 (Unity공부)

by 오랑이귀엽다 2023. 10. 13.

유니티란?

충돌/중력/탄성/카메라 이런 것들을 쉽게 코딩 할 수 있는 툴

게임 개발에 최적화된 개발 환경

 

기본 개념

Scene : 실제 게임의 구성요소를 보는 곳. 실질적인 게임 개발 씬

Game : 게임이 실제로 보여지는 곳. play 버튼 클릭 후 볼 수 있음

Hierachy : 게임 내 구성 요소를 볼 수 있는 곳. 개발 시 자주 필요

Project : 이 프로젝트에 포함된 파일들을 모아볼 수 있는 곳

Inspector : 클릭한 요소의 속성과 정보를 보여주는 곳

 

order in layer 는 위와 같이 background와 ground가 존재할시 우선순위를 결정할때 사용

캐릭터 생성 방법

위와같이 캐릭터는 생성 되었지만 order in layer를 0으로 해서 캐릭터가 background에 겹쳐버림

아래는 1로 수정후

animation은 동작파일이며 Asset에서 animation에서 폴더를 생성후 create 에서 생성가능

위와 같이 animation을 생성하고 이를 mainscene의 rtan에 넣으면 바로위에 rtan controller가 생성된다.

아래는 생성후 모습이며 아래쪽에 animator가 만들어진것을 볼수 있음

이후에는 rtan_run을 더블클릭하면 animation 창이 뜨고 그곳에서 모션 제작가능.

이후 캐릭터를 움직이기 위해서 c# 작업필요

캐릭터에 코드를 입히는 다는 의미는? → "캐릭터가 동작 할 수 있게 만드는 것”

동작에서 꼭 알아야 할 두가지 함수 → start (너는 태어날 때) / update (매 순간 이렇게 해라)

위를 보면 uodate에 transform.position += new Vector3(0.05f, 0, 0); 라는 코드를 입력하고

저장후 유니티에서의 변화 모습이다.

해석하자면 캐릭터가 x축으로 0.05만큼 이동할것이라는 뜻이다.

새부적으로는 

transform = 캐릭터의 position을 계속 바꿔달라는 것

Vetor3 (x,y,z) = x,y,z 의 3 차원 값

+= 의 의미는 트랜스폼 안의 포지션을, Vector3 방향으로 계속 더하다

방향을 변수로 나타 낼때는 direction을 이용

혹시나 캐릭터가 빠르거나 종류 후에도 작동을 한다면 

VSyncFixedUpdate를 이용

주의 사항으로는

VSync 옵션은 유니티 에디터 내부에서만 적용되는 옵션이기 때문에 추후 실제 게임으로 만들어

플레이시에는 적용이 않음 실제 게임 플레이시에도 적용하기 위해서는 코드부터 바꾸어주어야

하는데 이때 FixedUpdate를 사용할 수 있다.

이후 direction 를 작용한 모습

Debug.Log(transform.position.x); 을 이용해서 캐릭터의 상세 위치를 알수있음

이후 벽 충돌시 방향전환 코드를 적용하면

if (transform.position.x > 2.8f) 

direction = -0.05f;

가 추가됨 세부적으로 보면

만약 x가 2.8 즉 벽보다 큰값이되면 역으로 0.05씩 간다는 뜻이다.

다음으로 반대로 가다가 반대 벽에 충돌시 방향전환이다.

이렇게 코드를 설정하면 캐릭터가 뒤를 보고 움직이는 현상이 발생한다.

아래는 이를 해결한 코드이다.

transform.localScale = new Vector3(-1, 1, 1);

transform.localScale = new Vector3(1, 1, 1);

이 코드는 캐릭터의 이동방향에 맟춰 모습도 같은 방향으로 돌려주는 역활

이를 간단하게 나타낸다면

위와 같이 toward를 이용해서 float toward = 1.0f; 변수을 주고 update에 transform.localScale를

대체 해주고 마무리에. transform.localScale = new Vector3(toward, 1, 1); 로 변수값을 만들어주면 된다.

위는 마우스 클릭시 방향전환을 나타내는 코드를 적용한 모습이다.

if (Input.GetMouseButtonDown(0))

해당 코드를 이용한다.

 

생성한 오브젝트가 떨어지게 하기위해서는 Rigidbody2D를 이용한다.

이후 오브젝트와 gound(땅)이 충동하게 세팅하기 위한 조건은

둘 다 Collider 가 있어야 한다

둘 중 하나는 Rigidbody가 있어야 한다.

오브젝트에는 circle collider 2d 를 적용 ground에는 box collider 2d를 적용한 후의 충돌모습

충돌 조작을 위해 우선 ground의 tag에 ground를 명시해준다.

이후 새로운 오브젝트(rain)의 스크립트를 만들어주고

void OnCollisionEnter2D(Collision2D coll)
{
    if (coll.gameObject.tag == "ground")
    {
        Debug.Log("땅이다!");
    }
}

코드 사용 

여기서 OnCollisionEnter2D 함수는 다른 콜라이더에 부딪혔을 때 실행되는 내장함수

위와같이 충돌후에  Debug.Log("땅이다!"); 가 표출된다.

오브젝트가 사라지게 할때는 Destroy(gameObject); 를 이용

 

랜덤한 rain을 생성하기 위해서는 드디어 start() 함수를 이용한다.

start() 에 삽입한 코드를 보자면

x축 -2.7 과 2.7

y축 3.0 과 5.0

범위내에  transform.position = new Vector3(x, y, 0); 생성된다는 뜻이다.

 

transform.localScale = new Vector3(size, size, 0); 를 이용해서 사이즈를 조절할수도

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

를 이용해서 색변경이 가능하다. ( 255.0f 로 나눠주는 게 핵심!)

최종적으로

위와 같은 코드가 완성되는데 위에서 부터 자세히보면 보면

int type;

float size;

int score;

아래 레일에 들어가는 종류들을 먼저 삽입

start() 함수 첫부분에 x,y 축 범위를 설정

랜덤 타입의  type = Random.Range(1, 4); 을 적용

1번일 경우

2번일 경우

그외의 경우

각 타입에 부가 설명( 사이즈, 충돌시 점수부여, 색상)

마무리로 transform.localScale = new Vector3(size, size, 0); 를 적용

 

'Unity 공부' 카테고리의 다른 글

03.18 (TIL-Unity)  (0) 2024.03.19
10.23 (Unity 공부)  (0) 2023.10.23
10.20 (Unity 공부)  (0) 2023.10.20
10.17 (Unity공부)  (0) 2023.10.17