반응형
SMALL
using UnityEngine;
public class MainCamController : MonoBehaviour
{
public GameObject player;
private Vector3 playerPos;
Vector3 newCamPos;
public void Init()
{
}
void Update()
{
this.playerPos = this.player.GetComponent<Transform>().position;
}
private void LateUpdate()
{
this.newCamPos = new Vector3(playerPos.x, playerPos.y, -10);
switch (this.playerPos.x)
{
case <= -1.4f:
newCamPos.x = -1.4f;
break;
case >= 1.4f:
newCamPos.x = 1.4f;
break;
}
switch (this.playerPos.y)
{
case <= -2.8f:
newCamPos.y = -2.8f;
break;
case >= 4.8f:
newCamPos.y = 4.8f;
break;
}
//newCamPos.x = this.playerPos.x <= -1.4f ? -1.4f : playerPos.x;
//newCamPos.x = this.playerPos.x >= 1.4f ? 1.4f : playerPos.x;
//newCamPos.y = this.playerPos.y <= -2.8f ? -2.8f : playerPos.y;
//newCamPos.y = this.playerPos.y >= 4.8f ? 4.8f : playerPos.y;
this.transform.position = newCamPos;
}
}
유니티 업데이트의 종류에는 세가지가 있는데 그중 가장 많이 사용하던 update 문은 불규칙적인 입력(캐릭터 이동을 위한 인풋 등) 을 받을때는 유용하지만 불규칙함으로 인해 해당 인풋의 영향을 받는 움직임 (캐릭터를 따라다니는 움직임등) 에서는 업데이트 문 안에서 지속적으로 움직이는 오브젝트를 따라가다보면 불안정하게카메라가 움직이게될수 있다는걸 알게되었고 좀더 안정적인 카메라 워크를 위해 다른 두가지 update 메서드를 알아보게 되었다.
각 업데이트 메서드를 살펴보자면
- Update() - 스크립트가 enabled 상태일때, 매 프레임마다 호출된다. 일반적으로 가장 빈번하게 사용되는 함수이며, 물리 효과가 적용되지 않은 오브젝트의 움직임이나 단순한 타이머, 키 입력을 받을 때 유용하다.
- FixedUpdate() - 프레임을 기반으로 호출되는 Update 와 달리 Fixed Timestep에 설정된 값에 따라 일정한 간격으로 호출된다.. 물리 효과가 적용된(Rigidbody) 오브젝트를 조정할 때 사용됩니다(Update는 불규칙한 호출임으로 물리엔진 충돌검사 등이 제대로 안될 수 있음).
- LateUpdate() - 모든 Update 함수가 호출된 후, 마지막으로 호출된다. 주로 오브젝트를 따라가게 설정한 카메라는 LateUpdate 를 사용한다.(카메라가 따라가는 오브젝트가 Update함수 안에서 움직일 경우가 있기 때문).
이를 위해 캐릭터의 월드 포지션 값이 프레임 안에서 업데이트 될때마다 멤버변수에 할당해주고 LateUpdate() 문에서 카메라를 이동시키는 방식으로 좀더 안정적인 카메라 워크 코드를 작성하였다.
이러면 캐릭터가 업데이트 문에서 불규칙 적으로 움직인다 하여도 매 프레임 마다 캐릭터의 움직임 확정되고 카메라를 움직이기 때문에 격렬한 캐릭터 움직임 안에서도 좀더 안정적으로 카메라가 캐릭터를 따라갈수 있다.
또 카메라가 캐릭터의 움직임에 따라 움직일때 카메라의 바운더리를 벗어날경우 스위치 문을 사용해 카메라의 포지션을 제어하는 방식을 사용해 보았다.
반응형
LIST
'프로젝트 > 건즈앤 레이첼스' 카테고리의 다른 글
| [유니티] 게임 진입 구조잡기 - as연산자, 비동기식 데이터 로드 (0) | 2023.02.27 |
|---|---|
| [유니티] 대쉬 (회피) 기능 고민 (1) | 2023.02.26 |
| [유니티] 터치 아날로드 패드를 이용한 무기 회전 (0) | 2023.02.26 |
| [유니티] 2d 스프라이트 회전 (스크린 터치 회전 시키기) (0) | 2023.02.26 |
| [유니티] 2D 아날로그 터치패드 구현 & 애니메이션 (0) | 2023.02.26 |