728x90
반응형
카메라가 캐릭터를 따라다니는 스크립트
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraCtrl : MonoBehaviour
{
public float cameraMoveSpeed = 5; // 캐릭터를 따라다니는 카메라의 속도
// 카메라의 경계선을 그려주기 위해 맵의 크기를 구해야한다
// 인스펙터창에서 조정할 수 있도록 퍼블릭으로 선언
public Vector2 center;
public Vector2 mapSize;
GameObject player; // 카메라가 따라다닐 캐릭터
// 카메라의 높이와 폭을 받아오기 위한 변수 선언
float height;
float width;
void Awake()
{
// 카메라가 따라다닐 캐릭터의 레퍼런스를 연결해 줬다
player = GameObject.Find("Player");
}
void Start()
{
// 컴포넌트가 실행됨과 동시에 카메라의 높이와 폭을 받아 변수에 저장한다
height = Camera.main.orthographicSize;
width = height*Screen.width / Screen.height;
}
// 캐릭터를 따라다니는 카메라의 이동은 업데이트 함수보다 레이트 업데이트 함수에서
// 처리를 해주는게 더 좋다
void LateUpdate()
{
// 플레이어의 위치와 카메라의 위치를 뺀 값을 벡터3 변수에 저장하여 방향을 나타낸다
Vector3 dir = player.transform.position - this.transform.position;
// 카메라가 x축, y축으로 움직일때, 이동 속도만큼 서서히 이동시키기 위함
Vector3 moveVector = new Vector3(dir.x * cameraMoveSpeed * Time.deltaTime, dir.y * cameraMoveSpeed * Time.deltaTime, 0.0f);
this.transform.Translate(moveVector); // 위에서 구한 방향과 거리만큼 카메라를 움직인다
// 카메라가 영역 밖으로 벗어나지 못하게 해주는 코드
float lx = mapSize.x - width;
float clampX = Mathf.Clamp(transform.position.x, -lx + center.x, lx + center.x);
float ly = mapSize.y - height;
float clampY = Mathf.Clamp(transform.position.y, -ly + center.y, ly + center.y);
transform.position = new Vector3(clampX, clampY, -10f);
}
// 카메라의 경계 영역을 그려 눈에 보이게 함
void OnDrawGizmos()
{
Gizmos.color = Color.red; // 색상은 빨강색으로 그린다
Gizmos.DrawWireCube(center, mapSize * 2); // 네모 모양으로 대칭 맞게
}
}
주석으로 설명을 달았는데 내 생각이기 때문에 정확하게 맞는진 모르겠다^^
그래도 동작은 잘 되니까~
728x90
반응형
'개발일지 > 코드 기록' 카테고리의 다른 글
유니티2D Slider로 HP Bar 만들기 (0) | 2022.09.26 |
---|---|
유니티2D 탑다운 캐릭터 위치에 따른 오브젝트 레이어 정렬 (0) | 2022.09.26 |
유니티2D 캐릭터 좌우 플립과 이동 애니메이션 (1) | 2022.09.26 |
유니티2D 키보드 입력에 따른 캐릭터 이동 (1) | 2022.09.26 |
댓글