[C#] Struct? Class?

이미지
 Struct와 Class의 큰 차이점은 상속에 대한 처리라고 생각합니다 이러한 예시의 두 Struct, Class 만들었을 시  Struct는 Class와 달리 new 키워드 없이 바로 변수로 불러와 사용이 가능합니다. Struct를 사용 하는 여러 다른 값들을 생성할 수 있지만  Class는 new 키워드가 없다면 처음 값에 값이 덮혀져버려  결국 똑같은 값 밖에 만들어 낼 수 없습니다.  위의 예시처럼 Struct는 몇 개의 변수를 선언을 해줘도 다른 값이 나오지만 Class는 같은 값이 복사가 됩니다. Class는 다른 값을 나타내려면 새로운 변수에 다시 new 키워드를 통해 다시 할당을 해줘야 한다. 이로 인한 메모리의 할당 방식에도 많이 차이가 난다. Class는 힙(없어지지 않는 메모리 동작 속도 다운)에 메모리 할당을  Struct는 스텍(사용 후 종료되는 메모리 많이 쓰면 스텍오버플로우 발생) 메모리 할당

[C#] 접근 제한자란?

이미지
 접근제한자란? 접근 제한자는 외부로부터 타입(클래스, 구조체, 인터페이스, 델리게이트 등) 혹은 그 타입 멤버들(메서드, 속성, 이벤트, 필드 등)로의 접근을 제한할 때 사용하는 것  접근제한자 종류는?  접근 제한자 언제 쓰나? 1. Class의 필드는 기본적으로 private로 설정하여 외부로부터 접근을 제한하는 것이 일반적이다 2. Method는 외부에서 회출해야 하는 것만 public으로 사용 하고 전부 private로 설정한다 3. Method 외에도 어셈블리 내부에서만 사용 가능한 internal, 파생클래스에서 엑세스할 수 잇는 protected를 사용할 수 있다.

[C#] 'ref' 와 'out'의 차이

이미지
ref 함수는 밖에 있는 인자를 메서드로 넘겨주는 형식 입니다. out은 메서드 안에 있는 인자를 밖에 있는 변수에 넘겨주는 형식입니다. ref는 메서드 안에서 변수를 변경할때 좋고  out은 메서드 안에서 전달하는 변수를 초기화 할 때 많이 사용한다고 합니다. 

[Unity] 숙련주차 트러블 슈팅

이미지
  트러블 스테이지 난이도를 조절 할 때 스테이지 난이도별 몬스터의 체력이 증가하는 코드를 짰다. 하지만 SceneRouter를 통해 restart를 하게 되면 모든 변수 값이 초기화 되어 스테이지(Level) 변수가 계속 ‘1’로 고정 되는 트러블을 겪었다. 고민한 해결 방안 및 해결 시도 GameManager를 DontDestroyOnLoad(this.gameObject); 통해 꺼지지 않게 해준 후 변수를 설정해 주었다. 하지만 설계miss로 인해 이미 GameManager에는 많은 변수 값이 들어갔고 초기화가 필수였다. 2. 저장되어야만 하는 변수 값만 들고 갈 수 있는 새로운 cs파일 생성 DataManger.cs라는 파일을 생성, 변수 저장 후 파괴되지 않게 해주었다 (만든김에 bestScore 도 해준건 덤) 해결 후 아쉬움 이번 트러블을 만나면서 다시 느끼는 것이 처음 설계가 정말 중요하다는 것을 다시 느꼈다. 처음부터 이러한 기능을 만들 것이라는 생각을 했더라면 굳이 DataManger라는 파일을 만들지 않고 좀 더 깔끔한 코드로 GameManger를 이용해 만들 수 있었을 것 같다. 게임 시연영상

[유니티] 숙련주차 트러블

  트러블 처음에 시작했을때 랜덤 맵 생성과 랜덤한 위치에 몬스터를 생성할 때 맵과 동시에 몬스터가 스폰이 동시에 진행하는데 있어 몬스터의 타겟팅 문제와 문의 setActive의 문제가 생겼다. 고민한 해결 방안 맵 생성을 하는 트리거를 만들어 동시에 진행하고 게임을 잠시 멈춘 뒤 카메라와 플레이어가  다음맵에 이동하는 형식을 하려 했다. 코드가 많이 꼬여버려 트리거가 발동 되어도 조금씩 어긋나고 에러가 뜨는 현생이 계속 되었다. 해결 시도 너무나 복잡한 이슈로 인해 트리거를 다 나눠보도록 했다. 카메라 앵글은 플레이어가 화면 밖으로 나가는 순간 맵 크기만큼 position을 바꿔주었다. 방 생성은 화면이 넘어가기 직전에 트리거를 발동시켜 만들어주었다. 몬스터와 구조물은 방을 넘어가고 문에서 조금 떨어진 곳에 트리거를 주었다. 그 순간 몬스터의 유무를 판단하여 문을 닫아 주었다. 즉 방 생성 → 카메라 이동 → 몬스터,구조물 생성 → 문 닫힘 최종 결정 해결 방안 및 이유 처음에는 상하좌우 랜덤한 방향으로 뻗어 나가는 맵을 만드려 했으나… 중복으로 맵이 같은 곳에 생성되는 이슈로 포기 하고 가능한 랜덤맵을 사용 할 수 있도록 안의 구조물과 몬스터 배치를 랜덤으로 바꾸게 되었다. 그리고 한번에 실행이 되는 것보다 하나하나 트리거를 나눠주니 에러도 어디서 왜 뜨는지 확실하게 알았다.

[Unity] Fade in 쉽게 사용해보기

이미지
 Fade in의 가장 쉬운 방법으로는 당연히 Asset 사용일테지만  그 외의 방법을 한번 알아보려고 하였다. Canvas Group을 사용하면 쉽게 사용이 가능하다. Fade in 이란  Alpha가 0에서 서서히 1로 되는 효과를 말하기에 우리는 그것을 바꿔만 주면 되는 것이다 코드에서 CanvasGroup 컨포넌트를 불러온 후 시간이 지남에 따루 alpha 값을 증가시켜주면 끝 오프닝에 많이 사용할 수 있을만한 Fade in기능이 완성되었다.

[Unity] Rigidbody가 있는 두 물체 충돌 무시

이미지
플레이어와 충돌 이벤트가 있는 서로 다른 2개의 Object는 충돌을 무시해야한다. 충돌을 무시하기 위해 Physics.IgnoreCollision 을 쓰려 했지만 잘 되지 않아 조사 끝에 찾아낸 답은  Layer였다. 지정된 레이어끼리의 값은 충돌 및 모든 것이 무시가 됐다. 원하는 물체에 Layer를 달아준 후 Edit > Project Settings >Phusics 2D 물리법칙을 무시하고 싶은 레이어 사이의 체크를 풀어주게 된다면 물체들은 전부 통과하게 된다.