Unity 기본 설정
window > Layout > 2 by 3
필수 X 화면을 어떻게 분할할지 선택하는 것
Game scene 사이즈 변경
Game + 버튼 > 760X1260 입력하고 Phone 설정
배경색 설정
1) backgrond 오브젝트 생성해 화면 사이즈에 맞추기
2) 카메라 컬러를 변경
기본 오브젝트 생성
Hierachy > 2D object > sprite > 원하는 도형 선택
보통 이미지는 square로 만든다
square > sprite 부분에 캐릭터 이미지 드롭
Q. 파일명/폴더명 자유 지정이 가능한가?
A. 대부분 문제 없으나 유의사항;
1) 일부 폴더는 유니티에서 지정
- Assets: 유니티 프로젝트의 기본 자산 폴더
- Resources: 런타임 중에 Resources.Load를 통해 파일을 로드할 수 있는 폴더
- Editor: 에디터 스크립트 전용 폴더
- StreamingAssets: 외부에서 파일을 직접 읽거나 쓸 때 사용
2) 클래스 이름과 파일 이름이 동일하게
3) 공백 대신 언더스코어(_) 또는 카멜케이스 사용 (GameManager 또는 game_manager)
4) 폴더 구조를 관리하기 용이하게 지정
- Scripts: 스크립트를 모아두는 폴더
- Prefabs: 프리팹을 모아두는 폴더
- Textures: 텍스처 파일을 모아두는 폴더
c# 스크립트 생성
Assets > Create > Scripts 폴더 생성 > c# 스크립트 생성
스크립트나 애니메이션은 생성 후 Hierachy 오브젝트에 꼭 드롭/추가 (=연결)
c# 스크립트 기본구조
· using: 다음의 시스템을 불러오겠다
· using UnityEngine: 유니티 엔진의 클래스와 기능을 스크립트에서 사용한다
· void: 반환값이 없거나 단순히 다음 작업을 실행할 때 선언하는 함수
void로 함수를 선언하고 함수의 내부 코드를 만들면 해당 함수를 실행시킨다
· void Start: 태어나서 다음 작업을 해라 (1회만)
· void Update: 다음 작업을 계속 반복해라
* start와 Update는 독립된 함수, start > update로 이어지는 구조 아님
이동 함수
· transform: 유니티 transform 컨포넌트를 불러온다
transform.position += Vector3.right * 0.05f;
: 포지션 값을 Vector3 방향으로 계속 더해라
· Vetor3.right: 유니티에서 제공하는 변수
= Vector3(1, 0, 0)
여기서 움직이는 속도(간격)을 조정하기 위해 0.05를 곱하면 (0.05, 0, 0)
> Vector3(1, 0, 0) * 0.05f
· float: 소수점을 나타내는 자료형, 소수를 쓸 때 뒤에 f 붙여주기
플레이 속도 맞추기 (최적화)
· Application.targetFrameRate: 타겟의 프레임을 조정한다 = 초당 프레임 수 지정한다
· Application.targetFrameRate = 60; 초당 60 프레임을 출력한다
이미지 좌우반전
· 유니티 자체에 좌우반전 기능이 존재
Sprite Flip을 체크하면 X는 좌우 Y 상하 반전
· 이 기능을 #c 스크립트에 불러오기
SpriteRenderer 스프라이트에서 변수값을 가져오는 함수
float direction = 0.05f;
SpriteRenderer renderer;
if (transform.position.x > 2.6f)
{
direction *= -1.0f;
renderer.flipX = true;
}
> x 값이 2.6 이상일 때 방향에 -1 값을 곱해서 방향을 전환하고 Flip을 true로 켜서 이미지를 좌우반전한다
* 이때, 각 변수는 Float과 spriteRenderer 함수로 선언
마우스 클릭 기능
위에서 SpriteRenderer renderer;를 선언했지만, 그 자체로는 renderer 변수를 선언만 한 상태입니다. 이 시점에서 renderer는 아직 아무 값도 참조하고 있지 않아요. renderer = GetComponent<SpriteRenderer>();를 Start()에서 한 번 더 사용하는 이유는 해당 GameObject에 붙어 있는 SpriteRenderer 컴포넌트를 실제로 가져오기 위해서입니다.
즉, 다음 두 가지가 각각 필요해요:
- 선언 (SpriteRenderer renderer;): renderer라는 변수를 정의해놓고, 이 변수가 나중에 SpriteRenderer 컴포넌트를 참조할 수 있도록 준비하는 단계입니다.
- 초기화 (renderer = GetComponent<SpriteRenderer>();): 실제로 이 변수에 현재 GameObject에 있는 SpriteRenderer 컴포넌트를 할당해줍니다. Start()에서 이를 실행하는 이유는, 스크립트가 실행될 때 해당 GameObject가 준비된 시점에 컴포넌트를 가져와야 하기 때문입니다.
만약 Start()나 다른 부분에서 renderer = GetComponent<SpriteRenderer>();를 호출하지 않는다면, renderer 변수는 초기화되지 않고 null 상태일 겁니다. 그 상태에서 접근하게 되면 null reference exception(널 참조 오류)이 발생하게 됩니다.
그래서 Start()에서 GetComponent<SpriteRenderer>()를 호출해 renderer 변수를 초기화하는 것이 필수적입니다.
'[내배캠] 본 캠프 개발 학습 > 매일매일 쓰는 TIL' 카테고리의 다른 글
9월 23일 월요일 본 캠프 개발 일지 | C# 문법 종합반 강의 (0) | 2024.09.23 |
---|---|
9월 20일 금요일 본 캠프 개발 일지 | C# 문법 종합반 강의 (1) | 2024.09.20 |
9월 11일 수요일 본 캠프 개발 일지 (0) | 2024.09.11 |
9월 10일 화요일 본 캠프 개발 일지 (3) | 2024.09.10 |
9월 9일 월요일 본 캠프 개발 일지 | 깃허브(GitHub) 기초 강의 (1) | 2024.09.09 |