골드메탈님디버그 강좌

 

 

 

 

Compile error = 소스 코드 에러

 

ide (비쥬얼 스튜디오) 에서 이런 빨간 밑줄이 보통 에러난 부분이다

 

 

 

 

 

 

runtime error 플레이 모드 실행 중 갑자기 발생하는 에러

 

런 타임 에러는 코드 한 줄 수정해서 끝나는 게 아닐 수 있음

여러 부분을 살펴봐야 함

 

 

 

Console 창의

빨간 느낌표 더블 클릭 하면 ide 로 연결됨

 

 

 

 

로직 에러

logic error

에러 메시지는 안 뜨지만, 의도하지 않은 결과가 나타남

 

 

 

 

+

 

오류가 난 곳에 간 후 Debug.Log(속내용물);을 넣는다

 

디버깅 방법

Debug Log 사용해보기

 

 

Debug Log 사용 후 Null 메시지 가 나오면

해당 부분(Item)이 없어서 생기는 오류라 캄

 

 

해결되면 디버그 로그 이렇게 뜸

 

 

+

 

 

 

ide 에서 , 맨 왼쪽을 누르면 저렇게

빨간 점 이 생김

 

중단점 (break point) 이라 불림

 

 

상단 디버깅 시작

디버깅 모드 진입 

 

 

 

유니티 인게임 플레이모드 시, 

버그 뜨는 부분에 돌입시

게임 멈추고 ide 화면으로 돌입하게 됨

 

 

해당 줄 - > 우클 -> 조사식 추가

 

 

 

영문판에서 조사식은 watch 다

 

 

 

그럼 하단에 

값이 null 인 걸 확인 가능

 

 

 

프로시저 나가기 를 누르면

다시 게임 플레이모드 재개 가능

 

 

 

 

디버깅 완료했으면 빨간 동그라미, 중단점 을 해제 할 것

 

 

+

 

 

유니티에서 자주 발생되는 오류 들

 

 


NullReferenceException
존재하지 않는 값(null)을 참조하려고 할 때 나타남
초기화 되기 전 사용되고 있나 확인할 것

MissingReferenceException
참조할 걸 찾을 수 없을 때

ArgumentException
이 에러는 매개변수가 예상된 값과 다르면 발생합니다

IndexOutOfRangeException
리스트 인덱스 범위가 예상 값을 초과할 때

FileNotFoundException
파일을 찾을 수 없을 때

 

 

+

 

 

NullReferenceException 해결법

null : 공허하다. 아무것도 없다는 뜻임

초기 시작 작업을 안해줘서 생기는 문제

 



오류가 난 곳. rigid 라는 구문 더블 클릭해서
위 쪽으로 타고 올라가고 살펴보기

 

 



Awake 나 Start 에

알맞은 문구를 넣어 초기화를 하면 해결됨

 

 

+

 

public 변수인 경우,  인스펙터 창에서 오브젝트 드래그 해서 지정해서 

NullReferenceException 해결 가능

 

+

 

 

다른 오브젝트와 충돌시 이런 NullReferenceException  에러가 뜨기도 함

 

 

다른 오브젝트에서 꺼내쓸 컴포넌트를 지정하지 않아서임

= 스크립트를 빼 먹어서임

 

   

스크립트 빼 먹은 실수였던 거임

스크립트를 지정해주면 해결

 

 

 

+

 

 

 IndexOutOfRangeException

배열, 리스트 범위를 넘을 때 발생

초과 하거나 미만해서 접근하면 발생

 

위의 경우

Size 4 로 설정했으면 값은 0 1 2 3 이다

 

유니티에선 첫 시작을 0부터 시작한다

 

스크립트 상에서 index < 5 로 해놨다

 

이 때 4  가 값이 되면 에러가 나는 것이다

 

왜냐면 0 1 2 3 만 해당되기 때문임

 

 

 

for 조건문 다룰 땐

상수를 쓰면 이런 문제가 자주 발생한다 함

 

상수 = 변수의 반댓말. 특정하게 지정한 숫자

 

   

상수를 쓰지 않고 objList.Length 를 쓰면 해결

 

 

또다른 해결법으론,

 

 

for 가 아니라 foreach 를 쓰면 해결

 

 

+

 

Debug 밑줄 오류. 모호한 참조 에러 날 때

 

 

맨위 using 참조 저 두개가 겹치는 게 원인

 

 

 

using U/nityEngine; 말고 다른 참조는 지워주면 해결

 

 

 

그래도 해결 안되면 아래 참조문구 추가

using Debug = UnityEngine.Debug;

 

 

+

 

 

ui 버튼 만들었는데 반응이 없을 때

 

 

 

다른 ui가 그 위를 덮어버려서 임

 

 

 

위 예시의 경우 "컨트롤" 글자 크기가 쓸데없이 커서 아래까지 침범했던 거임

 

 

 

 

 

UI - EventSystem 을 만들면 해결

 

 

+

 

 

버튼을 안 눌렀는데 눌림 상태가 되는 버그

 

 

button - navigation - none 으로 설정

 

+

 

 

 

이미지 Sprite 불러왔는데 이상하게 보여질 때

   

 

 

Sprite Mode = Pixel Per Unit 을 이미지 고유 사이즈로 변경 - Apply
예 : 이미지 사이즈가 16 x 16 이면 16을 입력

Advanced - Filter - Point 등으로 변경 - Apply

Default - Compression - None - Apply

압축을 안 시키겠다는 뜻

 

+

 

 

   

 

자동완성으로 문구를 만들었는

private void 이렇게 자동으로 생성되는 경우

 

 

비쥬얼 스튜디오 - tools - option - tools for unity - scope - default 로 설정

 

 

+

 

   

 

색이 이상하게칙칙하면 window - rendering - light  - generate lighting 클릭

 

+

 

스크립트 컴파일 속도 빠르게 하는 법 

이거 해보니 오히려 플레이 버튼 두 번 눌러야 함

 

1 프로젝트 세팅-  에디터 - enter play mode settings

 

do not reload domain or scene

 

 

2

무료 에셋   Fast Script Reload 을 깔기

https://assetstore.unity.com/packages/tools/utilities/fast-script-reload-239351?locale=ko-KR&srsltid=AfmBOooKyZdilioQmDKKUFO8Sn4nqU3AljKd0-HWoYAR1-AMxToQmh5B

 

Fast Script Reload | 유틸리티 도구 | Unity Asset Store

Use the Fast Script Reload from Chris Handzlik on your next project. Find this utility tool & more on the Unity Asset Store.

assetstore.unity.com

 

이거 버그 많음

 

+

 

컴파일 작동 안하면

유니티 에디터의 메뉴에서 Edit > Preferences로 이동합니다.
General 탭에서 Auto Refresh 옵션이 활성화되어 있는지 확인합니다.
만약 비활성화되어 있다면, 이를 활성화해 주세요.

 

+

 

https://www.youtube.com/watch?v=dynN70kyD9A

 

물리 버그 문제 고치기 영상 링크

 

+

 

rigid.velocity=Vector3.zero;

 

라고 쓰면 비주얼스튜디오에서 취소선이 생기는 오류가 있음

rigid.Sleep();
//rigid.velocity=Vector3.zero; 대체코드

 

그래서 rigid velocity vector3 zero 코드 말고

rigid sleep 을 사용함

 

+

 

척추개수 3 + 갑빠 매뉴얼 뼈 추가

척추개수 3 , 가슴 뼈 다른

아마추어를 사용할 경우

 

같은 블렌더 오토리그 를 사용해서 리깅해도

 

뼈 가 서로 다르면 저렇게 애니 깨짐

 

다른 캐릭간 애니메이션 공유시 주의할 것

 

 

+

 

유니티 플젝 평소대로 열었는데, 갑자기 세이프 모드니 오류 뜰 때,

 

예전에 만든 스크립트에 글자 오류가 있었다는 뜻임

 

괄호 () {} [] 를 빠뜨렸다던가

; 마침표를 빠뜨렸다던가

철자가 틀렸다던가가 원인임

 

+

 

    int equipWeaponIndex = -1;

 

이런 인덱스 값은 맨처음 값을 -1 로 지정해줘야 버그가 해결되기도 함

 

0 으로 설정? 아님

1 으로 설정? 아님

 

-1 임. -1은 아무것도 아닌 걸 지정할 때를 의미함

 

+

 

 

챗봇에게 스크립트 물어볼 땐, 글자수 제한 10,000자가 있으니

다 복붙 못하니 주의

 

 

+

 

 

            rigid.AddForce(Vector3.up * 80, ForceMode.Impulse);

 

플레이어가 점프했는데, 점프 모션에서 착지모션으로 변환이 안되는 버그

 

rigidbody 컴포넌트의 Mass 무게 5 이 값을 줄이거나

 

스크립트 상 애드 포스의 저 80 숫자 값을 올려 점프하는 힘을 높이면 됨

 

+

 

playTime / 3600

 

(int) (playTime / 3600);

 

값 적용 안되면
이렇게 앞에 (int)  넣기

정수숫자 라고 알려줘야 함

 

new Vector3 (boss.curHealth / boss.maxHealth, 1 , 1);

 

new Vector3 ((float)boss.curHealth / boss.maxHealth, 1 , 1);

 

값 적용 안되면
이렇게 앞에 (float) 소수 라고 알려줘야 함

 

+

 

 public TextMeshProUGUI talkText;

 

 // 옛날 방식 : 
 // public Text talkText;

 


유니티 최신버전에선 그냥 Text를 스크립트에서 안씀
전부 TMP 를 씀
TextMeshProUGUI  라고 스크립트 상에 표기함

 

+

 

            StopCoroutine(Talk());
            StartCoroutine(Talk());

 

뭔가를 스크립트로 실행하기 전에

stop 으로 닫기를 먼저 하자


이래야 꼬이지 않고 정상적으로 출력 가능해짐

 

 

+

 

using System;
using Random = UnityEngine.Random;

 

Random 사용시

스크립트 맨위 네임 스페이스를 이거 불러오게 함

 

int ranCoin = UnityEngine.Random.Range(0, 3);

// int ranCoin = Random.Range(0, 3);
// 이렇게 그냥 Random 쓰면 빨간줄 오류남

 

+

 

 

애니메이션 탭에서 add property 가 안눌러져요

하이어라키 창에서 해당 오브젝트를 클릭하면 됨

 

+

 

볼트 구버전 -> 비쥬얼 스크립팅 신규버전

 

구버전 Bolt 신버전 Visual Scripting
new flow machine New Script Graph
flow machine component script machine component
Branch  if
Self This
Control Inputs  Trigger Inputs 
Value Inputs  Data Inputs
Super Unit  Subgraph
  Graph Inspector 는 Window탭에서 켜는게 아니라
Script Graph의 왼쪽 위 자물쇠 옆에 i 버튼
Set Text Text Mesh Pro UGUI Set Text
   
Edit > Project Settings > Type Options 
 ( unit wizard)
Edit > Project Settings > Visual Scripting > Type Options
 tools - bolt - update unit options  edit - project settings - visual scripting - regenerate nodes
  window> variable 창이 없어지고
그래프 창에서 왼족 위에 <X> 버튼 (BlackBoard) 

 

+

 

 

베리어블 Variable 타입이 다 통일 했는지 확인해라

 

Scene에 속해있는 변수는 Get 노드 그리고 Set 노드에 Scene 으로 되어있나 확인해야함

 

+

 

 

tmp text mesh pro 의 맨아래 오버플로우 기본값은 no wrap, overflow 임

 

 

반응형
Posted by 이름이 익명
: