멋쟁이사자처럼부트캠프 유니티 게임 개발 5기 9일차 - LookAt, Rotate

2025. 5. 23. 17:39·강의/멋쟁이 사자처럼 유니티 부트캠프

Movement 심화

정규화

h, v를 Input에 따라 그냥 가져오게 되면, 대각선의 경우 앞뒤좌우 이동보다 빠른 속도로 이동해버린다.

따라서 속도를 일정하게 맞추기 위해 정규화 과정을 거쳐준다.

float h = Input.GetAxis("Horizontal");
float v = Input.GetAxisRaw("Vertical");
Vector3 dir = new Vector3(h, 0, v); // 대각선의 경우 더 빠른 속도가 되어버림

Vector3 normalDir = dir.normalized; // 정규화 과정 (-1~1)
Debug.Log($"현재 입력 : {normalDir}");
transform.position += normalDir * moveSpeed * Time.deltaTime;

이동 방향에 보게 하기

LookAt() : 즉시 어떤 위치를 바라보게 하는 함수

transform.LookAt(transform.position + dir); // 지금 위치에서 이동할 위치를 바라보게 함

게임 수학

각도

Degree

일상적으로 사용하는 각의 단위

Radian

반지름의 길이 = 호의 길이

1Rad = 약 57.3도

Mathf 이용 변환

// 각도(Degree) -> 라디안(Radian)
// Mathf.Deg2Rad
// 라디안(Radian) -> 각도(Degree)
// Mathf.Rad2Deg

float degree = 180f;
float rad = degree * Mathf.Deg2Rad;

Degree로만 계산할 시 유니티 상에서 이상한 값이 나올 수도 있기 때문에 라디안으로 변환해서 계산해야한다.

 

LookAt 실습

실행순서

public class Study_GameObject : MonoBehaviour
{
    void Start()
    {
        CreateAmongus();
    }
}
public class Study_LookAt : MonoBehaviour
{
    public Transform targetTf;
    public Transform turretHead;
    void Start()
    {
        targetTf = GameObject.FindGameObjectWithTag("Player").transform;
    }
    void Update()
    {
        turretHead.LookAt(targetTf);
    }
}

위처럼 Start()에서 캐릭터 생성과 타겟 설정을 한다면 어느쪽이 먼저 실행될 지 알 수 없다.

캐릭터 생성이 타겟 설정보다 나중에 되면 타겟이 Null으로 설정된다.

Awake() : 시스템 주축 세팅

Start() : 서브적인 세팅

(보통 Manager를 만들어서 혼자 Awake를 쓰거나 함)

따라서 아래처럼 수정하면 작동된다.

public class Study_GameObject : MonoBehaviour
{
    void Awake() // 또는 OnEnable로 써도 먼저 실행
    {
        CreateAmongus();
    }
}

총알 쏘기

총알 발사

public class Bullet : MonoBehaviour
{
    public float bulletSpeed = 100f;
    void Update()
    {
        transform.position += transform.forward * bulletSpeed * Time.deltaTime;
    }
}

Timer로 시간 설정

timer로 시간 측정해서 cooldownTime마다 총알 생성(발사)

public float timer;
public float cooldownTime;

void Update()
{
    turretHead.LookAt(targetTf);

    timer += Time.deltaTime;
    if (timer >= cooldownTime)
    {
        timer = 0f;
        Instantiate(bulletPrefab, firePos.position, firePos.rotation); // 총알 생성
    }
}

 

행성 실습

URP 방식 아니라 렌더링 깨지는 경우

머테리얼 선택 후 Edit - Rendering - Materials - Convert Selected Built-in Materials to URP

 

그리는 구조가 Build-in Rendering Pipeline에서 최근에 URP(Universal Rendering Pipeline)로 바뀜

자전

transform.Rotate(Vector3.up, rotSqeed * Time.deltaTime); // 위쪽 방향의 축 기준으로 회전

공전

public Transform targetPlanet;
public bool isRevolution = false;if (isRevolution)
{
    // 공전 기능
    transform.RotateAround(targetPlanet.position, Vector3.up, revSpeed * Time.deltaTime);
    // (타겟 대상, 회전축, 속도)
}

 

 

이렇게 한 경우 달은 지구가 움직이기 때문에 이상한 경로로 움직이게 된다.

지구의 위치를 동기화 받아서 달도 돌아야하기 때문에 지구의 자식이 되어야 한다.

 

단축키

shift + f : 대상한테 카메라 고정

'강의/멋쟁이 사자처럼 유니티 부트캠프' 카테고리의 다른 글
  • 멋쟁이사자처럼부트캠프 유니티 게임 개발 5기 11일차 - 2D, 머테리얼, 무한 루프맵
  • 멋쟁이사자처럼부트캠프 유니티 게임 개발 5기 10일차 - 룰렛, transform, mesh, callback
  • 멋쟁이사자처럼부트캠프 유니티 게임 개발 5기 8일차 - Component, Object, Input
  • 멋쟁이사자처럼부트캠프 유니티 게임 개발 5기 7일차 - 변수, 배열, 컴포넌트 접근
로또
로또
게임 개발자 연습생의 발전 일지
  • 로또
    게임 개발 발전소
    로또
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 개발
        • 코딩테스트
        • JAVA
        • DB
        • Unity
      • 강의
        • 패스트캠퍼스 0원 챌린지
        • 멋쟁이 사자처럼 유니티 부트캠프
      • 게임
        • 리뷰
  • 블로그 메뉴

    • 홈
    • 방명록
    • 글쓰기
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    패스트캠퍼스후기
    패캠인강후기
    패스트캠퍼스
    dfs
    수강료0원챌린지
    Unity
    트리
    백트래킹
    멋쟁이사자처럼후기
    그래프
    게임개발
    C#
    직장인인강
    분리집합
    오공완
    완전탐색
    3D웹인터랙티브
    패캠챌린지
    환급챌린지
    한번에끝내는프론트엔드개발초격차패키지Online
    코딩테스트
    백준
    자료구조
    직장인자기계발
    그리디알고리즘
    2839
    BFS
    C4D
    그리디
    Java
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
로또
멋쟁이사자처럼부트캠프 유니티 게임 개발 5기 9일차 - LookAt, Rotate
상단으로

티스토리툴바