루비의 모험
💡 공부한 내용 적기
루비의 모험 : 2D 초급자용
https://learn.unity.com/project/rubiyi-moheom-2d-cogeubjayong
1. 튜토리얼
-
게임 오브젝트에 새 좌표값 저장 transform.position = position;
-
프레임 관련 설정
QualitySettings.vSyncCount = 0; Application.targetFrameRate = 10;
targetrate 고정하려면 vSync(vertical sync - 수직동기화)를 꺼줘야함
- 수직동기화 : 모니터 주파수에 맞춰 퍼포먼스를 조절하여 tearing 현상을 방지
하지만 모바일 플랫폼은 vSync를 무시한다고 함, 그냥 targetFrameRate만 신경씀 온디맨드 랜더링으로 모바일 성능 개선할 수 있다함
-
타일맵 설명이 있으나 나는 3D이므로 건너뜀
-
Project Setting > Graphics > Cameara Settings > Transprarency Sort Mode 여기서 y=1로 바꾸면 y축을 기반으로 스프라이트를 그린다. 이때 스프라이트 렌더러의 Sprite Sort Point를 center -> pivot으로 변경 필요 또 Sprite의 Pivot위치도 bottom으로 변경해줘야 한다.
2. 물리 시스템
rigidbody : 물리시스템을 적용 받기 위해 필요한것 2d의 경우 gravity를 비활성화 해야한다
colliders : rigidbody로 물리 시스템을 적용했다면 어떤 부분이 solid한 부분인지 알려줘야한다. 그것이 바로 collider이다. 게임 오브첵트의 외형을 가늠하여 충돌 연산을 할 수 있게 해주는것 적절한 크기 설정 필요
Colliders with trigger : 특정 부분 충돌을 체크해서 체력등을 변경할때 물리적으로 충돌하면 안되는 경우가 있다. 이때 collider의 셋팅에 trigger 체크박스를 활성화 한다.
freeze rotation : 특정 축을 회전하는것을 막는것
충돌 떨림 현상 : rigidbody가 아닌 transform 포지션을 움직이면 복사본을 이동하고 물리시스템 계산되고 해서 발생한다고 하는데 이건 해보면서 읽혀야할듯, 필자는 rigidbody 를 움직이는 식으로 변경해야한다고 한다.
3. 함수, etc
Mathf.Clamp : 최소, 최대 넘어가지 않게 setting
{
currentHealth = Mathf.Clamp(currentHealth + amount, 0, maxHealth);
Debug.Log(currentHealth + "/" + maxHealth);
}
Getter 함수 : getter함수를 아래와 같이 사용할 수 있다.
public int health { get { return currentHealth; }}
int currentHealth;
Pixels Per Unit : 크기 관련하여 사용하는데, 그냥 scale을 사용하면 되는게 아닌가..?
Unit : scene에서 눈금 한 칸이 1*1 unit 이다 참조 블로그
참조 블로그 이미지
Unit으로 컨트롤 하면 게임에서 Prefab을 만들 때 마다 일관된 크기로 사용할 수 있다. 즉 Pixels Per Unit으로 컨트롤은 스프라이트 자체에, scale은 Prefab에 적용이라고 생각할 수 있을듯
Game Object 생성과 내장 script 실행
GameObject projectileObject = Instantiate(projectilePrefab, rigidbody2d.position + Vector2.up * 0.5f, Quaternion.identity);
Projectile projectile = projectileObject.GetComponent<Projectile>();
projectile.Launch(lookDirection, 300);
4. Animator
Animation : 하나의 애니메이션 클릭
Animator : 애니메이션 시스템 (이 component를 넣고 controller를 여기에 할당한다)
Animator Controller : 애니메이션 클립끼리의 연결을 담당
2D에서 animation 만드는 방법은 천천히 보면서 공부할 필요는 있으나, 보통 구입하는 어셋에는 미리 다 되어 있음, 필요할 때 공부하는걸로 하자
-
코드 사용방법
Animator animator; animator = GetComponent<Animator>(); animator.SetFloat("Move X", 0); animator.SetFloat("Move Y", direction); //SetInt, SetBoolean 등도 있다.
-
방향 관련 공부도 필요하다 예제는 방향 벡터를 이용해 바라보는 방향을 정하고 animation을 변경했다.
if(!Mathf.Approximately(move.x, 0.0f) || !Mathf.Approximately(move.y, 0.0f)) { lookDirection.Set(move.x, move.y); lookDirection.Normalize(); }
5. Input System
Input.GetButtonDown : 터치 및 클릭을 다 받을 수 있음
6. 레이어 및 충돌
총돌 문제에 대한 좋은 해결책은 레이어를 활용하는 것이다. Group화 하여 필터링 할 수 있음
- layer를 만들어 prefab들에 할당한다.
- 물리 시스템에 캐릭터(layer1)와 투사물(layer2)이 충돌하지 않는다고 알려줌 위치 : Edit > Project Settings > Physics 2D
7. Package
유니티에서 제공하는 패키지가 있다.
시네머신(Cinemachine) : 카메라를 컨트롤 하는 패키지로, 2D 헬퍼 라고 카메라의 바운드를 제한하여 외부오브젝트를 표시하지 않도록 할 수 있음, 이런 패키지에 대해 알아두면 좋을것 같음
8. Particle
직접 파티클 만들어 보고 싶으면 여기 를 참조하자
9. 레이캐스팅
레이를 써서 충돌의 여부를 확인할 수 있는 건데 다양한 api가 있고 이에 대해선 따로 공부를 해야할 필요가 있다.
글자색 sample
fire brick
violet
drak green
medium blue
dark quoise
fire brick
violet
drak green
medium blue
dark quoise
🔔 포스팅 공지
ㅁㅇㄴㄻㄴㅇ