일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 픽셀
- PYTHON
- 도린이
- Lerp
- javascript
- 회전
- 독립변수
- 코딩
- wsl
- vsCode
- click
- getItem
- 연습
- Unity
- 웹스크래핑
- className
- setItem
- Event
- 종속변수
- classList
- 자주 사용하는 Quaternion 함수
- 2D
- addEventListener
- topdown
- 도트
- intervals
- Quaternion
- euler
- 탑다운
- jQuery
Archives
- Today
- Total
쫑가 과정
카메라 플레이어 부드럽게 따라가기, 카메라 경계 설정. 본문
public class MainCameraController : MonoBehaviour
{
[SerializeField] Transform player;
private void LateUpdate()
{
Vector3 targetPos = new Vector3(player.position.x, player.position.y, this.transform.position.z);
transform.position = targetPos;
}
}
카메라가 따라갈 위치 변수를 만들어주고, 카메라 위치를 위치 변수로 설정하면 된다.
중요한 건 LateUpdate메서드를 사용해야 한다는 것이다.
플레이어가 움직이면 위치가 변경되는데 카메라 위치도 같은 프레임에 변경되게 하면 카메라 위치가 버벅된다.
플레이어 위치가 변경된 후 카메라 위치가 변경되게 하자.
Update보다 늦게 동작되는 LateUpdate를 사용해야 한다.
부드럽게 변경
using UnityEngine;
public class MainCameraController : MonoBehaviour
{
[SerializeField] Transform player;
[SerializeField] float smoothing = 0.2f;
private void FixedUpdate()
{
Vector3 targetPos = new Vector3(player.position.x, player.position.y, this.transform.position.z);
transform.position = Vector3.Lerp(transform.position, targetPos, smoothing);
}
/*private void LateUpdate()
{
Vector3 targetPos = new Vector3(player.position.x, player.position.y, this.transform.position.z);
transform.position = targetPos;
}*/
}
Vector3.Lerp를 사용하는데 여기서는 FixedUpdate를 사용한다.
(캐릭터는 FixedUpdate로 움직이게 해 놨기에 FixedUpdate사용, 만약 Update를 사용했다면 Update로 다르면 버벅된다)
Lerp자체가 설정한 float에 따라 부드럽게 변경되기에 LateUpdate를 사용하면 버벅된다.
간단하게 카메라 경계 설정
using UnityEngine;
public class MainCameraController : MonoBehaviour
{
[SerializeField] Transform player;
[SerializeField] float smoothing = 0.2f;
[SerializeField] Vector2 minCameraBoundary;
[SerializeField] Vector2 maxCameraBoundary;
private void FixedUpdate()
{
Vector3 targetPos = new Vector3(player.position.x, player.position.y, this.transform.position.z);
targetPos.x = Mathf.Clamp(targetPos.x, minCameraBoundary.x, maxCameraBoundary.x);
targetPos.y = Mathf.Clamp(targetPos.y, minCameraBoundary.y, maxCameraBoundary.y);
transform.position = Vector3.Lerp(transform.position, targetPos, smoothing);
}
카메라 위치는 타겟 위치를 따라가므로 타깃 위치에 제한을 준다.
Mathf.Clamp를 사용해 제한을 주자.
https://docs.unity3d.com/ScriptReference/Mathf.Clamp.html
최솟값 지정
최댓값 지정
결과
'Unity 따라 배우기 > Topdown 2D RPG In Unity' 카테고리의 다른 글
마무리 (0) | 2022.04.08 |
---|---|
데미지 입는 효과 주기 / 캐릭터 깜빡이기 (0) | 2022.03.08 |
플레이어 체력 설정 / 공격 맞기. (0) | 2022.03.04 |
쉬운 적 AI 만들기 (설정 범위 내 공격, 범위 밖 설정 자리로 돌아감) (1) | 2022.02.24 |
쉽게 플레이어 맵 이동, 맵 변경 (0) | 2022.02.23 |
2d 탑 다운 시점 캐릭터 8방향 움직임, 애니메이션 설정. (0) | 2022.02.18 |
Comments