프로그래밍/C# + Unity
-
[C#] 크로스 스레드 작업이 잘못되었습니다. 오류 해결하기프로그래밍/C# + Unity 2023. 11. 29. 12:58
문제 상황C#으로 멀티 스레드 프로그래밍을 하다보면, 컨트롤이 자신이 만들어진 스레드가 아닌 스레드에서 액세스하는 경우에 아래와 같은 메시지를 출력한다. 이럴 때는 Invoke함수를 사용하여 컨트롤이 자신이 만들어진 스레드 아닌 스레드에서의 함수 호출을 위임한다. 소스 코드아래의 텍스트박스의 텍스트를 바꾸는 예제이다.private void InvokeAccess(TextBox textBox, string data) { if (textBox.InvokeRequired) { textBox.Invoke((MethodInvoker) delegate { textBox.Text = data; }); } else { textBox.Text = data;..
-
[C#] Enum을 ComboBox item에 집어넣기프로그래밍/C# + Unity 2023. 7. 4. 11:23
C#으로 프로그램을 만들다 보면 Enum을 ComboBox item에 집어넣어야 하는 상황이 가끔 생긴다. Linq를 사용하여 Enum을 Object[]로 만들어서 ComboBox에 넣으면 되는데, 다소 복잡하다. comboBox1.Items.AddRange(Enum.GetValues(typeof(MyEnum)).OfType().ToArray()); Enum.GetValues만 사용하면 반환 값이 System.Array로 나와 []로 캐스팅 하기 위해서 .OfType().ToArray()를 사용한다.
-
[C#, OpenCL] OpenCL로 SHA1 연산하기프로그래밍/C# + Unity 2023. 5. 30. 08:30
C#에서 OpenCL을 사용하고자 할 때, 여러 방법이 있지만 보통 Nuget Package에서 Cloo를 추가하여 사용한다. 1. kernelSource 작성 본격적으로 OpenCL을 사용하기 이전에, 아래와 같이 kernelSource를 작성해야한다. 마땅히 참고할 소스코드가 없어, https://en.wikipedia.org/wiki/SHA-1 의 pseudocode를 참조하여 구현하였다. __kernel void sha1(__global const unsigned char* data, int length, __global uint* digest) { int num_blocks = length / 512; uint h0 = 0x67452301; uint h1 = 0xEFCDAB89; uint h2 ..
-
[C#, webhacking.kr] Challenge 4번 풀기프로그래밍/C# + Unity 2023. 5. 18. 16:11
일반적인 webhacking.kr의 문제는 preg_match 회피 및 sql injection이 주를 이루지만 challege 4는 양상이 다르다. 아래는 challenge 4의 소스코드 중 일부이다. 해석하자면 10000000부터 99999999 사이의 랜덤한 숫자 하나를 골라 salt_for_you라는 단어를 salt로 사용하여 뒷 부분에 합친다. 이후, 해당 값을 chall4라는 이름의 세션에 담고 500번 sha1 해싱을 진행한다. 결론적으로, 문제를 해결하려면 출력된 hash 값을 보고 원래의 문자열을 알아 맞춰야하는 역해싱 문제이다. 해결하는 방법은 여러가지가 있겠지만 귀찮아서 10000000부터 20000000 사이의 값만 생성 후 비교하고 없으면 새로고침을 반복하는 방법으로 해결하려고 아..
-
[C#] FloodFill 알고리즘과 땅따먹기프로그래밍/C# + Unity 2023. 4. 1. 15:06
땅따먹기기본적으로 땅따먹기는 paper.io와 같이 넓은 땅 위에 자신의 시작 지점을 정하고 말을 움직이며 선을 그려 다시 본인의 선에 닿으면 해당 부분 만큼 본인의 땅이 되는 게임이다. 땅따먹기가 사각형만 되었어도, 구현에 어려움을 느끼지 않겠지만 아래와 같이 그려지기 시작하면 내부를 어떻게 채워야 할까 머리가 아파진다. FloodFill 알고리즘Flood fill 알고리즘은 일반적으로 2차원 배열에서 사용되는 컴퓨터 그래픽스 및 이미지 처리에서 사용되는 알고리즘이다. 이 알고리즘은 영역 채우기를 위해 사용되며, 특정 시작 지점에서부터 인접한 영역을 찾아 동일한 색으로 채우는 과정을 반복한다. 주어진 시작 좌표를 기준으로 상하좌우로 인접한 픽셀을 검사하면서 같은 색으로 채워진 영역..
-
HttpWebRequest 루트 인증서와 해당 도메인 인증서 확인하기.프로그래밍/C# + Unity 2020. 5. 18. 19:20
RemoteCertificateValidationCallbackRemoteCertificateValidationCallback은 HTTPS 인증서를 확인할 수 있게 해준다. 단, UNITYTLS_X509VERIFY_FLAG_NOT_TRUSTED'라는 메시지가 나오면서 Unity상에서는 위와 같은 방법을 사용할 수 없다. 왜냐하면 현재와 같이 루트 인증서와 비교하여 검증하기 위해 OpenSSL/MbedTLS를 사용하는 대신 시스템별 TLS API를 통해 검증을 수행함으로써 이 문제를 해결할 수 있을지 모르지만, 이 해결방법은 서로 다른 운영체제에서 작동되지 않을 가능성이 크기 때문에 Unity상에서 구현을 하지 않았다고 한다. https://docs.microsoft.com/ko-kr/dotne..
-
[C#] 기본 연결이 닫혔습니다. 보내기에서 예기치 않은 오류가 발생했습니다.프로그래밍/C# + Unity 2019. 11. 18. 17:40
C#에서 HttpWebRequest를 이용하여 서버와 통신할 때, '기본 연결이 닫혔습니다. 보내기에서 예기치 않은 오류가 발생했습니다.'와 같은 오류가 나온다면, 해결방법은 다음과 같다. 1. 해당 프로젝트의 프레임워크 버전을 4.5.2이상으로 올린다. 2. 아래 코드를 적용한다. ServicePointManager.SecurityProtocol |= SecurityProtocolType.Ssl3; ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls; ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls11; ServicePointManager.SecurityProtocol |..
-
[Unity] Easy Save Plugin to PlayerPrefs프로그래밍/C# + Unity 2019. 11. 4. 14:23
Easy Save 플러그인 Unity에는 EasySave라는 저장을 편리하게 해주는 유료 플러그인이 있다. Easy Save의 특정 기능을 꼭 써야만하는게 아니라면, Unity 내장 함수인 PlayerPrefs와 JsonUtility만으로도 EasySave의 거의 모든 기능을 사용할 수 있다. 소스 코드 EasySave의 암호화 후 저장기능을 사용하지 않을 거라면, 파일 읽기/쓰기를 하는 아래의 코드는 같은 결과를 내놓는다. //쓰기 ES3.SaveRaw(savedata, inputField.text + ".sav", settings); File.WriteAllText(inputField.text + ".sav", savedata); //읽기 result = ES3.LoadRawString("Save/"..