Programing/Unity(C#) 57

[Unity] 상속 부모의 Start Awake Update메서드 실행이 안 되는 문제

부모 클래스에도 Awake / Start / Update 메서드가 존재하고, 자식 클래스에도 동일한 메서드가 존재한다면 부모 클래스의 메서드는 실행되지 않고 자식 클래스의 메서드들만 실행이 된다 protected virtual void Awake(){}해결을 위해서는 부모 클래스의 메서드를 virtual으로 선언해 준 다음 protected override void Awake(){ base.Awake();}자식 클래스에서 override로 메서드를 선언하고 base.Awake()로 부모 클래스의 Awake 메서드를 호출해 주면 된다(base: 상속받은 부모)

[C#] 특정 방향(벡터)의 각도(angle) 구하기

발사 지점에서 플레이어를 향해 레이저를 발사시키는 기능을 만드는데, 발사 지점의 position과 플레이어의 position을 받아와 발사지점에서 플레이어까지의 벡터는 구했으나, 레이저를 방향에 맞게끔 회전시키는 작업을 해 줘야 했다 아크탄젠트(atan)를 이용해서 구해야 하는 건 알았으나, 정확한 사용방법을 잘 모르겠어서 검색하다가 발견했다https://wumbo.net/formulas/angle-between-two-vectors-2d/ Angle Between Two Vectors 2D FormulaCall the function. The angle is equal to radians or converting to the circle constant notation by multiplying by ..

[Unity] Cinemachine에서 3D 카메라의 범위 설정하기(Projection: Perspective)

이전 글(https://hye3193.tistory.com/154)에서 Cinemachine을 이용해서 카메라가 플레이어를 따라오고, 맵의 바깥쪽을 비추지 않도록 Bound를 설정해 주는 작업을 하였다 그런데 2D 게임이지만, 원근감을 위해 3D 카메라를 사용할 경우 설정을 변경해주어야 하는 부분이 있다 우선 main camera의 투시(projection)을 perspective로 변경해 준다 unity에서 카메라 투사에는 두 종류가 있는데, 하나는 orthographic으로, 일반적인 2D 같은 투사 방식이고, 다른 하나는 perspecitve로, 3D처럼 원근감이 적용되는 투사 방식이다 프로젝트를 생성할 때 2D를 선택했냐 3D를 선택했냐에 따라 기본적으로 설정된 투사 방식에 차이가 있지만, 유니티..

[Unity] Cinemachine으로 플레이어를 따라오는 카메라 설정하기(2D, Projection: Orthographic)

많은 게임들에서 기본적으로 카메라가 플레이어를 계속 따라다니며 진행되는데, Cinemachine이라는 컴포넌트를 활용해 쉽게 구현해 볼 수 있다 우선 기본적으로 설치되어 있는 패키지가 아니기 때문에, Window > Package Manager로 들어가 검색창에 Cinemachine을 검색해서 설치해 준다 만약 검색했는데 패키지가 뜨지 않는다면, Packages가 In Project가 아닌 Unity Registry로 체크되어 있는지 확인하자 설치가 끝났으면 Hierarchy 창에서 우클릭 후 Cinemachine > 2D Camera를 선택해서 추가해 준다 Virtual Camera라고 이름 붙어 새로 생긴 오브젝트를 보면 CinemachineVirtualCamera라는 컴포넌트가 있는데, 이곳의 Fo..

[C#] 문자 리터럴에 문자가 너무 많습니다(CS1012)

Debug.Log('complete');어떤 문장을 로그로 출력하려고 했는데 위와 같은 에러가 떴다 이유는 char 타입으로 한 개 이상의 문자를 전달하려고 했기 때문 C#에서 Char 타입은 문자 한 개를 가르키고, 'A' 와 같은 식으로 홑따옴표를 사용해서 표현하고, String은 "ABC" 와 같은 식으로 쌍따옴표를 사용해서 표현해야 컴파일 에러가 나지 않는다 (자바스크립트에서는 혼용해도 문제 없어서 아무 생각 없이 C#에서도 혼용한 듯하다) Debug.Log("complete");이런 식으로 수정해 주었다

[Unity, Spine] Spine 스킨 변경이 안 되는 문제(setSkin, setSlotsToSetupPose)

skeleton.SetSkin() 함수를 사용하여 스킨을 변경하는데, default 상태에서 처음 스킨을 변경할 때는 잘 동작했으나 1번 스킨에서 2번 스킨으로 넘어가는 게 되질 않았다 https://esotericsoftware.com/spine-api-reference API Reference - Spine Runtimes GuideThe Spine Runtimes are available for many programming languages. To simplify documentation, the API reference below is programming language agnostic. There may be minor differences for some languages, such as ..

[Unity] 플랫폼 위에서 아래로 점프하는 플레이어(하단 점프)

플레이어가 플랫폼 위에 올라간 상태에서 아래를 향해 점프할 수 있도록 구현해 볼 것이다 private IEnumerator coDownJump() { float y = transform.position.y; WaitForFixedUpdate wait = new WaitForFixedUpdate(); capsuleCollider.isTrigger = true; while (transform.position.y > y - 1.6f && transform.position.y = 2) return; if (_jumpCount == 1 && _unlockDoubleJump == false) return; rb.velocity = new Vector2(rb.velocity.x, 0); rb.AddForce(Vect..

[Unity] 땅에서 플랫폼 위로 점프하는 플레이어 (Platform Effector 2D)

아래쪽에서 플랫폼이 있는 쪽으로 뛰어도 머리를 부딪히지 않고 통과하여 올라가게 만드는 방법은 유니티에 이미 존재하는 컴포넌트를 사용하면 간단하다 플랫폼 오브젝트에 Platform Effector 컴포넌트를 추가해준다 이때, Composite Collider 등의 컴포넌트에서 Used By Effector 옵션을 체크해줘야 플랫폼 이펙터가 정상적으로 적용된다 Platform Effector에서는 Use One Way 옵션에 체크해주면 된다 아래는 해당 컴포넌트의 옵션들에 대한 추가 설명 Use Collider Mask: Collider Mask 사용 여부를 묻는 옵션, 체크 해제할 경우 Collider Mask 옵션이 가려진다 Rotational Offset: 로컬 기준 위쪽을 가르키는 회전 오프셋 오프셋..

[C#] 다른 클래스의 코루틴 함수 호출하기

Player player = other.GetComponent(); player.StartCoroutine(coContinousDamage(_damage, 1.0f, 3)); Player 클래스의 코루틴 함수를 위와 같은 방식으로 호출하려고 하면 해당 함수를 찾을 수 없다고 에러가 뜬다 Player player = other.GetComponent(); player.StartCoroutine(player.coContinousDamage(_damage, 1.0f, 3)); 코루틴도 인스턴스명.코루틴명 으로 찾아주어야 해당 코루틴 함수를 찾아서 실행시킬 수 있다