일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- VR
- 드래곤 플라이트
- input system
- 포트폴리오
- 앱 배포
- 길건너 친구들
- 드래곤 플라이트 모작
- 오큘러스
- 팀 프로젝트
- 유니티
- 가상현실
- 멀티플레이
- meta xr
- 팀프로젝트
- OVR
- 개발일지
- Photon Fusion
- ChatGPT
- Oculus
- 유니티 GUI
- 유니티 UI
- 개발
- 오브젝트 풀링
- CGV
- 연습
- meta
- 유니티 Json 데이터 연동
- XR
- 모작
- HAPTIC
Archives
- Today
- Total
EasyCastleUNITY
Space Shooter 카메라 Player Follow 본문
절대강좌 유니티 책을 기반으로 작성함
FollowCam
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FollowCam : MonoBehaviour
{
//따라가야 할 대상을 연결할 변수
[SerializeField]
private Transform targetTransform;
//따라갈 대상으로부터 떨어질 거리
[Range(2.0f, 20.0f)]
[SerializeField]
private float distance = 10.0f; //실제 수치가 제한 된것이 아니라 인스펙터 상에서의 제한
public float Distance
{
get { return distance; }
}
//y축으로 이동할 높이
[Range(0.0f, 10.0f)]
[SerializeField]
private float height = 2.0f;
public float Height
{
get { return height; }
}
[SerializeField]
private float damping = 10.0f; //반응속도
// Start is called before the first frame update
void Start()
{
}
// Update메서드 이후의 실행
void LateUpdate()
{
//카메라 위치, 언제나 플레이어 뒤에서 distance 만큼 떨어지고, 그 위치에서 height 만큼의 높이의 위치한다
Vector3 pos = this.targetTransform.position + (-this.targetTransform.forward * distance) + (Vector3.up * height);
//구면 선형 보간 메서드를 이용, 부드럽게 위치를 변경
this.transform.position = Vector3.Slerp(this.transform.position, pos, Time.deltaTime * damping); //(시작위치, 목표 위치, 시간 t)
//카메라를 타겟에 피봇 좌표를 향하도록 함
this.transform.LookAt(targetTransform.position);
}
}
PlayerController
using System;
using UnityEngine;
using static PlayerControl;
public class PlayerController : MonoBehaviour
{
[SerializeField]
private float moveSpeed = 2.0f;
[SerializeField]
private float turnSpeed = 80f;
private FollowCam followCam;
private float distance;
private float height;
private void Awake()
{
this.followCam = GameObject.FindAnyObjectByType<FollowCam>();
}
private void Update()
{
this.distance = this.followCam.Distance;
this.height = this.followCam.Height;
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
float r = Input.GetAxis("Mouse X"); //왼쪽으로 마우스 움직이면, -, 오른쪽으로 마우스 움직이면 +
Vector3 moveDir = (Vector3.forward * v) + (Vector3.right * h);
//Debug.Log(moveDir);
DrawArrow.ForDebug(this.transform.position, moveDir.normalized, 0f,Color.red);
this.transform.Translate(moveDir.normalized * this.moveSpeed * Time.deltaTime);
//마우스 왼쪽으로 움직이면, 왼쪽으로 회전, 마우스 오른쪽으로 움직이면, 오른쪽으로 회전
Vector3 angle = Vector3.up * turnSpeed * Time.deltaTime * r;
//this.transform.Rotate(angle); //set이 아니라 원래 rotation에서 더하는 방식으로 됨
}
private void OnDrawGizmos()
{
Gizmos.color = Color.white;
GizmosExtensions.DrawWireArc(this.transform.position, this.transform.forward, 360, 1);
DrawArrow.ForDebug(this.transform.position,this.transform.forward,0f,Color.green); //플레이어 앞에 길이 1의 화살표 그림
DrawArrow.ForDebug(this.transform.position, -1 * this.transform.forward * distance, 0f, Color.yellow); //플레이어 뒤에 길이 3의 화살표 그림
Vector3 pos = this.transform.position + (-1 * this.transform.forward *distance);
DrawArrow.ForDebug(pos, Vector3.up * height, 0f, Color.green);
}
}
'유니티 심화' 카테고리의 다른 글
[과제]궁수의 전설 이동 및 공격 만들기(2023.08.23 00:01분 최종완성) (0) | 2023.08.19 |
---|---|
3D Space Shooter Test1 (0) | 2023.08.18 |
2D 탄막 게임 테스트 (적 피격 애니메이션 및 사망 애니메이션) (0) | 2023.08.18 |
3D SpaceShooter Player Control & FollowCam (0) | 2023.08.18 |
2D 탄막 게임 1 (0) | 2023.08.16 |