일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 도트
- vsCode
- 독립변수
- Event
- Quaternion
- 탑다운
- Unity
- euler
- PYTHON
- 자주 사용하는 Quaternion 함수
- topdown
- 회전
- addEventListener
- 종속변수
- classList
- className
- getItem
- 도린이
- 연습
- 웹스크래핑
- 픽셀
- setItem
- 코딩
- click
- jQuery
- 2D
- Lerp
- javascript
- intervals
- wsl
Archives
- Today
- Total
쫑가 과정
쉽게 플레이어 맵 이동, 맵 변경 본문
오늘 결과
1. 타일 맵 깔기
새롭게 씬에 타일을 깐다.
2. Collider를 이용한 플레이어 이동.
텔레포트로 사용할 새로운 GameObject를 생성
3. 이동(텔레포트) Script 생성
using UnityEngine;
public class AreaTransitionScript : MonoBehaviour
{
// 카메라 스크립트 변수
private MainCameraController cam;
// 새로운 맵 카메라 최소, 최대 범위 설정
[SerializeField] Vector2 newMinCameraBoundary;
[SerializeField] Vector2 newMaxCameraBoundary;
// 플레이어가 새로운 맵으로 이동된 후 위치 조절.
[SerializeField] Vector2 playerPosOffset;
// 출구 위치 변수
[SerializeField] Transform exitPos;
private void Awake()
{
cam = Camera.main.GetComponent<MainCameraController>();
}
private void OnTriggerEnter2D(Collider2D collision)
{
if(collision.tag == "Player")
{
cam.minCameraBoundary = newMinCameraBoundary;
cam.maxCameraBoundary = newMaxCameraBoundary;
cam.player.position = exitPos.position +(Vector3)playerPosOffset;
}
}
}
OnTriggerEnter2D를 사용해
Player라는 태그를 가진 콜라이더와 겹친다면
MainCameraController에 있는 최소/최대 카메라 범위를 새로운 카메라 범위로 지정.
플레이어의 위치는 ExitPos변수 위치에서 playerPosOffset 만큼 이동된다. (텔레포트)
4. Unity 내 설정
새로운 카메라 최대 최소 경계설정은 앞에서 했던 것처럼 하면 된다.
출구 위치를 지정해준다.
결과
5.프리팹화
프리팹화 해두면 다음 사용할 때 손쉽게 사용 가능하다.
---------22.03.11 오류 수정---------
장소 이동 시 Clamp함수로 정한 최소, 최댓값을 벗어나 Clamp값이 0이 되는 현상.
잘 작동했던 이유는 0이 된 후 새로운 경계값이 들어갔기 때문.(프레임 순서는 동일하기에 결과가 0이 되기도 한다.)
아래 코드를 추가했다.
Clamp함수를 사용하는 한 0이 되지 않게 할 수 없겠더라. 최대한 Clamp를 사용하면서 할 방법을 고민했다.
// 플레이어 스크립트
private void OnTriggerEnter2D(Collider2D collision)
{
if(collision.tag == "Boundary")
{
boundaryScript = collision.GetComponent<AreaTransitionScript>();
saveMaxPos = boundaryScript.newMaxCameraBoundary;
saveMinPos = boundaryScript.newMinCameraBoundary;
}
}
// 카메라 스크립트
if(minCameraBoundary == Vector2.zero && maxCameraBoundary == Vector2.zero)
{
minCameraBoundary = player.GetComponent<Movement>().saveMinPos;
maxCameraBoundary = player.GetComponent<Movement>().saveMaxPos;
}
플레이어가 밟은 오브젝트의 새로운 경계값을 변수에 저장하고 Clamp값이 0이 된다면 변수값을 꺼내 쓴다.
효율은 좋지 못하다고 생각된다. Clamp함수를 쓰지 않거나 더 좋은 방법을 찾아서 사용해야 할 듯하다.
'Unity 따라 배우기 > Topdown 2D RPG In Unity' 카테고리의 다른 글
마무리 (0) | 2022.04.08 |
---|---|
데미지 입는 효과 주기 / 캐릭터 깜빡이기 (0) | 2022.03.08 |
플레이어 체력 설정 / 공격 맞기. (0) | 2022.03.04 |
쉬운 적 AI 만들기 (설정 범위 내 공격, 범위 밖 설정 자리로 돌아감) (1) | 2022.02.24 |
카메라 플레이어 부드럽게 따라가기, 카메라 경계 설정. (2) | 2022.02.22 |
2d 탑 다운 시점 캐릭터 8방향 움직임, 애니메이션 설정. (0) | 2022.02.18 |
Comments