관리 메뉴

有希

게임 콘텐츠 전반 본문

프로그래밍/UnityEngine기초

게임 콘텐츠 전반

有希. 2021. 9. 5. 20:13

이동

 

Directional Light: 태양처럼 한 방향으로만 빛을 쏜다. 위치는 관계없음. 회전각과 빛을 쏘는 방향이 중요함.

Point Light: sphere로 된 범위 안에서 빛을 밝혀줌. 횃불 같은 느낌

spot ligth: 무대에서 쓰는 그 스포트라이트 ㅇ

light 연산은 연산량이 어마어마함. 한 픽셀당 연산을 해서 빛이 적용된 색을 적용해서 수학식을 통해서 최종 색이 나옴.

 

빛 연산 모드를 baked를 하면 미리 다 연산해놓고 덮어놓겠다. mixedbakedrealtime .

mixed? 좀 이상한게 어디서 어떻게 움직일지 알고 baked를 같이 쓴다는 걸가? 결론은 못한다. 다만 벽 같이 움직이지 않는 녀석에 대해서 미리 계산을 해두는 것임.

static이 체크되어 있으면 baked 해놓음. lightmapping 옵션도 생김

 

이동을 막는 방법: 1. collider끼리 부딪히는 것을 인식

1.     박쥐처럼 앞으로 raycasting을 해서 걸리는 애가 잇으면 이동 막기

2.     네비게이션 매쉬를 이용해서 길찾기를 해본 다음에 못가게 막기

네비게이션 매쉬를 이용할 땐 bake를 이용한다. static이 적용된 녀석으로는 baked할 때 이동할 수 없다고 bake 한다. static을 빼면 무시하고 뚫고 이동함. 건물같은건 rigid가 적용됏으면 지붕으로 가거나 그냥 벽 뚫거나.

navigation에서 bake탭의 실린더는 플레이어임.

어떤 애들은 내비게이션 메쉬로 판단하고, 어떤 애들은 안하는데 이거는 component로 처리함.

nav mesh agent를 붙여주면 길찾기를 하는 애라는 정보를 넣어주고, 이 녀석이 네비메쉬로 이동한다.

NavMeshAgent Move 함수는 방향*거리를 모두 포함한 녀석을 넣어주면 그리로 이동한다.

근데 이렇게 하게 되면 정확한 지점을 찍어서 그 자리로 이동할 수가 없다.

몬스터 클릭

몬스터를 대상으로도 레이 캐스팅이 되어야 몬스터를 클릭했을 때 공격등의 모션을 취하거나 전투상태로 돌입할 수 있다.(그냥 몬스터 layer를 추가하라는 말)

커서

스프라이트로 해서 실시간으로 띄우는 방법이 있고, 텍스쳐 타입을 커서로 바꾸는 방법이 있는데, 이것이 훨씬 간단한 방식이라 후자로 하는게 좋음.

공격

상태관리를 잘 해야함. 클릭했을 때, Idle 상태로 할 것인지, attack 상태로 할 것인지, moving상태로 할 것인지.

CrossFade를 이용해서 하는 것이 낫다. param을 만들어가며 하는 것 보다는 더 낫다. 강제로 세팅할 수 있기 때문에 의도한 대로 되기 때문.

apply root motion을 적용하게 되면 만약 애니메이션이 공격할 때 조금씩 전진하는 것을 포함하고 있다면 이 부분이 그대로 적용된다. 적용을 해제하게 된다면 애니메이션은 재생되지만 전진하는 것은 실행되지 않는다.

체력게이지

3D UI 중의 하나. 인게임 세상에 3D 물체를 하나 붙여서 UI를 표시한다. 유니티 기본 UI에서 슬라이더 하면 될듯 rect transform left right0,0으로 바꿔줘야 value0, max일때 꽉 채워진다. fill도 마찬가지로 해줘야 함. 체력바는 오브젝트의 child로 넣어 같이 움직이게 해준다.

체력게이지의 위치는 parent collider의 사이즈를 + 한 만큼 캐릭터 위로 tranfromupdate하면 된다. 다만, 이것만 해주었을 때에는 오브젝트(캐릭터)가 회전할 때 같이 회전하게 된다.

rotationcamera.main.transform.rotation으로 바꿔주면 된다. 이것의 의미는 체력바가 바라보는 방향이 카메라가 바라보는 방향으로 회전하도록 하는 뜻이다. 이것이 billboard?의 개념. 항상 카메라가 보는 방향을 바라보도록 하는것.

 

내가 공격할 때 내가 상대방의 피를 깎는것이 맞는지, 상대방 hp한테 내 공격력을 넣어줘서 상대방이 깎게하는게 맞는지, 매니저한테 내 공격력, 상대방 hp를 넘겨서 매니저가 처리하는것이 맞는지 헷갈릴텐데 상대방 hp 객체가 알아서 하게 하는편이 편하다.

몬스터

tag로 플레이어를 찾고 플레이어와 나의 거리를 계속 체크하고 있기. magnitude 보다는 squaremag가 더 빠름. 이후에는 다시 제곱해서 거리 체크하고. 근데 귀찮으니 그냥 mag써도 무방하다.

거리가 설정한 scanRange이내로 들어올 경우 statusmoving으로 바꾸면 된다.

이동은 navmashagent를 이용해서 setDest를 플레이어로 놓고, smaspeed를 설정해주면 된다.

다만 공격 함수에서 setDest를 현재 위치로 설정해줘야 플레이어가 밀리지 않는다. 왜냐하면 setDest로 이동하는 것이 공격 range안에 들어왔음에도 계속해서 dest로 이동하려 하기 때문에 공격하면서 dest로 이동하기 때문이다.

'프로그래밍 > UnityEngine기초' 카테고리의 다른 글

Data Manager  (0) 2021.09.05
Coroutine  (0) 2021.09.04
Object Pooling  (0) 2021.09.04
Sound Manager  (0) 2021.09.04
Scene Manager  (0) 2021.09.04