[Unity] 오일러 각(eulerAngles)과 쿼터니언(quaternion)
·
공부/Unity
오일러 각(eulerAngles)이란 3차원 공간에서 물체의 방향을 표현하기 위해 오일러가 만든 3개의 각도를 말한다. 오일러 각에는 짐벌락(gimbal lock) 현상이라는 문제가 있다. 서로 다른 회전축이 겹쳐서 한 축에 대한 계산이 불가능한 현상을 말한다. 이 영상을 보면 이해가 매우 잘된다. https://youtu.be/zc8b2Jo7mno 오일러 각에서는 각 축을 개별적으로 계산한 후, 합쳐서 생각하기 때문에 이러한 현상이 나오는데 짐벌락을 피하기 위해 나온 것이 쿼터니언(quaternion)이다. ​ ·쿼터니언은 모든 축을 한 번에 계산하기 때문에 짐벌락 현상이 나오지 않는다. ·회전을 계산할 수 있다. ·180도를 넘어가는 회전은 표현할 수 없다. ​ 사실 유니티 공부를 할 때는 여기까지만..
[Unity] NullReferenceException
·
공부/Unity
NullReferenceException: Object reference not set to an instance of an object UnityEditor.HostView.InvokeOnGUI (UnityEngine.Rect onGUIPosition) (at :0) UnityEditor.DockArea.DrawView (UnityEngine.Rect dockAreaRect) (at :0) UnityEditor.DockArea.OldOnGUI () (at :0) UnityEngine.UIElements.IMGUIContainer.DoOnGUI (UnityEngine.Event evt, UnityEngine.Matrix4x4 parentTransform, UnityEngine.Rect clippingRe..
[Unity] testrunner.dll does not exist - 2
·
공부/Unity
copying assembly from 'temp/unityengine.testrunner.dll' to 'library/scriptassemblies/unityengine.testrunner.dll' failed. detailed error: temp/unityengine.testrunner.dll does not exist 예전에도 날 괴롭힌 testrunner 문제다. 이거 잡겠다고 한 10시간을 소비했다. 윈도우를 갈아 엎으면 된다고 하는데 그럴 수 있는 상황이 아니었다. 내가 해본 방법을 모두 소개하려 한다. 내가 본 모든 해결방법과 문제점은 영어, 스페인어, 일본어, 중국어 등으로 나와있었다. 그나마 맞붙어볼 만한 영어로 된 해결방법을 소개하는 것이니 도움이 되었으면 좋겠다. 나는 도움되지 않..
[Unity] CSharp.dll does not exist
·
공부/Unity
Copying assembly from 'Temp/Assembly-CSharp.dll' to 'Library/ScriptAssemblies/Assembly-CSharp.dll' failed. Detailed error: Temp/Assembly-CSharp.dll does not exist ​ Assets -> Reimport All 을 해주면 사라진다.
[Unity] unity visual studio 연결 - 대상 프레임워크가 설치되지 않음 오류
·
공부/Unity
unity -> edit -> preferences -> external tools -> visual studio 2022로 연결했다. script파일을 더블 클릭해서 visual studio를 열었는데 해당 프레임워크가 설치되지 않음 이라는 오류 문구가 나왔다. 권장하는 방법에 체크하고 들어가보면 이렇게 오류가 뜨고 "이 unity 프로젝트는 visual studio tools for unity용으로 생성되지 않았습니다"라는 오류 문구가 나온다. 내가 찾은 해결방법은 1. unity, visual studio 최신 버전으로 업그레이드 2. 두번째 해결 방법인 .NET Framework 클릭 후, 설치 닷넷 설치를 하자마자 오류 박스도 뜨지 않고 빨간줄도 깨끗하게 없어진 모습을 확인할 수 있다.
[Unity] All compiler errors have to fixed before you can enter playmode! 오류 해결
·
공부/Unity
애니메이션을 확인하려고 재생 버튼을 누르니 All compiler errors have to fixed before you can enter playmode! 오류가 생겼다. 콘솔에서 어떤 오류가 생겼는지 확인하고 오류를 모두 해결해주면 된다. 내 오류는 copying assembly from 'temp/unityengine.testrunner.dll' to 'library/scriptassemblies/unityengine.testrunner.dll' failed. detailed error: temp/unityengine.testrunner.dll does not exist 였다. 사실 이게 무슨 오류인지도 모르겠고 무작정 구글링을 하니 역시나 많은 해결방법이 있지는 않았다. ​ 1. 재실행 2. 프..
[Unity] No Sprite Editor Window registered. 해결하기
·
공부/Unity
(말도 안되는 파란 이모티콘이 가리키고 있는) Sprite Editor를 눌렀는데 "No Sprite Editor Window registered."로 시작하는 오류 문구가 나왔다. 간단한 해결방법이 있다. 1. unity가 알려주는 데로 window -> Package Manager로 들어간다. 2. 잠시 기다리면 이런 화면이 뜰 텐데 이건 In Project에 들어있는 기능을 보여주는 것이다. sprite editor가 정상적으로 작동하지 않았을 경우 이곳에 2D Sprite 칸이 존재하지 않을 것이다. 3. In Project를 Unity Registry로 변경한 후, 4. 2D Sprite를 찾아 누르면 5. Remove 버튼 외에 옆에 Install 버튼이 있을 것이다. 눌러서 설치해준다. 6...
[C#] Dictionary란
·
언어/C#
Dictionary란 Key값과 Value를 사용해 값들을 지정해놓을 수 있는 유용한 클래스를 말한다. 정말 사전처럼 미리 지정해놓은 Key값에 해당하는 Value를 손쉽게 찾아볼 수 있다. Key값은 중복되어서는 안된다. using System; namespace ConsoleApp1 { class Program { static void Main(string[] args) { Dictionary dic = new Dictionary(); // Dictionary 이름 = new Dictionary(); dic.Add(3, "봄"); dic.Add(1, "겨울"); dic.Add(10, "가을"); dic.Add(8, "여름"); foreach(KeyValuePair n in dic) Console.Wr..
[C#] virtual과 abstract (추상 클래스)
·
언어/C#
·virtual 상속 받는 클래스에서 virtual에 있는 내용 중 필요한 것만 골라서 구현해주면 된다. ​ ·abstract (추상 클래스) 상속 받는 클래스에서 abstract에 있는 내용을 반드시 구현해주어야한다. abstract는 추상 클래스다. 추상 클래스에 있는 멤버는 구현할 수 없고 상속받는 곳에서 구현해주어야 한다. using System; namespace ConsoleApp1 { class Program { public abstract class Essential { public virtual void Breath() { Console.WriteLine("숨쉬기"); } public abstract void Fly(); public abstract void Swim(); } public..
[C#] Queue과 Stack
·
언어/C#
Queue와 Stack은 선형자료구조를 사용할 때 유용한 두 구조이다. ​ ·Queue 가장 먼저 들어온 값이 가장 먼저 빠진다. using System; namespace ConsoleApp1 { class Program { static void Main(string[] args) { Queue q = new Queue(); q.Enqueue("첫 번째"); q.Enqueue("두 번째"); q.Enqueue("세 번째"); foreach (string s in q) Console.WriteLine($"{s}", s); Console.WriteLine(); q.Dequeue(); foreach (string s in q) Console.WriteLine($"{s}", s); } } } q.Dequeue..