본문 바로가기

개발더미10

[개발더미][Unity] NavMeshAgent에서 물리로 바꿀 때 버그 수정 (feat. 밑으로 추락하는 버그) navMesh를 구웠을 때, 실제 길보다 띄워져서 ai경로가 생기는 현상 발생 -> 멈추고 나서 아래로 추락하는 버그 생김 navMesh.updatePosition과 navMesh.updateRotation을 false로 바꿨는데도 움직이다가 멈추니깐 잘 안됐음. 그래서 꼼수로 updatePosition을 멈추는 순간에 false->true->false로 했더니 됨. 근데 왔다갔다 하는건 그대로임. -> ai맵을 구울때 생기는 살짝 뜬 공간(?)만큼 원래 맵을 올려주니 잘 되는듯..? -> updatePosition, updateRotation, isStopped, velocity를 조절하면 됨.(아래 코드 참고) 2024. 1. 5.
[개발더미][Unity] 유니티 GPU 버그 - D3D11 swapchain~ 개발 중 갑자기 아래와 같은 문구가 뜨면서 유니티가 튕겼다. 그래서 이리저리 서치해서 해결방안을 찾아냈다! 💡해결방안 디스플레이 설정 > 그래픽 > 유니티 아이콘 클릭 > 옵션 클릭 > Windows가 결정하도록 허용 -> 고성능으로 변경 cf) 이 방법으로도 안 될 경우 아래 사이트를 참조하길 바란다. Bug - Failed to present D3D11 swapchain due to device reset/removed. List of Solutions For reference, the bug report is IN-41214. So this unrecoverable error can happen for many but essentially your graphic card resets because .. 2023. 12. 26.
[Unity] 유니티 AirSim 적용(dll 파일 설치) 2023.12.01 기준 1. 유니티 설치 2. airsim 파일 다운 GitHub - microsoft/AirSim: Open source simulator for autonomous vehicles built on Unreal Engine / Unity, from Microsoft AI & Res Open source simulator for autonomous vehicles built on Unreal Engine / Unity, from Microsoft AI & Research - GitHub - microsoft/AirSim: Open source simulator for autonomous vehicles built on Un... github.com 3. 유니티로 airsim 실행 - A.. 2023. 12. 1.
[Unity] 유니티 Terrain에 지형 데이터 .tif 넣는 방법 - 유니티에서는 최대 4K까지 지원하는 듯 1. 지형 elevation파일(.tif)과 텍스쳐 이미지 파일(.tif)을 받는다. 2. 유니티 새로운 씬 생성 3. Hierarchy에서 Terrain 생성 4. 스크립트 작성(높이값을 반전) using UnityEngine; public class SetTerrainHeight : MonoBehaviour { public Texture2D HeightMap; [ContextMenu("SetHeight")] public void SetHeight() { TerrainData terrainData = GetComponent().terrainData; int terrainWidth = terrainData.heightmapResolution; int terrai.. 2023. 11. 27.
[개발더미][Unity] Post Processing - 흑백, 반전, 초점 조절 - 업그레이드 버전 1. Unity > Window > PackageManage의 Post Processing을 다운받아 사용한다. 2. 사용할 카메라에 Post-process Layer 컴포넌트를 추가한다. 3. Layer에 사용할 Layer를 추가(ex. Post process)하고, Post-process Layer 컴포넌트의 Layer를 해당 레이어로 설정 4. Hierarchy 창에서 마우스 우클릭> 3D Object > Post-process Volume 추가 5. Profile의 New 버튼을 눌러 새로운 Profile 생성 6. Add Effect > Unity > 이하 속성들 클릭 후 생성가능 ※ 버전이 올라가면서 유니티 자체에 내장기능으로 바뀌면서 적용법이 조금 달라졌다. 1. 카메라 자체에 Volume .. 2023. 11. 7.
[개발더미][Unity] 바라보는 방향으로 회전 struct RotData { // 회전 데이터 public float angle; // 회전 각도 public float rotDir; // 회전 방향 } void CalculateAngle(Vector3 forwardDir, Vector3 rightDir, Vector3 lookDir, out RotData data) { // 각도 계산 함수 // 자신의 앞 방향 forwardDir과 바라봐야 할 방향 lookDir 사이의 각도를 구하는 함수 // 1. 각 입력 벡터를 정규화하여 크기를 1로 세팅 // 2. 두 벡터 사이의 각도를 x라고 하면 cos(x)는 자신의 forwardDir의 크기 1과 forwardDir, lookDir의 내적값의 크기 d로 구할 수 있음 // 3. cos(x) = d/1 .. 2023. 7. 29.
[개발더미][Unity] 타점에 콜라이더 생성, Physic.OverlabSphere() protected override void OnAttack() { // 공격 발생시 동작 print("atk"); // 타점 주변의 콜라이더 중 Monster 레이어를 가진 콜라이더만 가져옴 // 문제 발생 : 3번째 공격부터 콜라이더 인식을 못함ㅋㅋ // 해결 -> rigidbody의 isKinematic을 체크하여 해결! Collider[] monsterColiders = Physics.OverlapSphere(attackPoint.position, 1, attackLayer); foreach (Collider col in monsterColiders) { print(col.gameObject.name + " attack"); if (col.GetComponent() == null) continue;.. 2023. 7. 25.
[개발더미][Unity] 모노 싱글톤 using System.Collections; using System.Collections.Generic; using UnityEngine; public class Singleton : MonoBehaviour where T : MonoBehaviour { private static object lockObject = new object(); // 쓰레드 안전화에 사용 private static bool isQuit = false; // 프로그램이 종료되거나 이상이 있는 경우 판단 private static T instance = null; // 객체 public static T Instance { // 쓰레드 안전화(Thread-Safe) get { // lock블럭 : 한번에 한 쓰레드만 실행되도록 .. 2023. 7. 25.
[개발더미][Unity] FSM #region FSM // FSM을 사용한 이유 // 1. 직관적 -> 상태를 알아보기 쉬움 // 2. 명확성 -> 상태별 수행 동작이 명확하게 분리됨 // 3. 예방 -> 상태가 겹치는 오류 발생 사전 차단 protected enum State { Idle, Move, Attack, Dead } [SerializeField] protected State myState; protected override void ChangeState(State changeState) { // 캐릭터의 상태를 바꾸는 함수 if (changeState == myState) return; // 같은 상태로 변경하는 경우 myAnim.SetBool(myState.ToString(), false); myState = change.. 2023. 7. 24.
[개발더미][Unity] 추상 클래스 using System.Collections; using System.Collections.Generic; using UnityEngine; // 추상 클래스를 사용한 이유 // 1. 설계도 역할 -> 몬스터와 플레이어의 공통 특성을 파악(추상화) // 2. 캡슐화 -> 변수를 드러나지 않게 함(데이터 보호) // 3. 상속 -> 중복 코드 최소화 // 4. 다형성 -> 오버라이드 사용 public abstract class CommonProperties : MonoBehaviour { protected enum State { Idle, Move, Attack, Dead } [SerializeField] protected State myState; protected abstract void ChangeS.. 2023. 7. 24.