나 개발자 진짜 되냐?

[ Unity 2D 기초 2 ] 유니티 기본 컴포넌트 & 핵심 기능 본문

유니티를 공부해봐요!/초급이에요!

[ Unity 2D 기초 2 ] 유니티 기본 컴포넌트 & 핵심 기능

Snow Rabbit 2024. 10. 7. 16:34

 

HELLO!!

 

이번에는!

컴포넌트들이 정말 중요하다고

전 시간에 이야기했었던걸 토대로

이번에는 컴포넌트들을

조금 깊게 공부할 예정이다!

 


🌟 SpriteRenderer 🌟

 

2D 이미지를 표현하는 컴포넌트

어떤 이미지를 표현할 것인지(Sprite)

이미지의 색상(Color),

이미지의 상하(FlipY)

좌우(FlipX) 반전

그리는 우선순위(Sorting Layer, Order in Layer)

등을 설정할 수 있다.

 

여기서

이미지의 색상(Color)

 

색을 바꿔주는것이 아니라

색을 입혀준다는 느낌이다.

 

음..

간단하게 말하면

흰색인 친구를 노란색으로 입혀준다.

그래서

만약에 파란색 도형에 노란색을 입혀주면

초록색이 되는 느낌이다.

 

이렇게 색상을 아예 바꿔주는 친구가 아니라

입혀준다!라고 생각해 주면 좋다.

 

그리고 

우선순위(Sorting Layer, Order in Layer)에 대해 이야기해보면

 

Order in Layer

가장 작은 값이 가장 뒤로 간다.

 

🌟 Rigidbody 2D 🌟

 

2D 게임에서 유니티 내부의 물리엔진을 기반으로

움직임을 시뮬레이션하는 용도

 

중력, 마찰력 등등

 

🌟 Collider 2D 🌟

충돌이 일어나거나 특정 범위에 있는지 판단하는데 활용하는 컴포넌트

 

보통

Box, Circle, Capsule 콜라이더를 사용하고,

Mesh나 Composite 같은 복잡한 콜라이더 형태

여기서  Is Trigger 이 있는데

이 친구는

닿았긴 했는데 인지만 하고 물리적인 힘은 가해지지 않았다는 느낌이다

 

쉽게 설명하면

내가 포탈 위에 서있다!

뭐 골이 골대에 들어갔다!

이런 느낌이라고 보면 된다.

 


이제 핵심 기능을 소개해보려고 한다.

 

🌟 Pixels Per Unit 🌟

 

유니티에서 픽셀과

실제 픽셀은 다르다고 한다!

 

스프라이트의 픽셀 수와 해당 스프라이트가 게임 세계에서 차지하는 공간의 관계를 설명해주는 친구가

바로 픽셀 퍼 유닛

 

쉽게 말하면

1대1짜리

정사각형을

256픽셀이면 256칸으로 나누고

512픽셀이면 512칸으로 나눈다는 것이다.

 

 

PPU값이 커지면 스프라이트는 작아진다.

한칸의 기준이어도

픽셀이 커지면 그림은 작아지기 때문!

 

 

이런 PPU값은 물리 시물레이션에도 영향을 미친다.

 

높은 PPU값은 더 작은 스프라이트를 생성하므로

더 높은 해상도의 물리 시물레이션이 가능하다.

더 섬세하다는 뜻이다!!

 

하지만..높다고 다 좋은건 아니다.

높은 PPU값은 더 많은 연산을 필요로 한다.

따라서 필요한 만큼 사용하는것이 중요!

 

그래서

사실은 일관성 있게 사용하는것이 가장 좋다.

 

스프라이트간의 크기비율을 일정하게 유지하고,

물리적인 행동에도 일관성에 도움이 된다.

 

특히 픽셀게임을 만들면

픽셀을 다르게하면 해결이 어렵다.

 

❗❗스프라이트이기 때문에 이미지에서는 또 다르게 적용 될 수 있다.❗❗

 

 

🌟 Transform 🌟

각 게임오브젝트들은 TransForm 컴포넌트를 가지고 있다.

 

모든 게임 오브젝트들은 다른 게임오브젝트의 자식이 될 수 있다.

부모 게임오브젝트의 TransForm이 변경되면 자식도 동일하게 적용!

 

이렇게 게임 옵젝들 사이에서 계층적인 관계가 형성되는데

이것을 우리는 트리구조! 라고 한다.

 

 

🌟 Local Coordinate System 🌟

유니티 인스펙터창에서 볼 수 있는 위치, 회전, 크기 들을 의미한다.

 

보통 로컬좌표계는

부모를 따라가는 방식이다.

 

예를들어

건물이 있고

건물안에 내가있고

내가 커피를 들고있다.

 

건물 좌표랑 내 커피좌표가

숫자가 같다고 같은위치일까?

 

아니다.

 

커피는 내가 들고있기 때문에

부모인 나의 위치에서 좌표를 따라갈 것이다.

그리고 나 또한

건물안에 있기때문에

건물의 좌표를 따라갈 것이다.

 

스크립트에서는 local이라는 단어를 붙여서 사용한다.

 

 

🌟 World Coordinate System 🌟

 

월드 좌표계는 게임 세계의 전체적인 느낌

 

월드 내에서 내가 어디위치인지 알 수 있는 좌표이다.

 

절대적인 위치고 일정하게 유지된다.

 

 

🌟 Input.GetAxis 🌟

 

인풋...

이름만 들어도..

입력받을거 같다.

 

우리 예전에 사용했었다.

마우스 위치 뭐 키보드 이런것들 이다.

 

보통 키보드, 마우스, 조이스틱 이런거?

입력받기위해 사용하는것이다.

 

GetAxis는 메서드로

-1 부터 1 사이 값을 반환한다.

이 값의 변경은 입력장치의 움직임에 따라 바뀐다.

 

값이 0에 가까울수록 입력이 없거나

중립상태이고,

 

양수값은 양방향 입력

음수값은 음방향 입력을 나타낸다.

 

보통 사용하는 이유는

플레이어의 움직임과 회전, 점프 등을 처리하는데 사용한다.

 

 

🌟 Time.deltaTime 🌟

타임

시간과 관련된 친구,

 

delta 는 차이라는 뜻으로

전 시간과 현 시간의 차이를 나타낸다.

 

프레임과 상관없이 사용할 수 있다!

즉 프레임과 관련없이 움직일 수 있어서

모든 사람들과 동일한 조건으로 가게 된다.

 


🌟 접근자 🌟

 

private와 public는

그리고 protected는 아는친구인데

우리가 모르는 친구가 하나 있다.

 

SerializeField

시리얼라이즈..

어디서봤지!?

 

아아!

직렬화지?

 

이 친구가 무엇이냐

 

우리는 public를 사용하면,

직렬화 한다고 표현한다.

 

직렬화는

인스펙터창에

있는 뭐 스피드, 사이즈, 충돌 뭐 등등을

설정할 수 있게 하는것들이 다

 

직렬화의 효과라고 표현한다.

 

즉 public는 직렬화가 되고

private는 직렬화가 안되는데

 

private하면서 직렬화가 되는 친구가

바로

 

SerializeField이다.

protected는 상속한 클래스에서만 접근 가능한 친구

기억나죠?

 

이친구를 private 앞에 써주면 된다!

 

❗❗단, 클래스에서는 안된다. ❗❗

 

 

public class ExampleClass : MonoBehaviour
{
    public int publicVariable;
    private int privateVariable;
    
    [SerializeField]
    private int serializedFieldVariable;
    
    private void Start()
    {
        publicVariable = 10;  // 외부에서 접근 가능
        privateVariable = 20; // 클래스 내부에서만 접근 가능
        serializedFieldVariable = 30; // 인스펙터에서 접근 가능
    }
}