Vector3의 구조와 이용방법

littleDev·2024년 7월 7일

Unity

목록 보기
7/7
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

// 1. 위치 벡터 
// 2. 방향 벡터
struct MyVector
{
    public float x, y, z;

    // 피타고라스 정리 이용, 거리 구하기 변수
    public float magnitude
    {
        get { return Mathf.Sqrt(x*x + y*y + z*z); }
    }
    // 방향 구하기 변수 (단위 벡터)
    public MyVector normalized
    {
        get { return new MyVector(x / magnitude, y / magnitude, z / magnitude); }
    }
    
    public MyVector(float x, float y, float z)
    {
        this.x = x;
        this.y = y;
        this.z = z;
    }

    public static MyVector operator +(MyVector a, MyVector b)
    {
        return new MyVector(a.x + b.x, a.y + b.y, a.z + b.z);
    }
    public static MyVector operator -(MyVector a, MyVector b)
    {
        return new MyVector(a.x - b.x, a.y - b.y, a.z - b.z);
    }
    public static MyVector operator *(MyVector a, float d)
    {
        return new MyVector(a.x * d, a.y * d, a.z * d);
    }
}

public class PlayerController : MonoBehaviour
{
    [SerializeField] private float _speed = 10f;
    
    
    private void Start()
    {
        // b가 a로 이동.
        MyVector a = new MyVector(10f, 0f, 0f);
        MyVector b = new MyVector(5f, 0f, 0f);
        MyVector dir = a - b; // (5f, 0f, 0f)   방향 : +x   크기 : 5f(magnitude)
        dir = dir.normalized; // (1f, 0f, 0f)

        MyVector newPos = b + dir * _speed;
    }
    
    private void Update()
    {
        // transform.Translate 랑 transform.TransformDirection()은 같음. local -> world
        if (Input.GetKey(KeyCode.W))
        {
            transform.Translate(Vector3.forward * (_speed * Time.deltaTime));
        }
        if (Input.GetKey(KeyCode.S))
        {
            transform.Translate(Vector3.back * (_speed * Time.deltaTime));
        }
        if (Input.GetKey(KeyCode.A))
        {
            transform.Translate(Vector3.left * (_speed * Time.deltaTime));
        }
        if (Input.GetKey(KeyCode.D))
        {
            transform.Translate(Vector3.right * (_speed * Time.deltaTime));
        }
    }
}
profile
매일 성장하고싶은 개발자

0개의 댓글