STIKA
D+23일 TIL < Unity 입문 > 본문
24.01.25 Thu
D+23
❤️ TIL
Today I Learned
❤️하루에 1%씩만 나아가도 4개월 동안 쌓이면 꽤 덩치가 커진답니다 :)
📌 오늘의 계획
- 알고리즘 코드카타
- 입문강의 전부 듣기
- 팀 프로젝트 작업부분 감잡기
✏️ 작업 내용
✔️ Unity 입문
MonoBehaviour가 자동으로 상속받아짐
오브젝트를 가져와서 연결하려면 무조건 필요
→ 그 외에 용도로 쓴다면 필요 X
우리는 유니티에서 제공되는 함수(유니티 메서드)를 오버라이딩해서 사용
스크립트 라이프 사이클
게임 오브젝트의 생명 주기 동안 호출되는 특정한 메서드들의 순서와 타이밍
게임 오브젝트의 생성, 초기화, 업데이트, 파괴 등과 관련된 작업을 수행
- Awake: 게임 오브젝트가 생성될 때 호출
주로 초기화 작업으로 이용 - Start: 게임 오브젝트가 활성화되고 게임 루프가 시작될 때 호출
초기 설정 및 시작 작업 수행 - Update: 매 프레임마다 호출
로직의 주요 업데이트 - FixedUpdate: 물리 엔진 업데이트 시 호출
물리적인 시뮬레이션에 관련된 작업을 처리할 때 사용 - LateUpdate: Update 메서드 호출 이후에 호출
다른 오브젝트의 업데이트가 완료된 후에 작업을 수행하는 데 유용 - OnEnable: 게임 오브젝트가 활성화될 때 호출
- OnDisable: 게임 오브젝트가 비활성화될 때 호출
- OnDestroy: 게임 오브젝트가 파괴될 때 호출
자원 정리 및 해제 작업이 수행
유니티의 컴포넌트 방식
→ 게임 오브젝트에 부착되는 기능 모듈
기본 컴포넌트 예시
- Transform: 게임 오브젝트의 위치, 회전, 크기 등을 조정하는 데 사용
- Rigidbody: 물리적인 효과를 게임 오브젝트에 적용
- Collider: 충돌 감지를 처리하기 위해 사용
- SpriteRenderer: 2D 그래픽을 표시
- AudioSource: 사운드를 재생하기 위해 사용
- 우리가 만드는 스크립트도 컴포넌트의 역할을 함
사진의 속성을 보면
sprite Type single인데
파일 하나에 여러개의 스프라이트를 가질수있는데
single이면 하나만 가졌다는것
Pixels Per Unit
PPU =
(유닛이라는)1이라는 단위안에 몇픽셀을 집어넣을꺼냐
1 유닛 안에 100 pixel을 넣으면 작아지고
1 유닛 안에 16x28pixel을 넣으면 커지고
PPU값이 높아질수록 고해상도가 되면서 성능에 문제가 있을수있음
Player
부모 Transform
습관가지기 오브젝트를 만들면 Transform리셋
트랜스폼구조 내지 계층구조라고함
부모의 좌표 크기 회전을 다 종속받게됨
실제로 움직이는거는 Sprite가 아니라 부모 Player임
자동차 안에 구현해놓은것들을 자동차를 움직여서 다같이 움직이게끔하는거
로컬좌표와 월드좌표
월드좌표
세상의 중심으로부터의 나
로컬좌표
내 부모로부터의 나
부모가 어디서 회전하고 얼마나움직이면 그 위치로부터의 나
현재는 Player가 월드와 로컬좌표가 같음
MainSprite가 월드와 로컬이 다름 Player로부터의 위치 = 로컬
부모껄 다 따른후 거기서부터
월드에선 2 0 0 인데 MainSprite의 Inspector에선 0 0 0임 부모로부터 안멀어져서
나중에 .position 하면 월드좌표고
.localposition을 해야 로컬좌표를 가져올수있음
스크립트 파일명과 똑같은 클래스이름이 있어야함 이름이 다르면 처리되지 않음
void Update()
{
float x = Input.GetAxisRaw("Horizontal");
float y = Input.GetAxisRaw("Vertical");
transform.position += new Vector3(x, y) * Time.deltaTime;
}
캐릭터 이동
- Input.GetAxis -> 0~1로 도달하는값 ->처음에 천천히 출발
- Input.GetAxisRaw -> 0,1,-1로 딱 떨어지는값->같은속도
- Time.deltaTime
0에서 1까지의 값을 input으로 받아오는데
update는 매 프레임 호출됨
근데 유니티에 가서 status를 확인해보면
fps가 300가량이 나옴(1초에 300번 호출)
그니까 1초에 300가량을 움직일수있음
이게 문제가 되는게 컴이 좋고 나쁨에 따라
난 300씩 움직이고
나쁜사람은 100씩움직이고
그래서 사용하는게 deltaTime
이전 프레임과 현재프레임 사이의 시간
이전에서 현재로 도달하는 그 시간
10프레임의 사람 -> 간격(deltatime)인 1/10초를 1초에 10번(fps) = 1
60프레임의 사람 -> 1/60초를 1초에 60번 = 1
이게 델타타임을 곱하는 이유
→ 나중엔 실제시간누적까지도 처리할수있음
transform.position += new Vector3(x, y) * speed * Time.deltaTime;
이제 속도조절을 하고싶으면
클래스안에 float speed를 주는데 이걸
Inspector안에서 마음대로 바꾸고싶음
public으로 오픈해버림
외부의 serialize 이렇게 동기화가 됨
주의 플레이중에 값을 바꾸면 플레이를 종료하면 초기화됨..
근데 public을 안하고싶다 중요한거다
스피드라는 값을 강제적으로 유니티하고 동기화시킴
그래도 같은동작을 함
위에건 연습코드
실제로 쓸 inputSystem
package Manager -> unity registry(유니티가 자체적으로 갖고있는) -> inputSystem install
OnMoveEvent
OnLookEvent
??? - 질문
걸려있다는 의미를 모르겠음 TopDownMovement 스크립트의 동작방법을 모르겠음
public event Action<Vector2> OnMoveEvent;
event키워드의 의미가 무엇
OnMoveEvent?.Invoke(direction);
에서 invoke가 하는일
TopDownController2D
TopDownCharacterController
PlayerInputController
TopDownMovement
TopDownCharacterController
action으로 OnMoveEvent라는걸 만듬 action은 반환하지 않는 델리게이트
OnMoveEvent가 null에서 null이 아니게됐을때 걸어둔 얘들한테 OnMoveEvent에 들어온 값을 다 뿌림?
CallMoveEvent를 부를때 direction을 줌 direction을 가지고 OnMoveEvent를 호출?하는데 여기서 invoke의 의미가 무엇?
대충 playeinput컴포넌트으로 입력을 받아오는데 입력값을 받아오는 조건이 TopDownController2D 를 통해서 정해져 있고
그걸 PlayerInputController에서 처리하는데
PlayerInputController는 TopDownCharacterController로 상속받아져있고
근데 OnMove는 누가 부름?
PlayerInput이? InputValue에서 가져오는건가 했는데
얘는 움직인건지 마우스포지션인지 어케알고 OnmoveOnlook을 골라서 부름..?
TopDownMovement에서
private void Start()
{
_controller.OnMoveEvent += Move;
}
이건 어케동작하는거지
inputsystem을 깔고나서
create 맨밑에 input actions를 누르고 이름바꿈
이 액션을 취했을때 돌려받을 값이 Vector2
move → keyboard
look → mouse pos
fire → 왼쪽마우스버튼 클릭 얘만 value any
📝 오늘의 마무리
질의응답이 필요하다..
처음으로 튜터님을 찾아갈예정..
✏️ 스스로 어제보다 한 발 더 나아갔다는 것을 자각하기
✏️ TIL을 쓰기 위해서라도, 오늘 반드시 단 하나라도 배우기
✏️ 꾸준히 기록을 남기는 습관 가지기
📕 오늘의 학습 키워드
📕 공부한 내용 본인의 언어로 정리하기
📕 오늘의 회고
📕 12시간 중 얼마나 몰입했는지
📕 더 나은 미래를 위해 내일 어떤 공부를 진행할 것인지
'프로그래밍 > Unity + C#' 카테고리의 다른 글
D+25일 TIL < Invoke > (0) | 2024.01.29 |
---|---|
D+24일 TIL < Unity 입문 / 팀 프로젝트 > (0) | 2024.01.26 |
D+22일 TIL < Unity 1주차 / 팀 프로젝트 회의> (1) | 2024.01.24 |
D+21일 TIL < Unity 사전 5주차 > (0) | 2024.01.23 |
D+20일 TIL < 알고리즘 / Unity 사전 4주차 > (1) | 2024.01.22 |