목록분류 전체보기 (40)
A-Dyu의 개발 일기장

어셈블리는 기계어랑 1대1 대응되는 저급 프로그래밍 언어다.어셈블리를 개발할 때 예전에 리눅스(우분투)+vi에디터를 사용했었다. (진짜 살짝 찍먹)하지만 윈도우에서 작동되게 하고 WinAPI를 어셈블리에서 사용하고 싶어 윈도우에서도 어셈블리를 개발하기 시작했다. 1.nasm 다운로드어셈블리를 기계어로 바꿀려면 당연히 어셈블러가 필요하다.필자는 nasm을 사용했으며, 윈도우 64비트이기 때문에 win64버전을 사용한다.https://www.nasm.us/pub/nasm/releasebuilds/2.16.03/win64/ Index of /pub/nasm/releasebuilds/2.16.03/win64 www.nasm.us또는 윈도우 11을 사용한다면 winget을 사용해서 다운받을 수도 있다.winget..
유니티에서 네비메시를 사용할 때 바로 멈추지 않거나 Angular Speed를 아무리 높게 설정해도 회전 속도가 원하는 만큼 나오지 않을 떄가 있다.이럴 경우에선 velocity를 zero로 만들거나, 회전값을 바꿔 해결할 수 있다. 1.에이전트를 즉시 멈추게 하기먼저 isStopped를 true로 바꾼다, 하지만 이런 경우에선 바디만 몀추고 실제 계산은 계속 이루어지기 때문에velocity를 zero로 만들고 updatePosition을 false로 바꿔 해결할 수 있다.(물론 다시 움직일려면 또 바꿔야 한다)//움직임을 즉시 멈출 때public MovePause(){ navAgunt.isStopped = true; navAgunt.updatePosition = false; //계산 정지 ..
유니티에서 커맨드라인이나 bat파일로 실행할 때 커맨드 라인에서 인자를 받고 싶을 때가 있다.이럴 때 사용할 수 있는 방법이 있다. Environment.GetCommandLineArgs이 함수는 System네임스페이스에 포함된 Environment클래스의 기능이다.커맨드 라인에서 받은 여러 가지 인자를 string배열로 반환하며, 0번째 요소는 실행 파일을 실행할 때 사용한 경로이므로 1번째부터 요소를 읽는 걸 추천한다.using System;//Environment를 사용하기 위한 namespacevoid Start(){ string[] args = Environment.GetCommandLineArgs(); foreach (string arg in args) { Debu..
CS0308,CS0305 오류는 모두 제네릭에 관련된 오류다.CS0308은 제네릭이 아닌 클래스 또는 메서드에서 형식 인수를 사용할 때 일어난다.//일반 클래스class MyClass{ //member valuable, method}class Program{ public static void Main(string[] args){ MyClass myClass = new MyClass();//CS0308 //제네릭 클래스가 아니지만 형식 인수를 사용함 }}CS0305는 반대로 형식 인수가 필요한 클래스 또는 메서드에서 형식 인수 없이 사용했을때 일어난다.//제네릭 클래스class MyClass{ //member valuable, method}class Progr..
유니티에서 LookRotation을 사용하다가 Look rotation viewing vector is zero라는 메세지가 콘솔창에 출력됐다.이 함수는 LookRotation의 인수가 Vector3(0,0,0)이면 출력되는 콘솔로, 실행시키기 전 인수를 체크하는 걸로 해결할 수 있다.void Update(){ //pos가 Vector3.zero면 Look rotation viewing vector is zero메세지 출력 Quaternion.LookRotation(pos); //pos가 Vector3.zero인지 체크한 후 실행 if(pos != Vector3.zero){ Quaternion.LookRotation(pos); }}
오버헤드는 어떠한 작업을 수행할 때 추가로 소비되는 간접적인 자원을 말한다. 예를 들어, 함수 호출을 할 때 레이블을 점 프하는 과정에서 추가적인 작업이 들어가며, 이를 방지하기 위해 인라인 함수로 작성하는 등 다양한 방법으로 오버헤드를 예방할 수 있다.
리터럴이란 소소 코드상에서 직접적으로 값을 나타내는 고정된 값들을 의미한다.12나 "string"처럼 어떤 값인지 그 자체로 표현하는 모든 식별자를 뜻한다.상수랑 헷갈릴 수 있지만, 리터럴과 상수는 개념적으로 차이가 있다.리터럴은 소스 코드 상에서 값이 고정되며, 표현이 바뀌면 그에 따라 값이 바뀐다.즉 특정 표현은 어떤 코드라도, 어떤 프로젝트라도 절대로 값이 바뀌지 않는다.즉, 이미 소스 코드에 작성한 순간부터 값이 정해진 것이라고 보면 된다.하지만 상수(const)는 컴파일 시점에 값이 결정되며, 컴파일 전까진 값이 유동적으로 변한다.즉 const는 컴파일 시점에 리터럴로 바뀌어 컴파일된다. 실제로 컴파일 된 IL코드를 보면 모든 const값이 리터럴로 바뀐걸 볼 수 있다.리터럴은 다양한 표현식이 ..
C#에서 비트 값으로 플래그를 사용할 때 enum을 사용하여 쉽게 구현이 가능하다.[Flag]enum FlagEnum{ Flag1 = 1, Flag2 = 2, Flag3 = 4,}만약 플래그의 개수가 많아진다면 비트 연산자로 비트를 옮겨 사용할 수 있다. 이것이 가능한 이유는 리터럴과 리터럴의 연산은 컴파일 시간에 계산해 하나의 상수로 컴파일되기 떄문이다.[Flag]enum FlagEnum{ Flag1 = 1 그리고 or 비트 연산자를 사용하여 플래그를 지정해 사용한다. 만약 특정 플래그를 포함하는지 확인하려면, HasFlag 메소드를 사용하면 된다.FlagEnum flag = FlagEnum.Falg1 | FlagEnum.flag2;flag.HasFlag(FlagEnum.Flag1..