목록게임/Unity, C# (16)
센로그
◆ Class (클래스) - reference 타입 (매개변수로 전달시 참조로 전달) => 힙 영역에 할당 => 힙에 할당되어, 가비지 콜렉터가 관리해줘야 하므로 상대적으로 성능은 안좋음 => 대신 메모리 측면에서 상대적으로 자유로움 ◆ Struct (구조체) - value 타입 (매개변수로 전달시 기본적으로 복사본이 전달(참조시 ref 필요)) => 스택 영역에 할당 (클래스의 멤버인 경우 클래스의 일부로 힙에 할당) => 스택에 할당되어, 가비지 콜렉터가 관리하지 않아도 되므로 성능이 상대적으로 좋음 => 대신 메모리가 한정되어 있음 (과도하게 커지면 stack overflow) 여담 C#에서는 struct를 만들 때도 new를 사용한다. 따라서 객체가 할당된 메모리 영역이 어디인지 확인하려면 선언부..
◆ 프로퍼티 (Property) class의 private, protected 같은 보호수준의 멤버는 외부에서 접근할 수 없다. 그러나 외부에서 이 값에 접근해야 하는 경우가 있는데, 이 경우 프로그래머는 GetMember(), SetMember() 같은 메서드를 정의해 접근할 수 있도록 한다. 그런데! 클래스가 너무 많아지면, GetMember(), SetMember() 메서드도 엄청나게 많아질 것이고, 이런 멤버 접근 기능은 수많은 클래스들에서 요구하기 때문에 C#은 내부적으로 프로퍼티(Property)라는 문법을 제공한다. ◆ 프로퍼티 (Property) 사용 방법 class Character{ protected int hp; public int HP{// 멤버 변수 hp값을 get 및 set 할 ..
◆ Object pool이란? 많이 사용되는 오브젝트들을 동적으로 생성/파괴하는 대신, 미리 pool에 담아놓고 필요할 때마다 꺼내 쓰는 방식. custom allocator의 느낌. 동적으로 메모리 할당 시 발생하는 다양한 문제(시간, 메모리 파편화, 등...)를 해결하기 위한 방법. 게임에서는 실시간성을 확보해야 하기 때문에 특히 시간이 중요함!! ◆ Object pool의 사용 예를들어, 500명의 플레이어가 있는 게임에서, 총알 오브젝트를 생성/파괴한다고 하자. 최소한 500개의 총알이 실시간으로 만들어져야 한다! ■ object pool 미사용시 :생성시마다 Instantiate, 파괴시마다 Destroy를 호출해줘야 함. 동적으로 메모리를 할당 및 해제해야 한다는 뜻. user↔kernel 모..
raycast를 사용해 ui button을 클릭하도록 구현. (Highlight시 효과 포함) ovr에서 제공하는 raycast 쓰려다가 .. 시간도 없고 잘 안돼서 그냥 만들어봤다 ovr에서 제공하는 raycast sample의 visual 을 훔쳐다가 붙였다 그리고 그 방향으로 ray 쏘게 함. using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; public class ray : MonoBehaviour { public int rayLength = 10; public GameObject DEF; public GameO..