일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- Memory safety
- 객체지향프로그래밍
- 설계원칙
- C#
- Unity
- 배열
- Git
- 코루틴
- NCS
- 코딩테스트
- 함수
- 수리능력
- 정보능력
- 코딩컨벤션
- 콜라이더
- 전달방식
- Mod
- 귤고르기
- 델리게이트
- 문제해결능력
- params
- 미들웨어
- 구조체
- 플로우차트
- 연산자
- 기초
- 트랜잭션
- 이스케이프시퀀스
- array
- 커밋메시지컨벤션
- Today
- Total
목록Unity (15)
임준일의 개인 블로그
자식 오브젝트 만들어서 콜라이더를 추가하고, 충돌 감지를 하려고 했으나 충돌 감지를 부모 콜라이더가 받아버리는 이슈가 발생했다. 서로의 역할이 다르기에 콜라이더를 나누었지만 정상적으로 작동하지 않아서 해결하고자 이슈를 찾아보았다. 알고보니, 자식 오브젝트에 리지드바디가 없어서 부모 오브젝트가 모든 충돌 감지를 받아버리는 문제였다. 이후, 자식 오브젝트에 리지드바디를 추가하고, 옵션을 Kinematic을 설정해주자 정상적으로 자식 콜라이더가 충돌을 감지하기 시작했다. 이때, Kinematic 옵션은 중력과 힘 영향을 받지 않게 해주는 옵션이다.
대쉬 관련 자료들을 찾아보면 거의 X 축 방향 직선으로만 움직이는 자료들만 보였다. 마우스 커서 방향으로 대쉬를 하기 위해서 마우스 커서 위치와 플레이어 위치를 뺀 길이 값을 가지고 있었지만 이를 어찌 적용할지 몰라서 헤매이고 있었다. 그 직후, 그 값은 Vector로 저장되어 있었기에, 두 점 간의 길이이자, 방향이 될 수 있다는 걸 깨달았다. 그래서 마우스 커서 방향으로 대쉬하는 코드를 간단하게 작성하자면 아래와 같다. // '마우스 위치' - '플레이어 오브젝트 위치' Vector2 len =Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position; // 벡터 값에 대쉬 스피드를 곱한다. playerRigid.velocity=..
코루틴 유니티의 코루틴 메서드는 대기 시간을 가질 수 있는 메서드이다. 유니티에서 코루틴 메서드는 IEnumerator 타입을 반환해야 하며, 처리가 일시 대기할 곳에 yield 키워드를 명시해야 한다. 코루틴의 동작 원리 코루틴 메서드는 StartCoroutine() 메서드로 실행한다. 코루틴이 처리를 쉬는 동안에는 프로그램의 다른 코드가 실행될 수 있다. 대기 시간이 끝나면 프로그램의 처리가 코루틴의 마지막 실행 줄로 되돌아간다. 그리고 남은 처리를 이어서 진행한다. 코루틴 문법 코루틴에서 대기 시간을 지정하는 대표적인 방법은 다음과 같다. 초 단위로 쉬기 yield return new WaitForSeconds(시간); 한 프레임만 쉬기 yield return null; StartCoroutine(..

플레이어의 HP를 구현하고자 한다. 이미지의 너비를 줄이거나, 늘리면 자연스러운 형태가 아닌 뭉개지는 원인이 있기 때문에, Fill Amount 기능을 활용하여 표현할 수 있다. 먼저 Empty 파일을 만들고, GreenGuage라는 이름으로 바꾼다. 그 후, 이미지 2개를 생성하여, 각각 게이지, 게이지 바를 나타낼 이름 GuageBack, GuageFront로 이름을 바꾸고, 스프라이트를 변경한다. currentHp는 남은 체력, maxHp는 최대 체력, guageAmount는 Fill Amount에 넣을 값을 의미한다. 이때 Fill Amount에 넣는 값은 0 ~ 1 이여야 하는데, Fill Amount는 0~1 사이의 값으로 무조건 써야 한다. 이미지 컴포넌트를 가져오기 위해서, 전에 만들어둔 ..

유니티의 생명주기(LifeCycle) 유니티는 사용자가 호출하지 않아도 호출되는 함수들이 있다. 그 함수의 호출 주기를 유니티의 생명주기(LifeCycle)이라고 한다. 함수들의 호출 시기는 사용자가 정할 수 없으므로, 생명주기에 대해 이해하는 것은 유니티를 다루는 데 있어서 필수적이다. 유니티의 생명주기 흐름도 Reset 오브젝트를 생성 후, 인스펙터 뷰에서 리셋을 눌러줄 때 실행된다. 객체의 속성을 초기 값으로 설정해줄 때 사용한다. Awake 스크립트가 실행될 때 한번만 호출된다. 모든 오브젝트가 초기화 된 후 호출되기 때문에 GameObject.Find 같은 명령문을 안전하게 사용할 수 있다. Awake 함수는 언제나 Start 함수 전에 호출되므로 초기화 순서를 정할 수 있게 한다. (Corou..
이벤트 연쇄 동작을 끌어내는 사건이다. 이벤트 자체는 어떤 일을 실행하지 않지만 이벤트가 발생하면 이벤트를 구독하는 처리들이 연쇄적으로 실행된다. 이벤트를 사용하면 어떤 클래스에서 특정 사건이 일어났을 때, 다른 클래스에서 그것을 감지하고 관련된 처리를 할 수 있다. 이벤트를 구현할 때는 이벤트와 이벤트에 관심이 있는 이벤트 리스너(Event Listener)로 오브젝트를 구분한다. C#에서 이벤트를 구현하는 대표적인 방법 델리게이트를 클래스 외부로 공개하는 방법이다. 외부로 공개된 델리게이트는 클래스 외부의 메서드가 등록될 수 있는 명단이자 이벤트가 된다. 그리고 이벤트가 발동(Invoke)하면 이벤트에 등록된 메서드들이 모두 실행된다. 이벤트 리스너 이벤트를 항상 듣고 있다가 이벤트가 발동될 때 실행..
싱글턴 '단 하나만 존재해야 하며, 손쉽게 접근 가능한' 오브젝트를 구현하는 디자인 패턴이다. 싱글턴 패턴을 사용하면 게임 매니저가 씬에 단 하나만 있게 하고, 어느 곳에서도 게임 매니저에 즉시 접근할 수 있게 만들 수 있다. 정적 싱글톤 패턴을 구현할 때는 정적(static) 변수의 특징을 활용한다. 어떤 변수를 static으로 선언하면 여러 오브젝트가 해당 변수 하나를 공유한다. 정적 선언된 변수는 해당 타입의 오브젝트를 몇 개를 생성하든 그 수에 상관없이 메모리에 하나만 존재한다. static 변수는 개별 오브젝트마다 하나씩 가지고 있는 것보다는 모든 오브젝트가 공유하는 것이 더 나은 값을 표현할 때 사용한다. static 변수의 특징 메모리에 단 하나만 존재하고 모든 오브젝트가 공유한다. 클래스 ..

컴포넌트를 찾는 함수 //! 컴포넌트 가져오는 함수 public static SomeType GetComponentMust(this GameObject obj) { SomeType componet_ = obj.GetComponent(); bool isComponentValid = ((Component)(componet_ as Component)).IsValid(); GFunc.Assert(isComponentValid != false, string.Format("{0}에서 {1}을(를) 찾을 수 없습니다.", obj.name, componet_.GetType().Name)); return componet_; } // GetComponentMust() as 연산자는 "[변수] as [클래스]" 형태로, 해..
전역 공간 : 게임 월드의 원점을 기준으로 위치를 측정한다. 지역 공간 : 자신의 부모 게임 오브젝트를 기준으로 위치를 측정한다. 오브젝트 공간 : 자기 자신을 기준으로 위치를 측정한다. 전역 공간은 게임 월드를 기준으로 한다. 지역 공간은 부모 게임 오브젝트를 기준으로 한다. 오브젝트 공간은 자기 자신을 기준으로 한다. 인스펙터 창에 표시되는 위치, 회전, 스케일은 지역 공간 기준으로 측정된 값이다. Transform의 Translate() 메서드로 평행 이동한다. Transform의 Rotate() 메서드로 회전한다. Translate().Rotate() 는 기본적으로 지역 공간 기준으로 동작한다. Translate().Rotate() 에 Space 타입을 입력하여 기준 공간을 지역 공간이나 전역 공..

벡터 벡터는 방향과 크기를 가진다. 벡터는 절대적인 위치로 표현하거나 상대적인 위치로 표현할 수 있다. 상대 좌표 : (내가 어디있는지 모르지만) 현재 좌표에서 (1, 1) 만큼 더 간다. 절대 좌표 : 게임 세상 속에서 나의 좌표는 (1, 1) 이다. 벡터가 표현하는 화살표의 길이가 벡터의 크기이다. ▼ 벡터의 크기는 모든 원소를 제곱하여 더한 값의 제곱근이다. 스칼라 곱 벡터는 스칼라 곱을 사용해 배수를 취할 수 있다. ex) (1, 1) x 5 = (5, 5) Vector3 * 스칼라; Vector3 a = new Vector3(3, 6, 9); a = a * 10; 결과 : a는 (30, 60, 90) 이 된다. 벡터 정규화(방향 벡터로 만들기) 방향 벡터는 크기가 1인 벡터로, 방향을 표현한다...