유니티 19

[유니티] Behaviour Tree 개념 정리

상태Running : 노드 검사 진행중Success : 조건을 만족하여 노드 실행 성공Failure : 조건을 만족하지 못하여 노드 실행 실패 노드Composite Node : 합성 노드. 하나 이상의 자식을 가지는 부모 노드. 자식의 상태 결과에 따라 실행 성공과 실패 여부가 결정된다. 자식 노드는 순차적으로 실행되며 한 노드의 검사가 끝나기 전까지 다른 노드는 실행되지 않는다. - Sequence node: 말그대로 자식 노드의 연속적인 실행이 목적인 노드. 자식 모두 성공 시 성공 처리.- Selector node: 자식 중 선택된 하나의 노드 성공이 목적인 노드. 자식 중 하나가 성공 시 다음 노드로 이어가지 않고 바로 성공 처리 Decorator Node: 자식 노드의 반환 값을 바꾸거나 동작을..

유니티 2024.12.13

모바일 이동 UI 문제(조이스틱 적용 안됨 + 부캠 대회 결과 후기)

부캠의 디펜스 포폴로 제출한 프로젝트를 모바일에서 구동이 가능하게 하기 위해 조이스틱을 만드려고 했다. 대회가 끝난터라 빠르게 프로젝트를 마무리 하기 위해서 유니티 에셋을 활용하여 만들었는데...  안된다.... 움직이지를 않는다.회전은 되는데 걷는 모션도 적용이 되지 않는다. 디버그 로그를 해봤더니 한 번 조이스틱을 사용한 후로는 조이스틱을 쓰지 않을 때에도 Horizontal(moveDir.x) 과 Vertical(moveDir.z)이 0이 아닌 값이 나왔다. 그게 문제인가 싶어서 조건에 Horizontal과 Vertical을 쓰지 않고 드래그 여부를 확인하는 bool 변수를 넣어 코드를 짜봤다. 똑같이 움직이지 않는다... 키보드로 움직일 때 transform이동이 아닌 RigidBody.MoveP..

문제 해결 2024.09.11

터렛 업그레이드 시스템 구현

구상터렛 업그레이드 기능을 추가하려 한다. 일단 StatusManager에 이벤트를 만들어서 버튼을 눌렀을 때 이벤트가 발생하도록 해놓았다. 처음에는 적을 만들 때와 같이 터렛의 프리팹에 업글 UI를 추가하려했으나, 인게임에 송출되었을 때 두 가지 문제점이 발생하였다.   1. UI가 화질이 깨지고 희미하게 보인다. 2. 터렛이 화면 가운데에 있을 때는 터렛의 바로 위에 UI가 뜨지만, 사이드에 있을 때는 터렛의 바로 위보다 살짝 옆에 있는 것 처럼 보인다.   1과 2의 이유는 동일하다.프리팹 안에 캔버스가 있다는 것. 그래서 눙물을 머금고 (코드가 복잡해진다는 것을 알기에...) UI를 화면에 동적으로 띄우기로 했다. 하나의 슬라이더를 선택한 오브젝트의 위로 이동시킬지, 아니면 풀링으로 여러 개 만들..

유니티 2024.08.30

유니티 충돌체끼리 밀리지 않는 현상 (밀림 방지 X, 안 밀림 문제 O)

부캠에서 딱히 배운 거 없이 하루종일 포폴만 하다보니 정말 오랜만에 오게 되었다. 타워 디펜스 포폴을 만들던 중에 문제가 생겼다. 플레이어가 적과 충돌했을 경우 적이 밀려야 하는데 밀리지가 않는다.  보다시피 적의 x, z축 로테이션을 막아놔서 y축으로만 빙글 도는 모습을 볼 수 있다.그렇다면 분명 서로 충돌은 하고 있다는건데. 구글링을 해보아도 밀림 방지만 나와있고 안 밀림 방지는 보이지 않는다.밀림 방지 방법인 is Kinematic은 해제되어 있다.Physics Material을 안 만들어서 그런가 싶어서 만들어 연결해봤는데 아무 변화도 없었다.   생각해보니 두 충돌체 모두 이동 중이니까 이동 구현을 transform으로 해서 그런 걸 수도 있다는 생각이 들었다.이전 적 이동 코드transform..

문제 해결 2024.08.09

발사체 캐릭터 에셋 적용 시 물리 적용 안됨 문제 해결

분명 발사체를 Sphere 오브젝트로 했을 때는 정상적으로 작동하였다.근데...  내가 하루를 통째로 갈아서 만든 새총 물리 구현이 죽었다....  일단 보이는 문제는 이러하다궤적의 높이가 너무 낮게 생성된다.발사체가 던져진 후, 위로 등속도 이동을 한다.이외에도 고무가 위아래로 움직이는 것과 당길 때 받침대가 뒷 쪽을 본다는 문제점이 있지만, 이는 새총 자체의 문제이므로 나중에 해결하기로 했다.   궤적 높이 문제 의외로 간단하게 해결되었다.마우스를 조금만 움직여도 캐릭터 위치가 휙휙 바뀌어서 조작감을 위해 마우스 위치 차이의 값에 50.0f 를 나누었었다.그런데 그러면 궤적도 너무 낮게 나오고, 던지는 힘도 많이 약해져서 그 부분의 변수에 10.0f 정도를 곱했었는데 너무 적었나보다.30.0f 값을 ..

문제 해결 2024.06.26

[멋쟁이사자처럼 유니티 TIL] 딕셔너리 인스펙터에 노출시키기, 커스텀 에디터로 데이터 이사하기 (+ TryGetValue, ISerializationCallbackReceiver, SerializedDictionary)

목차▶ 딕셔너리 직렬화하는 법    → 시간복잡도(Big-O)    → TryGetValue    → ISerializationCallbackReceiver    → SerializedDictionary ▶ 커스텀 에디터로 데이터 이사하는 법  오늘은 코드를 예쁘게 짜는 리팩토링 작업을 하였다.주로 NewChanController 스크립트의 기능들을 DamageField 스크립트로 옮기는 작업을 하였다. 이 과정에서 딕셔너리를 쓰게 되었다.   딕셔너리를 쓴 이유 바로 시간복잡도 때문이다. 자료 구조추가검색삭제인덱스 접근ListO(1)O(n)O(n)O(1)DictionaryO(1)O(1)O(1)- 여기서 O(n)는 Big-O 라는 아이인데,알고리즘이 얼마나 효율적인지를 나타내는 표기법이다. n : 연산의..

부트캠프 2024.06.20

[멋쟁이사자처럼 유니티 TIL] 접근 제한자 개념, 에디터 스크립팅

접근제한자 : 변수 선언 시 해당 변수에 대한 접근의 범위를 정하는 키워드이다.  ● 종류 및 특징 private - 클래스 내에서만 접근 가능하다.- 외부에서는 호출, 수정 모두 불가능하다.- 접근제한자를 입력하지 않고 선언 시, private으로 설정된다. protected- 상속 받은 클래스들만 접근 가능하다.- 호출은 가능하나, 수정은 불가능하다. public- 접근이 자유롭다.- 호출과 수정 모두 가능하다. SerializeField- private이지만, 유니티 에디터에서 접근과 제어가 가능하다. internal- 같은 어셈블리(프로젝트) 에서만 접근이 가능하다.      에디터 스크립팅 : 코드를 입력하여 에디터를 만드는 것이다.  에디터 스크립팅을 통해 나만의 커스텀 에디터 창과 컴포넌트를..

부트캠프 2024.06.15

[멋쟁이사자처럼 유니티 TIL] 대리자(delegate)와 이벤트 실습, 공격 모션 구현 (+ (Ctrl + H), 리타겟팅)

Delegate(대리자) : 메서드의 참조를 저장하고 필요에 따라 호출할 수 있는 형식.네임 스페이스나 클래스 내에 선언한다. 조금 더 자세한 개념은 저번 글을 보면 알 수 있다.https://snack-game.tistory.com/13 [멋쟁이사자처럼 유니티 TIL] UI 슬라이더, 체력바 구현 (+ 델리게이트(delegate), 이벤트)슬라이더 ● 생성 방법Hierarchy 에서 마우스 오른쪽 클릭  → UI → Slider 를 클릭  ● 구성 요소 슬라이더를 생성하면 자식 개체 여러 개가 함께 생성된다. - Background : 슬라이더를 비활성화 시snack-game.tistory.com  델리게이트 이해에는 실습이 직빵이다.라고 강사님이 말하셨다.  ● 델리게이트를 쓰지 않은 경우  p..

부트캠프 2024.06.12

[멋쟁이사자처럼 유니티 TIL] UI 슬라이더, 체력바 구현 (+ 델리게이트(delegate), 이벤트)

슬라이더 ● 생성 방법Hierarchy 에서 마우스 오른쪽 클릭  → UI → Slider 를 클릭  ● 구성 요소 슬라이더를 생성하면 자식 개체 여러 개가 함께 생성된다. - Background : 슬라이더를 비활성화 시켰을 때의 이미지. 슬라이더의 배경. - Fill Area : 슬라이더를 활성화 시켰을 때의 이미지. Background를 채우는 이미지. - Handle Slide Area : 슬라이더의 손잡이. 슬라이더를 마우스로 직접 작동시킬 때 필요한 버튼.  ● 구현 예시 이동 속도를 조절하는 바를 만들어보자 ① Slider를 생성한다. 이때 자동으로 Canvas도 함께 생성된다. ② 원하는 위치로 앵커를 설정한다. 본인의 경우 하단 가운데에 위치하도록 center의 bottom으로 지정하였다..

유니티 2024.06.11

[멋쟁이사자처럼 유니티 TIL] node.js을 통한 비동기 서버 구축 구현 (+ 서버 구축 관련 용어 정리, 벡터와 라디안으로 회전 구현, 비동기 프로그래밍)

벡터와 라디안 회전 구현 Mathf.Deg2Rad: Vector 변수에 곱하면 라디안으로 변환해 준다. ● 벡터를 라디안으로 변환하여 회전 구현Vector3 newDirection = Vector3.RotateTowards(transform.forward, rotDirection, rotSpeed * Mathf.Deg2Rad, 0.0f);GetComponent().MoveRotation(Quaternion.LookRotation(NewDirection));  ● 쿼터니온으로 회전 구현Quaternion newQuaternion = Quaternion.RotateTowards(transform.rotation, Qua..

부트캠프 2024.06.08