C# 유니티 - 벡터, 평행이동, 좌표계 부모자식 관계

Se0ng_1l·2022년 7월 25일
0
post-thumbnail

이 글은
https://www.inflearn.com/course/유니티-게임-프로그래밍-에센스
강의를 요약한 강의노트 입니다.
유니티를 처음 접하시는 분들이거나 좀 더 기반을 다지고 싶으신 분들에게 👍강력하게 추천합니다.

📌Vector(벡터)

게임에서의 벡터

좌표, 방향, 거리, 속도 등을 나타내기 위해 사용한다.
3차원 벡터 : Vector3 (x, y, z)
2차원 벡터 : Vector2 (x, y)
(X = 좌우 Y = 상하 Z= 전후)

절대좌표 : 내 위치
상대좌표 : 내 위치를 기준으로 특정한 위치의 좌표

Vector3 선언

Vector3 = new vector3(x,y,z)

➕ 벡터의 덧셈

(1, 1) + (2, 3) = (3, 4)
➡️ (1, 1)이 기준이 되어 기준으로부터 (2, 3)만큼 더해진 결과 (3, 4)

활용

도착점과 시작점 사이의 간격
도착점 = (9, 0), 시작점 = (-1, 0)이라고 할 때
도착점 - 시작점 = 두 점사이의 간격 (10, 0)을 알 수 있다.

✖️ 벡터의 곱셈

(1,1) 과 (3, 3)
➡️(3, 3)은 (1, 1)의 3배

활용

방향벡터(Normalized)
방향벡터란, 크기가 1인 방향을 나타내는 벡터를 의미한다.
예)
(4, 3)은 원점으로부터 5의 거리만큼 떨어져있다.
(0.8, 0.6)은 원점으로부터 1의 거리만큼 떨어져있는 벡터로
이를 5배하면 (4, 3)이 된다.
따라서 방향벡터만 구한다면 방향벡터 * 크기를 통해 원하는 곳으로 이동시킬 수 있다.

📌평행이동과 좌표계 + 부모자식관계

좌표계

Global Space vs Local Space

Global Space : 게임 세상을 기준으로한 절대적인 좌표
Local Space : 부모로부터 나 자신의 좌표

평행이동하는법

아래 와 같이 Translate을 사용하거나 아래와 같이 사용하면 된다.
(move == 벡터값)

    첫번째 방법 : transform.Translate(move);
    두번째 방법 : transform.position = transform.position + move;

일반적인 평행이동은 Global Space를 기준으로 이동한다.
아래와 같이 구분되어 사용할 수 있다.

transform.Translate(move * Time.deltaTime, Space.World); // 글로벌 스페이스 평행이동
transform.Translate(move * Time.deltaTime, Space.Self); // 로컬 스페이스 평행이동

유니티의 오브젝트
1. 부모오브젝트가 없는 오브젝트의 경우는 글로벌(= 로컬)이 되어 transform이 설정된다.
2. 부모 오브젝트가 있는 경우 자식 오브젝트의 transform은 부모 오브젝트를 기준으로 transform이 설정된다. 즉 부모 오브젝트를 글로벌로 취급한다.

📌Tip

글로벌 transform설정 관련 함수

transform.position
transform.rotation
transform.lossyScale;

로컬 transform설정 관련 함수

transform.localPosition;
transform.localRotation;
transform.localScale;

Mover.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Mover : MonoBehaviour
{
    public Vector3 move = new Vector3(-5, -5, -5);
    void Update()
    {
        if (Input.GetKey(KeyCode.Space))
        {
            Move();
        }
    }

    void Move()
    {
        transform.Translate(move * Time.deltaTime);
    }
}

SetPosition.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SetPosition : MonoBehaviour
{
    void Start()
    {
        //transform.position = new Vector3(0, 0, 0);
        transform.localPosition = new Vector3(0, 0, 0);
    }
}
profile
치타가 되고 싶은 취준생

0개의 댓글