게임엔진/Unity
[Unity] EventSystem을 이용해 아이템UI 드래그 및 다른 슬롯에 등록하기(IDragHandler, IDropHandler)
드래그, 드랍할 UI오브젝트에 Drag관련 인터페이스가 포함된 스크립트를 추가 public class ItemDragHandler : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler 그리고 인터페이스에 해당하는 함수를 구현해주면 된다. 드래그해서 마우스를 따라다니게 하고 싶으므로 IDragHandler의 OnDrag함수를 구현해주면 된다. public void OnDrag(PointerEventData eventData) { transform.position = eventData.position; } 참고로 eventData.position 말고 Input.mousePosition 을 써도 된다. 아이템을 놓았을 때 제자리로 돌아가게 하고..
[Unity] 게임 오브젝트 컴포넌트 패턴 (GameObject) C# 구현
아래는 간단하게 구현해본 컴포넌트 패턴이다, gameObject라는 매개체 즉 자기 자신을 통해 해당 오브젝트가 존재하는지 확인 및 추가 기능. using System; using System.Collections.Generic; namespace ConsoleApplication1 { public class GameObject { // 컴포넌트 리스트 public List lstComp = new List(); public T GetComponent() where T : Component { // 리스트가 해당 오브젝트를 가지고 있을 시 if (lstComp.Contains(typeof(T))) { Type type = lstComp[lstComp.IndexOf(typeof(T))]; T comp = ..
[Unity] / [SerializeField] [HideInInspector] [Serializable] 어트리뷰트 인스펙터 공개/비공개
public 사용시 인스펙터에 오픈시켜 값을 수정 할 수 있으며 타 클래스에서도 접근이 가능하다. 유니티는 public만 직렬화 해주는데 private 또는 protected 필드를 명시적으로 직렬화 해줌으로서 인스펙터에 오픈 시켜준다. 단, 유니티의 공식 가이드에서는 이것을 "특별한 경우가 아니면 사용하지 않는다."라며, "public"을 추천하고 있다. 반대로, 변수의 접근 제한자가 "public"으로 지정되어 있지만, 유니티 에디터의 Inspector에서 노출되는 것을 막기 위해서는 "[HideInInspector]" 키워드를 사용한다. (참고로, HideInInspector 키워드는 키워드 아래에 있는 모든 변수를 노출하지 않지만, SerializeField 키워드는 키워드 바로 다음에 있는 변수..
[Unity] Debug 클래스 (에디터 출력용)
유니티 스크립트에서는 게임을 제작하는 동안 디버깅을 도와주기 위해 Debug 클래스를 제공한다. - Debug.Log() Debug.Log() 메소드는 괄호 () 안에 로그 메시지를 넣어주면, 유니티 콘솔창에 로그 메시지를 출력해주는 메소드이다. - Debug.LogError() Debug.LogError() 메소드는 괄호 () 안에 로그 메시지를 넣어주면, 유니티 콘솔창에 로그와 함께 에러 메시지를 표시한다. - Debug.LogWarning() Debug.LogWarning() 메소드는 괄호 () 안에 로그 메시지를 넣어주면, 유니티 콘솔창에 로그와 함께 경고 메시지를 표시한다. 출처 : https://m.blog.naver.com/PostView.naver?blogId=nuberus&logNo=50..
[Unity] 스크립트 파일
스크립트 파일은 C#으로만 되어있고 C++하고는 다르게 .cs 파일들로만 구성 되어있다. 생성 방법은 총 두 가지가 있다. Assets 메뉴 > Create > C# Script 적당한 곳 우클릭 > Create > C# Script 게임 오브젝트에서 Add Component 클릭 후 스크립트 명칭 적으면 된다 생성하면 아래와 같이 생성 된다. 게임 오브젝트에 적당히 드래그해서 호출하면 된다.
[Unity] 메인&UI 카메라 2개 동시에 설정
카메라를 설정하기 위해선 UI 카메라가 메인 카메라보다 앞으로 와야한다. 3D로 카메라 전환 후 비교. 캔버스를 카메라 모드로 전환한 후 UI 카메라를 붙여야한다. 하지만, 문제점이 발생 할 수가 있다 예로 들어서 메인 카메라에서 오브젝트를 렌더링 할 시 UI와 같이 표현하고자 할텐데 UI 카메라가 비추는 깊이와 사물 (오브젝트) 를 제한둬야한다, UI 카메라를 오직 UI만 그리고 깊이 0으로 설정하고 메인 카메라를 -1로 설정한다. (수가 작을 수록 뒤로 감)
[Unity] 오브젝트를 움직이는 두 방법과 차이
총 두가지의 방법으로 오브젝트를 움직일 수가 있다 1) Transform.Translate(방향 예) Vector3.left * 속도 * Time.DeltaTime); 2) Vector3 new_pos=오브젝트.Transform.position 또는 localPosition; new_pos.x += (속도 * Time.deltaTime); 오브젝트.Transform.position 또는 localPosition = new_pos; 이 두가지의 가장 큰 차이점은 회전했을 때 바라보고 있는 방향으로 가냐 안가냐이다.