Get it on Google Play


Wm뮤 :: '분류 전체보기' 카테고리의 글 목록 (77 Page)

블로그 이미지
가끔 그림그리거나 3D모델링하거나
취미로 로봇만드는
전자과 게임프로그래머 (퇴사함)
2022.3.22f1 주로 사용
모카쨩
@Ahzkwid

Recent Comment

Archive


'전체보기'에 해당되는 글 1152건

  1. 2020.07.29 c# Array(배열)관련
  2. 2020.07.28 유니티 키보드
  3. 2020.07.28 c# @변수
  4. 2020.07.28 c# 문자열 처리
  5. 2020.07.27 OnGUI
  6. 2020.07.24 아크 조련일지
  7. 2020.07.24 유니티 스파인 오류 모음
  8. 2020.07.20 비주얼 스튜디오 단축키
2020. 7. 29. 19:25 Unity/C#

배열 생성 이상한방식

//1차원
Array array1 = Array.CreateInstance(typeof(int), 사이즈);

//2차원
Array array2 = Array.CreateInstance(typeof(int), X사이즈, y사이즈);

//가변
Array arrayMain = Array.CreateInstance(typeof(Array), 2);
BossArray.SetValue(array1, 0);
BossArray.SetValue(array2, 1);

 

배열관련 함수

//해당조건을 만족하는 번호를 반환. 없으면 -1
var nameAIndex = System.Array.FindIndex(array,x => x.name == "A");

//해당조건을 만족하는 값을 반환.
var nameA = System.Array.Find(array,x => x.name == "A");

//해당조건을 만족하는 값들을 반환. RemoveAll대용으로도 사용가능
var nameAs = System.Array.FindAll(array,x => x.name == "A");

//중복되는것만 추출
var redundantArray = System.Array.FindAll(array, x => List.Contains(x));

//중복되는것만 추출2
redundantArray = System.Array.FindAll(array, x => System.Array.FindIndex(array2,y=>y==x)>=0);

//RemoveAll(삭제)용도일경우
System.Array.FindAll(배열,x => x.name != "A");

//해당조건을 만족하는게 한개라도 존재하는지
System.Array.Exists(배열,x => x.name == "A");

//내용물에 전부 1을 더하여 반환
int[] 배열=System.Array.ConvertAll(배열,x => x+1);

//변수값 0으로 초기화
int[] 배열=System.Array.ConvertAll(배열,x => 0);


//bool[] 중 하나라도 true인지 검사
return System.Array.Find(bools, x => x == true);

//bool[] 중 하나라도 true인지 검사 2
System.Array.TrueForAll(toggles, x => x.isOn == false)

//array가 List안에 전부 포함되어 있는지 검사
if (System.Array.TrueForAll(array, x => List.Contains(x)))

 

 

배열관련 함수 Linq계열

using System.Linq;


//맥스값 추출
arrayCount = array.Max(x => x.level);


//맥스값'들' 추출
var timeMax = saves.Max(save => save.time);
var timeMaxSaves = System.Array.FindAll(saves,save => save.time == timeMax);



//평균추출
var average = array.Average();


//중복제거(중복제거의 반대는 FindAll을 쓴다)
array = array.GroupBy(x => x.Substring(0,3)).Select(x=>x.First()).ToArray(); //앞글자 3개가 똑같다면 제거
array = array.GroupBy(x => x).Select(x=>x.First()).ToArray(); //완벽히 동일한것만 제거


//셔플(미세한 편향)
System.Random seed = new System.Random((System.Int32)System.DateTime.Now.Ticks);
array = array.OrderBy(a => seed.Next()).ToArray();


//셔플 유니티타입(미세한 편향)
array = array.OrderBy(a => Random.value).ToArray();

//정렬
array = array.OrderBy(x => x).ToArray();

//합치기
if(array2 != null)
{
    array1 = array1.Concat(array2).ToArray();
}

//인자1개 추가
array1 = array1.Append(data).ToArray();

//슬라이스(자르기)
var array = new int[] { 1, 2, 3, 4, 5 };
var length = 3;
var sliceArray =  array.Take(length).ToArray();
Debug.Log(string.Join(", ", sliceArray));
//결과: 1,2,3

//슬라이스2 (중간부터)
var array = new int[] { 1, 2, 3, 4, 5 };
var startIndex = 1;
var length = 3;
var sliceArray =  array.Skip(startIndex).Take(length).ToArray();
Debug.Log(string.Join(", ", sliceArray));
//결과: 2,3,4


//슬라이스3 (뒤에서부터)
var array = new int[] { 1, 2, 3, 4, 5 };
var length = 3;
var sliceArray =  array.Skip(array.Length-length).ToArray();
Debug.Log(string.Join(", ", sliceArray));
//결과: 3,4,5


//해당조건을 만족하는 값을 반환
//FirstOrDefault (System.Array.Find와 동일)
var nameA = array.FirstOrDefault(x => x.name == "A");

//모두 true인지 검사
//Array.TrueForAll과 동일하다
var allNameA = array.All(x => x.name == "A");

//하나라도 true인지 검사
//Find검사로 비슷하게 구현할수 있다
var anyNameA = array.Any(x => x.name == "A");

 

 

Array.Copy

var array1 = new int[] { 1, 2, 3, 4, 5 };
var array2 = new int[] {6,7,8,9,10 };
System.Array.Copy(array1, array2, 3);
Debug.Log(string.Join(", ", array2));
//결과 1,2,3,9,10

 

배열깊은복사 (배열복제)

var stringArrayClone = (string[])stringArray.Clone();

 

 

오브젝트 리스트를 스트링배열로 변경


using System.Linq;
var list = new List<object> ();
list.Cast<string>().ToArray()

 

 

 

 

 

FindIndexAll

https://gist.github.com/ahzkwid/8c7237c687f36c9788296847810b5240

    public static class Array
    {
        public static int[] FindIndexAll<T>(T[] array, System.Predicate<T> match)
        {
            var indexList = new List<int>();
            for (int i = 0; i < array.Length; i++)
            {
                if (match.Invoke(array[i]))
                {
                    indexList.Add(i);
                }
            }
            return indexList.ToArray();
        }
    }

 

 

 

중간에 끼워넣기

var randomIndex=(int)Random.Range(0,list.Count);
list.Insert(randomIndex, memorizeList[index]);
list.RemoveAt(index);

 

 

 

이동평균함수

고속으로 처리할일이 생겨서 만듦

써보니까 앞부분은 처리해도 도움이 안 되길래 과감히 지우는쪽으로 했다

https://gist.github.com/ahzkwid/2508b6c59cdfcf2724bc432aa027daac

double[] MovingAverageHS(double[] datas,int period)
{
    if (datas.Length< period)
    {
        return null;
    }
    var movingAverages = new double[datas.Length- period + 1];

    var sum = 0.0;
    for (int i = 0; i < period; i++)
    {
        sum += datas[i];
        movingAverages[0]=sum/ period;
    }
    for (int i = period; i < datas.Length; i++)
    {
        sum = sum - datas[i - period] + datas[i];
        movingAverages[i - period + 1] = sum / period;
    }
    return movingAverages;
}

 

 

인덱스 체크 간소화

근데 어차피 쓰려면 null체크 추가로 들어가서 그렇게 효율적이진 않음
오히려 협업할때는 누구나 알기쉬운 위쪽이 나을수도 있겠다

if((index >= 0) && (index < array.Length))
{
    var item = array[index];
    //작동할 코드
}


//위아래 동일

var item = array.ElementAtOrDefault(index);
if(item != null)
{
    //작동할 코드
}

 

 

 

 

null or empty check 동시에 하기

https://stackoverflow.com/questions/8560106

(array != null) && (array.Length != 0)

//위아래 동일

array?.Length > 0

'Unity > C#' 카테고리의 다른 글

C# 파일관련 함수들  (0) 2020.07.30
유니티 키보드  (0) 2020.07.28
c# @변수  (0) 2020.07.28
posted by 모카쨩
2020. 7. 28. 13:17 Unity/C#

 

 

 

정석적인 방법

if (Input.GetKeyDown(KeyCode.A))
{
	//명령
}

 

 

OnGUI 계열

    void OnGUI()
    {
        Event e = Event.current;
        if (e.isKey)
        {
            if (e.keyCode== KeyCode.A)
            {
            //명령
            }
        }
    }

 

press체크의 경우

    void OnGUI()
    {
        Event e = Event.current;
        if (e.isKey)
        {
            KeyCode k= e.keyCode;
            if (e.Equals(Event.KeyboardEvent(k.ToString())))
            {
                if (k== KeyCode.A)
                {
                    //명령
                }
            }

        }
    }

 

다른방식

    void OnGUI()
    {
        Event e = Event.current;
        if (e.type == EventType.KeyDown)
        {
            if (e.keyCode== KeyCode.A)
            {
            	//명령
            }
        }
    }

 

inputString 방식, 한프레임에 여러키가 와도 순서가 안 섞임

string _str = Input.inputString;
for (int i = 0; i < _str.Length; i++)
{
	if(_str[i]=="k")
    {
    	//명령
    }
}

'Unity > C#' 카테고리의 다른 글

c# Array(배열)관련  (0) 2020.07.29
c# @변수  (0) 2020.07.28
c# 문자열 처리  (0) 2020.07.28
posted by 모카쨩
2020. 7. 28. 12:51 Unity/C#

별 의미 없고 그냥 키워드를 변수로 사용가능하게 해주는거

 

 

예를들어


Event @event= Event.current;

 이런식으로 씀

 

근데 애초에 저런식으로 겹치게 짜지 마라

'Unity > C#' 카테고리의 다른 글

유니티 키보드  (0) 2020.07.28
c# 문자열 처리  (0) 2020.07.28
OnGUI  (0) 2020.07.27
posted by 모카쨩
2020. 7. 28. 10:48 Unity/C#

일반

//텍스트에서 A를 찾는다
int index = text.IndexOf("A");



//문자열 자르기
string text=nameof(speed);
string textSpe = text.Substring(startIndex:0, length:3); //spe
string textPee = text.Substring(startIndex:1, length:3); //pee
string textEed = text.Substring(startIndex:2); //eed


//숫자만 추출
text = new string(System.Array.FindAll(text.ToCharArray(), c => char.IsDigit(c)));


//숫자앞에 0붙이기
int num=7;
num.ToString("D3"); //7 -> 007 , 76 -> 076같이 3글자 숫자로 바꿔줌


//숫자앞에 0붙이기2
string text="7";
text.ToString().PadLeft(3,'0'); //7 -> 007 , 76 -> 076같이 3글자 숫자로 바꿔줌


//소숫점 자르기
7.014837f.ToString("N4"); //7.0148
7.014837f.ToString("N2"); //7.01


//text가 숫자인지 확인(bool반환)
string text="";
if(int.TryParse(text, out int num))
/*
    -결과 모음, int형에 부합하는것만 true를 반환
    A : False
    A1 : False
    1 : True
    1.0 : False
    001 : True
    1+1 : False
    2147483647 : True
    2147483648 : False

    -복합사용예제
    if (int.TryParse(text, out int num))
    {
        if (num > 5)
        {
        }
    }


*/


문자열을 int형으로 변환
int number = System.Int32.Parse(text);







//A~Z 랜덤 문자열
string randomChar = ((char)Random.Range('A', 'Z')).ToString();



//따옴표를 표기할때
Debug.Log(@"""A""");//"A"가 표시됨


//문자열을 ?형으로 변환
//일반적으로 리플렉션과 연동할때 사용

public static T StringArrayToClass<T>(string[] texts) where T : new()
{
    var fields = typeof(T).GetFields();
    var tempClass = new T();
    for (int i = 0; i < fields.Length; i++)
    {
        var field = fields[i];

        try
        {
            var converter = System.ComponentModel.TypeDescriptor.GetConverter(field.FieldType);
            var objData = converter.ConvertFrom(texts[i]);
            field.SetValue(tempClass, objData);
        }
        catch (System.Exception ex)
        {
            Debug.LogError(ex);
            Debug.LogError($"text:{texts[i]}");
            Debug.LogError($"field.Name:{field.Name}");
            Debug.LogError($"field.FieldType:{field.FieldType}");
            throw;
        }
    }
    return tempClass;
}

 

형변환

//char를 string으로 변환
string text= char.ToString();



//char[]를 string으로 변환
//절대로 toString()을 쓰면 안된다
string text= new string(chars);

//string을 char[]로 변환
char[] charArray= text.ToCharArray();



//키코드를 문자열로 바꿈
text=((KeyCode)key).ToString().Replace("Alpha", "");



//10진수 정수를 16진수 문자열로 바꿈
int num=61;
string hex = System.Convert.ToString(num, 16);
Debug.Log(hex); //결과 3d

//16진수 문자열을 10진수 정수로 바꿈
System.Int32.Parse(hex, System.Globalization.NumberStyles.HexNumber);





//문자열 배열을 문자열로 통합
string text=string.Concat(texts);


//문자열 배열을 사이에 엔터를 넣어가며 문자열로 통합
string text=string.Join("\n", texts);


//String to StringArray
//문자열을 잘라서 문자열 배열로 반환
//분할후 공백을 모두 제거
string text="line1 \n Line2"
string[] lines = text.Split(new char[] { '\r', '\n' },StringSplitOptions.RemoveEmptyEntries);

//String to StringArray2
//이번엔 string으로 구분값을 사용
var texts = text.Split(new string[] { ":--:" });

 

 

 

 

 

 

세줄 모두 같은 처리결과를 가진다

int count=0;
string t;
t="count: " + count;
t=$"count: {count}";
t=string.Format("count: {0}", count);

 

마지막 줄 코드는 틀니스러운 방법이다. 이젠 쓰이지 않는다

 

 

 

 

StringBuilder 예제

var sb = new System.Text.StringBuilder();
sb.AppendLine("AB");
sb.AppendLine("C");
Debug.Log(sb.ToString());

//결과: 
AB
C
var sb = new System.Text.StringBuilder();
sb.Append("AB");
sb.Append("C");
Debug.Log(sb.ToString());

//결과: 
ABC

 

 

앞에 @가 붙으면 입력받은 그대로 쓸수있게 해준다 가령 \n이 엔터가 아니라 그대로 보이게 해준다

파일주소를 그대로 넣을때도 사용한다

Debug.Log(@"\n보\n이\n냐\n?");
//결과: \n보\n이\n냐\n?

$와 @를 동시에 써야할때

int num=100;
Debug.Log($@"\n보\n인\n다{num}\n?");
//결과: \n보\n인\n다100\n?

 

 

 

 

 

Replace는 해당 문자가 들어있으면 지워버린다.

경로에 StreamingAssets/가 포함되어있으면 Streaming만 남으니 주의하자

Debug.Log("Assets/user.csv".Replace("Assets/",""));
//결과: user.csv

응용해서 띄어쓰기 지우기

Debug.Log("문자 테스트 입니다.".Replace(" ",""));
//결과: 문자테스트입니다.

 

 

Regex패턴들 (정규표현식)

@"^[a-zA-Z ',.?""!]+$" //일반적인 영어문장에 사용되는 패턴
@"^[0-9]+$" //숫자만
@"^[a-zA-Z]+$" //알파벳만

영어로만 이루어져있는지 검사

System.Text.RegularExpressions.Regex.IsMatch("ABC",@"^[a-zA-Z]+$"); //true
System.Text.RegularExpressions.Regex.IsMatch("한글",@"^[a-zA-Z]+$"); //false

지정한 문자열만 제거

System.Text.RegularExpressions.Regex.Replace("테스트@$%^", @"[^\w\.@-]", "") //결과:테스트

 

지정한 화이트리스트에 등록된 문자열만 통과

    public static string ReplaceWhiteList(string text,string regexPattern)//화이트리스트
    {
        if (string.IsNullOrWhiteSpace(text))
        {
            return text;
        }
        var convertText = new List<char>();
        for (int i = 0; i < text.Length; i++)
        {
            if(System.Text.RegularExpressions.Regex.IsMatch(text[i].ToString(), regexPattern))
            {
                convertText.Add(text[i]);
            }
        }
        if(convertText.Count==0)
        {
            return "";
        }
        else
        {
            return new string(convertText.ToArray());
        }
    }

 

앞글자를 대문자로 바꿈

int jumpSpeed=0;

{
    string text=nameof(speed);
    var textInfo = new System.Globalization.CultureInfo("en-US", false).TextInfo;
    string toUpperTitleLetter = textInfo.ToTitleCase(text);
    //toUpperTitleLetter는 Jumpspeed가 됨
}

{
    string text=nameof(speed);
    string toUpperFirstLetter = text.ToUpper()[0] + text.Substring(1, text.Length - 1);
    //toUpperFirstLetter는 JumpSpeed가 됨
}

 

 

 

 

 

 

 

 

 

 

 

 

소문자인지 체크

if (inputString==inputString.ToLower())

 

 

 

중복제거

using System.Linq;

var text = "ABCABD";
var filterText = new string(text.ToCharArray().Distinct().ToArray());
Debug.Log(filterText);
//결과 : ABCD

 

 

 

컬러텍스트 (유니티)

    public string ColorText(string text, Color color)
    {
        return $"<color=#{ColorUtility.ToHtmlStringRGB(color)}>{text}</color>";
    }

 

 

특정 문자의 사이즈와 컬러를 바꿈

 

심플타입

    public static string HighlightWord(string originalText, string highlightChar, Color highlightColor, int fontSize)
    {
        var convertText = originalText;
        convertText = convertText.Replace(highlightChar.ToLower(), highlightChar.ToUpper());
        convertText = convertText.Replace(highlightChar.ToUpper(), $"<size={fontSize}><color=#{ColorUtility.ToHtmlStringRGB(highlightColor)}>{highlightChar.ToUpper()}</color></size>");

        return convertText;

    }

 

해쉬키타입, 간단하지만 변경될 문자에 해쉬키의 일부가 있으면 안된다

    public static string HighlightWord(string originalText, string highlightChar, Color highlightColor, int fontSize)
    {
        var convertText = originalText;
        string hash = "&*&*&*&*&*&";
        for (int i = 0; i < 100; i++)
        {
            if (originalText.Contains(hash))
            {
                hash += $"Dummy{(int)Random.Range(0,100)}";
            }
            else
            {
                break;
            }
        }
        convertText = convertText.Replace(highlightChar.ToLower(), hash);
        convertText = convertText.Replace(highlightChar.ToUpper(), $"<size={fontSize}><color=#{ColorUtility.ToHtmlStringRGB(highlightColor)}>{highlightChar.ToUpper()}</color></size>");
        convertText = convertText.Replace(hash, highlightChar.ToLower());

        return convertText;

    }

 

레겍스 타입 (미완성임)

    public static string HighlightWord(string originalText, string highlightChar, Color highlightColor, int fontSize)
    {
        var convertText = originalText;
        var pattern = new System.Text.RegularExpressions.Regex($"^[{highlightChar.ToLower()}]|[{highlightChar.ToUpper()}]+$");
        return pattern.Replace(convertText, $"<size={fontSize}><color=#{ColorUtility.ToHtmlStringRGB(highlightColor)}>{highlightChar.ToUpper()}</color></size>");
    }

 

찾아낸 첫번째 문자만 하이라이트

    public static string HighlightWordFirstIndex(string originalText, string highlightChar, Color highlightColor, int fontSize)
    {
        var convertText = originalText;
        var firstIndexLower = originalText.IndexOf(highlightChar.ToLower());
        var firstIndexUpper = originalText.IndexOf(highlightChar.ToUpper());

        int firstIndex = -1;
        if (firstIndexLower==-1)
        {
            firstIndex = firstIndexUpper;
        }
        if (firstIndexUpper == -1)
        {
            firstIndex = firstIndexLower;
        }
        if (firstIndex == -1)
        {
            firstIndex = Mathf.Max(firstIndexLower, firstIndexUpper);
        }
        if (firstIndex == -1)
        {
            Debug.LogWarning("찾는 문자열이 없음");
            return originalText;
        }
        convertText =convertText.Remove(firstIndex,1);
        convertText = convertText.Insert(firstIndex, $"<size={fontSize}><color=#{ColorUtility.ToHtmlStringRGB(highlightColor)}>{highlightChar.ToUpper()}</color></size>");

        return convertText;
    }

 

 

 

찾아낸 첫번째 글자를 기준으로 분할함

        public static string[] SplitFirstIndex(string text, string separator)
        {

            var splitTextList = new List<string>();
            var firstIndexLower = text.IndexOf(separator.ToLower());
            var firstIndexUpper = text.IndexOf(separator.ToUpper());

            int firstIndex = -1;
            if (firstIndexLower == -1)
            {
                firstIndex = firstIndexUpper;
            }
            if (firstIndexUpper == -1)
            {
                firstIndex = firstIndexLower;
            }
            if (firstIndex == -1)
            {
                firstIndex = Mathf.Max(firstIndexLower, firstIndexUpper);
            }
            if (firstIndex == -1)
            {
                Debug.LogWarning("찾는 문자열이 없음");
                return null;
            }

            if (firstIndex == 0)
            {
                splitTextList.Add("");
            }
            else
            {
                splitTextList.Add(text.Substring(0, firstIndex));
            }
            
            if (firstIndex == text.Length)
            {
                splitTextList.Add("");
            }
            else
            {
                splitTextList.Add(text.Substring(firstIndex , text.Length-(firstIndex)));
            }

            return splitTextList.ToArray();
        }

 

 

대소문자구분없이 리플레이스

 

    public static string RelaceUL(string text,string oldValue, string newValue)
    {
        if (string.IsNullOrEmpty(oldValue))
        {
            return text;
        }
        var charList = text.ToCharArray().ToList();
        {
            int i = 0;
            while (i+ oldValue.Length-1 < charList.Count)
            {
                bool replaceCheck = true;
                for (int j = 0; j < oldValue.Length; j++)
                {
                    var word = charList[i + j].ToString();
                    if (System.Text.RegularExpressions.Regex.IsMatch(word, @"^[a-zA-Z]+$"))
                    {
                        var oldWord = oldValue[j].ToString();
                        if (word.ToUpper() != oldWord.ToUpper())
                        {
                            replaceCheck = false;
                            break;
                        }
                    }
                    else if (charList[i + j] != oldValue[j])
                    {
                        replaceCheck = false;
                        break;
                    }
                }

                if (replaceCheck)
                {
                    charList.RemoveRange(i, oldValue.Length);
                    charList.InsertRange(i, newValue.ToCharArray());
                    i += newValue.Length;
                }
                else
                {
                    i++;
                }
            }
        }
        return new string(charList.ToArray());

    }
    
    //Debug.Log(RelaceUL("1text 2Text 3TEXT 4텍스트 5text","text","convert"));
    //1convert 2convert 3convert 4텍스트 5convert

 

한국어 처리관련

Debug.Log((char)('가' + 1)); //각
Debug.Log((char)('가' + 2)); //갂
Debug.Log((char)('가' + 3)); //갃
Debug.Log((char)('나' + ('나' - '가'))); //따

 

 

Char To Hex

Debug.Log(((int)'가').ToString("X")); //AC00
Debug.Log(((int)'나').ToString("X")); //B098
Debug.Log(((int)'다').ToString("X")); //B2E4
Debug.Log(System.String.Format("{0:X}", (int)'가')); //AC00
Debug.Log(System.String.Format("{0:X}", (int)'나')); //B098
Debug.Log(System.String.Format("{0:X}", (int)'다')); //B2E4

 

String To HexString 간략버전

//String To HexString
string text = "테스트";
var bytes = System.Text.Encoding.UTF8.GetBytes(text);
var hexString = System.BitConverter.ToString(bytes);
Debug.Log(text);
Debug.Log(string.Join(",", bytes));
Debug.Log(hexString);


//HexString To String
var bytes2 = System.Array.ConvertAll(hexString.Split('-'), x => System.Convert.ToByte(x, 16));
var text2 = System.Text.Encoding.UTF8.GetString(bytes2);
Debug.Log(string.Join(",", bytes2));
Debug.Log(text2);

 

 

 

 

String To HexString 경량버전

//String To HexString2
string text = "테스트";
var bytes = System.Text.Encoding.UTF8.GetBytes(text);
var hexString = System.BitConverter.ToString(bytes).Replace("-","");
Debug.Log(text);
Debug.Log(string.Join(",", bytes));
Debug.Log(hexString);


//HexString To String2
var bytes2 = new byte[hexString.Length / 2];
for (int i = 0; i < bytes2.Length; i++)
{
	bytes2[i] = System.Convert.ToByte(hexString.Substring(i * 2, 2), 16);
}
var text2 = System.Text.Encoding.UTF8.GetString(bytes2);
Debug.Log(string.Join(",", bytes2));
Debug.Log(text2);

 

 

 

Bytes To HexString V1

//bytes To HexString
{
    System.Text.StringBuilder sb = new System.Text.StringBuilder();
    foreach (byte b in bytes)
    {
        sb.Append(b.ToString("X2"));
    }
    string hexString = sb.ToString();
}

 

Bytes To HexString V2

string hexString = System.BitConverter.ToString(bytes).Replace("-", "");

 

 

 

 

UTF8 to ASCII

옛날시스템과 호환시킬때 사용한다

ASCII는 7비트니까 UTF7으로 변환시킨후 아스키로 바꿔서 전송

//UTF8 to ASCII
string text = "테스트";
var bytes = System.Text.Encoding.UTF7.GetBytes(text);
var ascii = System.Text.Encoding.ASCII.GetString(bytes);
Debug.Log(text);
Debug.Log(string.Join(",", bytes));
Debug.Log(ascii);


//ASCII to UTF8
var bytes2 = System.Text.Encoding.ASCII.GetBytes(ascii);
var text2 = System.Text.Encoding.UTF7.GetString(bytes2);
Debug.Log(string.Join(",", bytes2));
Debug.Log(text2);

 

 

 

String To Bytes

//문자열 -> 바이트배열
System.Text.Encoding.Default.GetBytes(text);

//바이트배열 -> 문자열 
System.Text.Encoding.Default.GetString(bytes2)

 

 

 

 

 

 

Second To String

//0:02:13.878
System.TimeSpan.FromSeconds(clip.length).ToString("g")

 

 

비슷한 문장 검색

클래스형이 아니라 string으로 바꿔놔야 쓰기 편할텐데 나중에하자

MemorizationData GetSimilarWord(MemorizationData fromWord, List<MemorizationData> words)
{
    var similarWords = GetSimilarWords(fromWord, words);
    if (similarWords.Count == 0)
    {
        return null;
    }

    //셔플
    similarWords = similarWords.OrderBy(a => Random.value).ToList();


    return similarWords[0];
}
List<MemorizationData> GetSimilarWords(MemorizationData fromWord, List<MemorizationData> words)
{


    //중복이 아닌 단어들만 가져옴
    var filteredWords = words.FindAll(x => x.question != fromWord.question);
    if (filteredWords.Count == 0)
    {
        return null;
    }


    var similarWords = new List<MemorizationData>();
    for (int n = 2; n > 0; n--) //2글자까지만 검색
    {
        //n글자 이상 중복
        similarWords.AddRange(filteredWords.FindAll(word =>
        {
            if (word.question.Length < n)
            {
                return false;
            }
            for (int i = 0; i <= fromWord.question.Length-n; i++)
            {

                var fromWordSub= fromWord.question.Substring(i, n);
                if (fromWordSub.Length==1)
                {
                    if (fromWordSub[0] >= 0x20000 && fromWordSub[0] <= 0xFA2D)
                    {
                        //이것은 한자임
                    }
                    else
                    {
                        return false; //단일문자인데 한자가 아니라서 스킵
                    }
                }
                if (word.question.Contains(fromWord.question.Substring(i, n)))
                {
                    return true;
                }
            }
            return false;
        }));

        if (similarWords.Count > 0)
        {
            return similarWords;
        }
    }
    /*
    if (similarWords.Count == 0)
    {
        return null;
    }
    */
    return similarWords;
}

'Unity > C#' 카테고리의 다른 글

c# @변수  (0) 2020.07.28
OnGUI  (0) 2020.07.27
싱글톤 패턴  (0) 2020.07.20
posted by 모카쨩
2020. 7. 27. 14:48 Unity/C#

 

 

 

Debug.Log로 추적하기 힘든 실시간 상황값들을 추적할때 사용한다.

 

그냥 UGUI에 띄우면 되는거 아니냐? 하겠지만

ugui 할당하려면 캔버스 할당해서 Text 박스 맞추고 디버그모드에서만 활성화 하도록 따로 맞춰주고

누구한테 보여주려는거도 아니고 변수 하나 보는것뿐인데 여간 번거로운게 아니라 이쪽이 이득이다.

    #if UNITY_EDITOR //||true
    void OnGUI()
    {
        if (Debug.isDebugBuild)
        {
            GUI.Box(new Rect(0, 0, 200, 24), "Count: " + count);
        }
    }
    #endif
    public static int count = 0;

V3

    void OnGUI()
    {
#if UNITY_EDITOR
        if (UnityEditor.EditorUserBuildSettings.development)
#else
        if (Debug.isDebugBuild)
#endif
        {
            GUI.Box(new Rect(0, 0, 200, 24), "Count: " + count);
        }
    }
    public static int count = 0;

 

 

 

 

왼쪽정렬이 필요할때

    #if UNITY_EDITOR //||true
    void OnGUI()
    {
        GUI.Box(new Rect(0, 0, 200, 24), "");
        GUI.Label(new Rect(10, 0, 200, 24), "Count: " + count);
    }
    #endif
    public static int count = 0;

GUIStyle을 안 쓰는 이유는 글자색이나 크기 배경색 등등을 전부 지정해줘야해서

 

 

 

 

아래처럼 짜면 실시간으로 변수를 확인하면서 수정할수 있다.

근데 가능하면 인스펙터를 쓰고 이런건 전역값들을 추적할때 쓰자

int count=0;
string input = "";
#if UNITY_EDITOR //||true
void OnGUI()
{
  int lineHei = 18;
  input = GUI.TextField(new Rect(10, lineHei * 4, 300, lineHei * 1)
  , (input == "") ? input : count.ToString());
  if(input!="")
  {
  	count = int.Parse(input);
  }
}
#endif

 

버튼

    #if UNITY_EDITOR //||true
    void OnGUI()
    {
        if (Debug.isDebugBuild)
        {
            if(GUI.Button(new Rect(100, 100, 100, 24), "button"))
            {
                //명령
            }
        }
        
    }
    #endif

 

'Unity > C#' 카테고리의 다른 글

c# 문자열 처리  (0) 2020.07.28
싱글톤 패턴  (0) 2020.07.20
유니티 버그, 에러, 오류모음  (0) 2020.07.20
posted by 모카쨩
2020. 7. 24. 22:10 게임

 

 

 

 

파라케라디움

(2020-07-24, 레벨4)

옥수수 사용시 필요한 허기 약1600

옥수수 40개

옥수수로 개당 2.7씩 호감 상승, 허기 40상승(정확)

마취약 2개 사용함

(2020-07-26, 레벨22)

허기 3000 필요(추정)

옥수수 개당 2.4씩 호감 상승

마취약 20개 사용

조련후 레벨 약30

 

 

브론토사우루스

(2020-07-26, 레벨4)

감자 1.7% 호감도

계산상 농작물 58개 허기 2400이 필요하나, 허기5000일때 시도하여 농작물 68개 허기 2300을 사용후 성공

같은 허기임에도 더많은 농작물을 투여해야 했던건 아마 실시간으로 허기가 감소하기 때문에

조련후 레벨5


(2020-07-26, 레벨8)

허기 6095/10000에서 시작 옥수수 70개 투여

개당 호감도 1.4%

결과 허기 8737/10000으로 2642 허기 사용


(2020-08-01, 레벨3)

감자 58개 허기 2200

 

 

 

도에디쿠루스

(2020-07-27)

레벨22인가 그런데 메조베리 50개 가량 쓰고 허기 1500인가 필요하고 마취약 30개인가 썼었음

불확실함 기억에 의존한거라

 

 

 

디메트로돈

(2020-08-01 레벨 18)

생고기 1개에 호감 8퍼 약 허기 550회복

실패

 

 

 

 

 

 

그냥 이거 쓰자

https://www.dododex.com/taming/brontosaurus

'게임' 카테고리의 다른 글

GTA5 차량 가격  (0) 2022.06.30
ARK 물건 재료와 설명 안보일때  (0) 2020.07.11
팀포커맨드  (0) 2017.10.04
posted by 모카쨩
2020. 7. 24. 11:27 Unity

화면 사이즈에 따라 이미지가 보이고 안 보이고 할때

-z축이 0이 아님

'Unity' 카테고리의 다른 글

유니티 함수 연동 안될때  (0) 2020.08.03
유니티 로그캣  (0) 2020.06.29
스파인 사용법  (0) 2020.06.25
posted by 모카쨩
2020. 7. 20. 14:24 공학기술

 

 

-for 치고 탭 두번하면 자동으로 입력됨

 

-함수이름에 대고 컨트롤 클릭하면 해당 함수위치로 이동됨

'공학기술' 카테고리의 다른 글

윈도우10 공유폴더 설정  (0) 2020.08.04
logcat 자체가 안 보일때  (0) 2020.06.03
카메라 모음  (0) 2018.04.09
posted by 모카쨩

저사양 유저용 블로그 진입