콘텐츠로 이동

문제 해결

먼저 도구 › 플러그인 관리자… 에서 상태 칸과 아래 상세 줄을 봅니다. 그다음 출력 로그에서 [플러그인 <id>] 줄을 찾습니다. 상태의 뜻은 불러오기와 수명에 있습니다.

증상원인해결
관리자 목록에 없음plugin.json 이 폴더 바로 아래에 없음(한 단계 더 들어가 있음)plugins\<폴더>\plugin.json 꼴로 옮깁니다.
관리자 목록에 없음폴더를 넣은 뒤 다시 훑지 않음「다시 훑기」를 누릅니다.
관리자 목록에 없음다른 폴더에 넣음도구 › 플러그인 폴더 열기 로 연 폴더에 넣습니다. 관리자 창 머리에 읽는 폴더가 모두 나옵니다.
「대기」에서 안 바뀜첫 실행 경고에서 「이번엔 안 불러옴」을 누름「켜기」 체크를 껐다 다시 켜면 경고가 다시 나옵니다. 에디터를 다시 켜도 나옵니다. 「믿을 수 있음 — 불러오기」를 누릅니다.
「오류(파일)」 id 형식 틀림대문자 · - · 숫자로 시작소문자로 시작하고 소문자 · 숫자 · _ · . 만 씁니다.
「오류(파일)」 version 형식 틀림1.0 처럼 두 마디1.0.0 처럼 세 마디로 씁니다.
「오류(파일)」 sdk … 가 없음 · sdk 버전 틀림sdk 칸이 없거나 틀림"^1.0" 꼴로 씁니다.
「오류(파일)」 dll 은 plugin.json 옆…dll 에 .. 이나 절대 경로plugin.json 기준 상대 경로로 씁니다.
「오류(파일)」 dll 없음빌드하지 않았거나 이름이 다름빌드 출력의 dll 이름과 dll 칸을 맞춥니다.
「오류(격리됨)」 불러오기 실패: … entry 형식 없음entry 의 네임스페이스 · 클래스 이름이 틀림네임스페이스.클래스 전체 이름을 씁니다. 대소문자도 맞춥니다.
「오류(격리됨)」 불러오기 실패: … INpEditorPlugin 구현이 없음진입 클래스가 없거나 abstract · 인자 없는 public 생성자 없음public sealed class Plugin : INpEditorPlugin 에 인자 없는 생성자를 둡니다.
「오류(격리됨)」 불러오기 실패: … 는 INpEditorPlugin(인자 없는 생성자) 이 아님entry 클래스가 INpEditorPlugin 을 구현하지 않거나 인자 없는 public 생성자가 없음구현과 생성자를 확인합니다.
「오류(파일)」 같은 id … 가 이미 있음다른 폴더에 같은 id한쪽을 지우거나 id 를 바꿉니다.
「버전 안 맞음」 SDK ^1.3 필요 — 이 에디터는 1.2.0sdk 범위가 에디터 SDK 보다 높음에디터를 업데이트하거나, 쓰는 기능에 맞게 sdk 를 낮춥니다.
「버전 안 맞음」 불러오기 실패: MissingMethodException 등새 SDK 로 빌드했는데 sdk 를 낮게 씀sdk 를 실제로 쓰는 기능의 판으로 올립니다.
「오류(격리됨)」 불러오기 실패: …Register 에서 예외출력 로그의 예외를 고칩니다. 아래 「등록」 표를 봅니다.
증상원인해결
켜지자마자 「오류(격리됨)」 … 가 비어 있음Id · Name · Kind · 단축키 이름 · 키가 빈 글빈 칸을 채웁니다.
「오류(격리됨)」 단축키 키를 읽을 수 없음"1~8" · "W/E/R" · "Ctrl++" 같은 키 글"Ctrl+Alt+H" 꼴로 씁니다. 등록점의 키 표를 봅니다.
「오류(격리됨)」 씬 이벤트 type 관련같은 역할에 같은 Type 이 이미 있음(내장 cinematic 등)Type 앞에 내 이름을 붙입니다.
콘솔 명령이 안 생김같은 이름의 명령이 이미 있음 · 이름에 공백이름 앞에 내 이름을 붙이고 공백을 뺍니다.
메뉴가 엉뚱한 곳에 생김Menu 이름 오타(새 메뉴가 생김)"파일" · "편집" · "창" · "도구" · "빌드" · "도움말" 중 하나를 씁니다.
패널이 안 보임패널은 닫힌 채로 생김창 메뉴에서 그 패널을 켭니다.
모드가 모드 줄에 안 보임앞 8개 뒤의 모드는 「더 보기」에 있음모드 줄 끝의 「더 보기」를 엽니다.
메뉴 · 탭 이름의 기호가 사라짐그림 문자는 화면에서 뺌글만 쓰고 아이콘은 Icon 칸에 아이콘 이름으로 줍니다.
증상원인해결
쓰다가 「오류(격리됨)」콜백(메뉴 · 명령 · 이벤트 · 패널 글 · Simulate)에서 예외출력 로그 오류 → 격리 — <어디>: … 를 보고 고친 뒤 「다시 읽기(선택)」
World.Edit 에서 InvalidOperationException다른 큰 편집 작업(채우기 · 지형) 진행 중작업이 끝난 뒤 다시 합니다. 예외를 잡아 알림으로 바꿉니다.
블록이 안 바뀜 · 반환값이 적음잠긴 칸(함께 짓기 잠금 · 잠긴 액터 · 칸 지킴이)반환값(바뀐 칸 수)으로 확인합니다.
블록이 보라 · 검정 체크무늬블록 상태 글 오타 · 네임스페이스 빠짐minecraft:stone_bricks 처럼 정확히 씁니다.
Ctrl+Z 를 여러 번 눌러야 돌아감Edit 를 여러 번 부름한 동작을 Edit 한 번으로 묶습니다.
새 월드에 앞 월드의 그림 · 상태가 남음WorldChanged 에서 비우지 않음host.WorldChanged += _ => { …Clear(); host.Draw.Clear(); };
편집할 때 에디터가 끊김Committed 처리기가 무거움수만 세고 무거운 일은 나중에 합니다.
패널을 열면 에디터가 끊김살아 있는 글(Label(() => …))이 월드를 훑음값을 필드에 담아 두고 글에서는 읽기만 합니다.
패널 숫자 칸이 저장 값과 다름패널은 켤 때 한 번 만들어짐Register 앞부분에서 Settings 를 먼저 읽습니다.
SetCamera 가 false플레이 중이 아님 · 값이 NaNhost.View.Playing 을 먼저 봅니다.
host.WorldChanged -= … 가 안 먹음호스트 이벤트는 -= 를 지원하지 않음처리기 안에서 플래그로 거릅니다.
설정이 사라짐설정 파일이 망가져 빈 설정으로 시작plugin_settings\<id>.json.bad 를 확인합니다.
증상원인해결
다시 빌드한 것이 반영 안 됨플러그인 폴더에 옛 dll 이 남음 · 다시 읽지 않음새 dll 을 덮어쓰고 「다시 읽기(선택)」
「다시 훑기」로는 반영 안 됨이미 켜진 플러그인은 다시 읽지 않음「다시 읽기(선택)」를 씁니다.
끈 뒤에도 메모리에서 안 내려감정적 이벤트 · 타이머 · 스레드에 내 객체가 남음IDisposable.Dispose 에서 풉니다.
끈 뒤에도 배경 작업이 돎Task.Run 작업을 멈추지 않음Dispose 에서 CancellationToken 으로 멈춥니다.
  • plugin.json: id 규칙 · version 세 마디 · sdk = 쓰는 기능의 최소 판 · dll · entry 이름이 맞다.
  • 폴더에 NP.Editor.Sdk.dll 이 없다(csproj Private=false).
  • 깨끗한 플러그인 폴더에 넣고 「다시 훑기」로 「켜짐」이 된다.
  • 출력 로그에 예외 줄이 없다.
  • 켜기 → 끄기 → 켜기에서 메뉴 · 패널 · 모드가 겹치거나 남지 않는다.
  • 새 월드 · 다른 월드 열기에서 앞 상태가 남지 않는다(WorldChanged).
  • 기능 한 번을 Ctrl+Z 한 번으로 되돌린다.
  • 선택 없음 · 빈 월드에서 예외가 없다.
  • 명령 이름 · 월드 로직 type · 액터 kind 앞에 내 이름이 있다.
  • 화면 글에 이모지 · 그림 문자가 없다.
  • 단축키가 내장 키와 부딪히지 않는다(도구 › 단축키… 에 빨간 줄 없음).
  • 월드 로직 type 을 더했으면 서버 쪽(NP Scene) 처리기도 준비했다.
  • Dispose 에서 배경 작업 · 정적 이벤트를 푼다.
  • 비밀키 · 토큰 · 개인 경로가 코드와 파일에 없다.