V = { 1, 2, 3 }
**덧셈**
V1 = [1, 2]
V2 = [2, 3]
V1 + V2 = [1 + 2, 2 + 3]
**뺄셈**
V1 - V2 = [1 - 2, 2 - 3]
A = [3, 5]
B = [2, -1]
A - B = A + (-B) = [3 + (-2), 5 + -(-1)] = [1, 6]
B - A = B + (-A) = [2 + (-3), -1 + -5] = [-1, -6]
**스칼라곱**
2 * V1 = [1 * 2, 2 * 2]
-3 * V1 = [1 * -3, 2 * -3]
**벡터의 크기(magnitude)**
sqrt(3^2 + 5^2+c^2)
**크기가 1인 벡터** => 방향 벡터(Directional Vector) => 정규화된 벡터(Nomalized Vector)
크기를 1로 만드는 과정을 정규화(Normalize) => 단위 벡터(Unit Vector)
->V / |->V| = √a^2 + b^2
**내적(inner product / dot prouct)**
A = [1, 2]
B = [2, 3]
내적을 최적화에 사용할 수 있다. cos 보다 간단한 수학연산이다.
내적함수연산 : CPU 자원 소모를 적게 한다.
ex) 자동차 속도계에 활용 가능.
// var fwdSpeed = Vector3.Dot(rigidbody.velocity, transform.forward);
x = 두 벡터의 값
A * B = |A||B|cos(x)
A * B = cos(x)
A * B = 0 -> 두 벡터가 평행할 때
**외적(outer product / cross product)**
radian / degree
PI == 180도
법선벡터 : 어떤 평면에 대한 수직인 벡터
Vector3.back;
Vector3.down;
Vector3.forward;
Vector3.left;
Vector3.right;
Vector3.up;
Vector3.zero;
Vector3.one;
normalVector.magnitude; // 벡터의 크기
normalVector.normalized; // 정규화된 벡터
normalVector.sqrMagnitude; // 벡터의 크기²
normalVector.x;
normalVector.y;
normalVector.z;
// 이런식으로도 쓸 수 있다.
normalVector[0]; == normalVector.x;
normalVector[1]; == normalVector.y;
normalVector[2]; == normalVector.z;
Vector3.Angle(); // 두 벡터의 사이각
Vector3.Cross(); // Cross Product
Vector3.Dot(); // Dot Product
Vector3.Distance(); // 두 벡터 사이의 거리 == distanceVector.magnitude;
Vector3.Max(); // 두 벡터 중 큰 크기를 가지는 벡터
Vector3.Min(); // 두 벡터 중 작은 크기를 가지는 벡터
Vector3.Nomalize(); // 정규화 == vector.normalized;
Vector3.Project(); // 한 쪽으로 사영한 벡터를 얻는다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EulerTest : MonoBehaviour
{
public float Speed;
void Start()
{
}
float X;
float Y;
void Update()
{
//밑에 이거는 90도만 감
//Vector3 angles = transform.rotation.eulerAngles;
//angles.x += Time.deltaTime * Speed;
//transform.rotation = Quaternion.Euler(angles);
X += Time.deltaTime * Speed;
Y += Time.deltaTime * Speed / 2;
transform.rotation = Quaternion.Euler(X,X,X);
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ProductTest : MonoBehaviour
{
public Transform Target;
void Update()
{
Vector3 distanceVector = Target.position - transform.position;
Debug.Log(Vector3.Dot(transform.forward, distanceVector.normalized));
Debug.DrawRay(transform.position, transform.forward * 5f, Color.blue);
Debug.DrawRay(transform.position, distanceVector, Color.red);
Vector3 nomalVector = Vector3.Cross(transform.forward * 10f, distanceVector.normalized);
Debug.DrawRay(transform.position, nomalVector, Color.green);
}
}
**골때리는 포탑 MAKING**
>> 보는 방향의 왼쪽 60도
>> 포탑은 회전하지 않음
>> 주황색 반경에 들어올 때만 쏘고, 나머지일땐 안쏜다.
https://github.com/shinshinjin/Weird_Turret