-
[TIL] 유니티 개인과제 2TIL 2024. 5. 14. 21:45
타일맵 콜라이더 끼임
더보기TilemapCollider2D로 타일맵에 자동으로 콜라이더를 생성했는데 미묘하게 벽면에 비빌 때 플레이어가 끼는 현상이 발생했다.
해결법
TilemapCollider2D가 붙어있는 타일맵에 추가로 Composite collider2D 를 붙여주었다.
붙이게 되면 자동으로 Rigidbody2D도 함께 붙여진다.
나는 타일맵 그러니깐 움직일 필요가 없는 오브젝트이기 때문에 RigidBody2D의 BodyType을 Static으로 설정하고
콜라이더의 UsedByComposite를 체크해줬다.
이후에는 원하는 대로 끼임 문제 없이 잘 작동되었다.
https://docs.unity3d.com/kr/2021.3/Manual/class-CompositeCollider2D.html
타일맵 알수없는 선이 생기는 현상
더보기이리저리 움직이다 보면 간혹 이상한 선이 생기는 현상이 보인다.
빠르게 움직일때만 보이고 멈추면 안보여서 원인이 뭔지도 잘 파악하기 힘들다.
이곳저곳에서 검색을 해봤고 일단 원인은 텍스쳐..크기가 딱 떨어지지않아서 부동소수점이 발생하고 유니티가 완벽하게 계산하기 힘들어서 생기는 오류라고 한다.
이 현상도 해결하는 방법이 여러개 있다 ( 검색 결과)
1. 텍스쳐 타입을 변경
2. 카메라에 PixelPerfectCamera를 붙이기
3. PxielPerUnit(PPU) 을 1정도 줄이기
나는 3번 으로 문제 현상을 고쳤다.
다른 방법들은 이미 배치해둔 타일이나 시스템에 큰 영향이 갈까봐 시도해보지 못했다.
원래 PPU는 32 였고 31로 바꿨더니 다행이 이리저리 움직여도 아까와 같은 현상은 발생하지 않았다.
시네머신 카메라 영역 제어
더보기내가 설정한 시네머신 카메라는 플레이어를 따라가고 그래서 플레이어 기준으로 주변을 비춘다.
그런데 플레이어 갈수 있는 곳 까지 고려해서 맵을 꾸미자면 가지도 못할 맵들을 예쁘게 꾸며야 했다,
해결법
전에 생성했던 VirtualCamer에서 AddExtension을 선택하고 Confiner2D를 선택하면 이미지 처럼 컴포넌트가 자동 추가된다. (그냥 AddComponent 로는 뜨지 않는다)
이렇게 설정하고 빈 오브젝트를 생성한 후 PolygonCollider2D를 추가해서
비추고 싶은 맵까지 범위를 설정하고 카메라의 BoundingShape2D에 넣으면 카메라가 콜라이더 범위 밖을 비추지 않는다.
폴리곤 콜라이더를 직접 Edit하기 보다는 폴리곤을 추가하기전 오브젝트를 Square로 생성하고 후에 콜라이더를 추가하면
Square의 크기를 늘린만큼 자동으로 이미지크기에 맞춰서 폴리곤도 커진다.
잘 적용되었다.
NPC 대화 간단 구현
더보기대사를 적당히 써서 리스트에 추가했다.
한번 대화할 분량마다 Add를 했고 , 만큼 한번에 문장을 보여줄 생각이다.
List<string> list = new List<string>(); private void Start() { list.Add("TIL 쓰셨나요?,꼭 쓰셔야합니다. TIL이 얼마나 중요하냐면, ~1시간 동안 이어진 TIL 이야기~, 아무튼 쓰세요"); list.Add("여러분 꼭 입실체크 해주셔야합니다,꼭 입실버튼 눌러야합니다. 얼마나 중요하냐면, ~1시간 동안 이어진 입실체크 이야기~, 아무튼 누르세요"); list.Add("여러분 모르는 문제가 있으면 튜터님들 찾아오셔야합니다.,튜터님들을 찾아가는게 얼마나 중요하냐면, ~1시간 동안 이어진 튜터님들 이야기~, 아무튼 찾아가세요"); }
NPC가 한명이니깐 그냥 Start문에 임시로 대사를 추가했다.
Public IEnumerator StartDialogue() { int a = Random.Range(0, list.Count); //랜덤으로 대사 출력 string[] spliteText = list[a].Split(','); for(int i=0; i<spliteText.Length; i++) { dialogue.text= spliteText[i]; yield return new WaitForSecondsRealtime(0.1f); while (Input.touchCount < 1 && !Input.GetMouseButtonUp(0)) yield return null; } dialoguePanel.SetActive(false); TalkButton.SetActive(true); BottomUI.SetActive(true); Time.timeScale = 1; }
작성해둔 3가지 대사중 하나가 랜덤으로 출력되게 만들었다.
끝!
'TIL' 카테고리의 다른 글
[TIL] Interface 상속과 Json에 관하여 (0) 2024.05.17 [TIL] 객체지향 코드 설계 1 (0) 2024.05.16 [TIL] 유니티로 개인과제 1 (0) 2024.05.13 [TIL] Unity 3 + 알고리즘 문제 (0) 2024.05.10 [TIL] Unity 강의 2 (0) 2024.05.09