Get it on Google Play


Wm뮤 :: 'Unity/C#' 카테고리의 글 목록 (9 Page)

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

Recent Comment

Archive


'Unity/C#'에 해당되는 글 67건

  1. 2017.07.02 유니티 함수 정리
  2. 2017.03.23 c# list(리스트) 관련
  3. 2017.01.25 c# list와 array속도 비교 3
2017. 7. 2. 22:48 Unity/C#
Application.targetFrameRate=60;  //룸스피드를 60프레임으로 맞춤
Application.runInBackground=true;   //백그라운드상에서도 동작하게 한다
DontDestroyOnLoad(this.gameObject);   //룸을 이동해도 오브젝트가 지워지지 않는다
UnityEngine.SceneManagement.SceneManager.LoadScene(룸);   //Application.LoadLevel대신 들어온 녀석, 룸을 이동한다
Application.Quit (); //종료



월드 좌표: 게임내 가상좌표, 편의를 위해 기본좌표계라고 사용
스크린상 좌표: 좌x0, 우x픽셀길이, 상y픽셀높이, 하y0 
Input.GetKey (키보드 번호): 키보드가 눌렸는지를 반환한다. 키보드 번호는 KeyCode에 따라 좌우된다.
Input.GetMouseButton(버튼 번호): 마우스가 클릭했는지를 반환한다. 0은 왼쪽 1은 오른쪽 2는 가운데
Input.GetAxis("Vertical") : 정의된 방향키의 위아래 값을 반환한다 -1이 위쪽
Input.GetAxis("Horizontal") : 정의된 방향키의 좌우 값을 반환한다 -1이 왼쪽
Input.mousePosition : 마우스의 스크린상좌표를 반환한다
Camera.main.ScreenToWorldPoint(좌표) : 스크린상 좌표를 기본좌표계로 변환
Camera.main.WorldToScreenPoint(좌표) : 기본좌표를 스크린상 좌표로 변환

Screen.width //화면가로해상도를 반환
Screen.height //화면세로해상도를 반환
screenHeightCentimeter = Display.main.systemHeight / ((Screen.dpi==0? 96:Screen.dpi) / 2.54f); //화면 세로 Cm높이를 반환
Screen.currentResolution.height //모니터 높이 해상도를 반환(Screen.height와 다른점은 창이 작아져도 최대값을 반환함)
Display.main.renderingWidth //현재 렌더링 되는 디스플레이 사이즈, screen.width랑 같다고 보면 된다
Display.main.systemWidth //물리적인 디스플레이 사이즈, 스크린 사이즈가 바뀌어도 기기레퍼런스값을 가져오므로 불변이다.


float canvasHei = GetComponentInParent<Canvas>().GetComponent<RectTransform>().rect.height; //현재 캔버스의 높이를 반환
(1 / screenHeightCentimeter) * canvasHei //1센치에 대한 캔버스 픽셀사이즈를 반환


//RectTransform계열
float wid = GetComponent<RectTransform>().sizeDelta.x; //rect.width와 동일
float wid = GetComponent<RectTransform>().rect.width; //sizeDelta.x와 동일
textUI.rectTransform.anchoredPosition.x //일반적으로 생각하는 rectTransform의 x좌표
textUI.rectTransform.localPosition.x //Anchors가 미적용된 x좌표, 가급적 사용자제
textUI.rectTransform.rect.x //작동안함, anchoredPosition써라




Physics2D.CircleCast(위치(vector2), 반지름, 각도(Vector2)) :  원충돌 검사 RaycastHit2D를 반환하고, (RaycastHit2D.transform!=null) 검사로 충돌했는지 확인가능

GetComponent<Rigidbody2D> ().AddRelativeForce (Vector2.right*1000f); //상대적인 정면을 향해 힘을 줌, 질량에 따라 바뀜
GetComponent<Rigidbody2D> ().velocity //속력을 반환



GetComponent<Rigidbody2D>().AddForce( (transform.position-target.position).normalized*-gravity); //특정방향으로 힘을 줌



Vector2.Distance(Vec2_A,Vec2_B); //벡터간의 길이값을 반환

Vector3.Distance(Vec3_A,Vec3_B); //벡터간의 길이값을 반환 3D


this.GetComponent<Renderer>().material.mainTexture  //렌더러의 텍스처

this.GetComponent<SpriteRenderer>().sprite  //렌더러의 스프라이트



GetComponent<AudioSource>().volume //게임오브젝트의 사운드 볼륨조절



GUI.Label (new Rect(x,y,wid,hei),text); draw_text와 같다



void OnGUI(){} //GUI계층의 함수를 사용할수 있다

void OnCollisionEnter2D(Collision2D col) //리지드바디2D가 충돌을 시작했을때 작동한다 OnCollisionStay2D는 항상 OnCollisionExit2D는 종료시,Collision을 Trigger로 바꾸면 트리거 작동 인수는 그대로

{

}

void OnCollisionStay(Collision col) //Enter와 다르게 항상 작동한다

{

}

GetComponent<Collider2D>().IsTouchingLayers() //충돌했는지 반환



Mathf.Clamp(value,min,max) //median함수와 동일함

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

유니티 각도계산 모음  (0) 2017.11.06
c# list(리스트) 관련  (0) 2017.03.23
c# list와 array속도 비교  (3) 2017.01.25
posted by 모카쨩
2017. 3. 23. 00:22 Unity/C#

내부값과 검색하여 하나라도 맞는지 검사하여 bool 반환 x는 내부값을 나타냄 반드시 x로 써야함

if (nameList.Exists(x => x.ToString() == "name"))

 

해당하는 값이 존재하는지 bool 반환함 위 코드와 같음

nameList.Contains("name")

 

해당 하는 조건에 맞는 항목들을 전부 지움, 아래의 경우는 ".meta"가 포함된경우 전부 지운다.

x는 내부값이고 무조건 x로 써야함

fileNames.RemoveAll(x => x.Contains(".meta"));

 

 

리스트 복제(깊은복사)

List<int> DNA_copy = DNA.GetRange(0, DNA.Count);

 

리스트복제 2

var list2 = new List<int>(list);

 

 

 

중간삽입

DNAcopy.Insert(index, mScript.irandom(random_value));
 
중간삽입(배열 및 리스트)
 list.InsertRange(index, 배열 혹은 리스트);
 
다중추가(배열 및 리스트)
 list.AddRange(배열 혹은 리스트);

 

 

Linq계열

using System.Linq;

//중복제거
//앞글자 3글자가 같은녀석들만 제거함, x => x.Substring(0,3) 이부분만 수정해서 쓰면 됨
list = list.GroupBy(x => x.Substring(0,3)).Select(x=>x.First()).ToList();

//중복제거2
//완벽히 동일한것만 제거
list = list.GroupBy(x => x).Select(x=>x.First()).ToList();

//그룹리스트 (같은값끼리 짝지어서 나온다)
List<int> list=new int[] { 1,1,1,2,2,3,4,4}.ToList();
var groupList = list.GroupBy(x => x).ToList();

for (int i = 0; i < groupList.Count; i++)
{
    var group = groupList[i].ToList();
    for (int j = 0; j < group.Count; j++)
    {
        Debug.Log(group[j]);
    }

}

//중복제거 심플버전 구조체만 가능(예를들어 게임오브젝트는 안된다)
list.Distinct();

//전부 더하기
list.Sum();



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



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

 

 

 

 

 

 

최댓값 (맥스)

double dividendMax = list.Max(x => x.dividend);

 

최댓값'들'

var timeMax = saves.Max(save => save.time);
var timeMaxSaves = saves.FindAll(save => save.time == timeMax);

 

 

 

셔플(미세한 편향, 비둘기집문제)

하지만 구조가 간단하므로 중요로직이 아니면 이걸로 처리한다 

using System.Linq;

//유니티버전
list = list.OrderBy(a => Random.value).ToList();

//닷넷버전
System.Random seed = new System.Random((Int32)DateTime.Now.Ticks);
list = list.OrderBy(a => seed.Next()).ToList();

 

셔플(완전한)

    public static void ShuffleList<T>(ref List<T> targetList)
    {
        for (int i = 0; i < targetList.Count; i++)
        {
            int j = Random.Range(0, targetList.Count);
            T t = targetList[i];
            targetList[i] = targetList[j];
            targetList[j] = t;
        }
    }

 

정렬//오름차순

creature_list.Sort();

 

정렬//내림차순 정렬

list.Sort((x, y) => y.CompareTo(x));

이것과 동일함

List<double> A;
List<double> B;

//동일버전
list.Sort((A, B) => B.CompareTo(A));

//람다 긴버전
list.Sort(delegate (var a, var b)
{
    return b.CompareTo(a);

});

//if방식
list.Sort(delegate (var a, var b)
{
    if (a > b)
    {
        return -1;
    }
    if (a < b)
    {
        return 1;
    }
    return 0;
});

//for방식
for (int i = 0; i < list.Count; i++)
{
    for (int j = i + 1; j < list.Count; j++)
    {
    	var a=list[i];
    	var b=list[j];
        if (a > b)
        {
            var t=a;
            a=b;
            b=t;
        }
    }
}

 

 

 

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

유니티 각도계산 모음  (0) 2017.11.06
유니티 함수 정리  (0) 2017.07.02
c# list와 array속도 비교  (3) 2017.01.25
posted by 모카쨩
2017. 1. 25. 01:56 Unity/C#

중계서버 코딩할일이 생겨서 가장 부하가 많이 걸리는 array에 접근해봤습니다

타입은 앞으로 가장 많이 쓰이게될 long형


비교항목은 다음과 같습니다

1. 초기화속도 비교

2. 입력속도 비교

3. 일반 Add 속도 비교

4. 일반 Delete 속도 비교




결론

1. 초기화속도 비교 = array가 list보다 40배 빠름

2. 입력속도 비교 = array가 list보다 2배 빠름

3. 일반 Add 속도 비교 =  array가 list보다 1.07배 빠름

4. 일반 Delete 속도 비교 =  동일함


=이 일로 mBuffer라고 해서 전용 구조체 하나 만들어 뒀습니다 ㅡ_ㅡ;;

  array가 가장 맨 처음에 나온거니 당연하다고 하면 당연하지만 설마 Delete에서 비효율적인 코드와 동일하게 측정될줄은 몰랐네요

  

여기에 쓰인 코드는 프로그램에서 구동하에 상용이든 비상용이든 자유롭게 가져다 쓰셔도 됩니다

다만 스크랩이나 재게시는 안 되여~

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

유니티 각도계산 모음  (0) 2017.11.06
유니티 함수 정리  (0) 2017.07.02
c# list(리스트) 관련  (0) 2017.03.23
posted by 모카쨩

저사양 유저용 블로그 진입