위치 position
속도 velocity
시간 time
이동 공식
P = P0 + vt
내일의 나 = 오늘의 나 + 오늘 할 일
가속도 공식
v = v0 + at
힘의 공식
F = ma
Vector : 방향 x 크기
더하기, 빼기
스칼라 곱하기 - 내적 dot / 벡터 곱하기 - 외적 cross
Scalar : 크기
하드코딩 : 수치값을 지정하는 것 (번거로움)
직렬화 serialization : public으로 값 공개 및 저장
오늘의 할 일
3가지 : 학습, 일에 관한 것
7가지 : 습관을 바꾸는 연습 (사소한 것)
목표는 All Clear !
Unity lifecycle
주황색 : 한 번만 호출
보라색 : 프레임마다 반복호출
짙은 색 : 생기고 사라짐
이동 (대각선과 직선 스피드가 다른 상황)
void Update()
{
// 1. 사용자의 입력에 따라서
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
// 2. 상하좌우로 방향을 만들고
// 3. 그 방향으로 이동하고 싶다.
//이동공식 ( P += vt )
//내일의 나 = 오늘의 나 + 오늘 할 일
transform.position += Vector3.right * h * speed * Time.deltaTime;
transform.position += Vector3.up * v * speed * Time.deltaTime;
}
대각선의 속도를 1로 만들어줌 (본래 1보다는 살짝 빠름)
Normalize : 벡터크기를 1로 만들어줌, 정규화 !
void Update()
{
// 1. 사용자의 입력에 따라서 ( h,v는 단순히 축임 )
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
// 2. 상하좌우로 방향을 만들고 ( 벡터는 더하기 가능 ! )
Vector3 dir = Vector3.right * h + Vector3.up * v;
//dir의 크기를 1로 만들어야한다.
dir.Normalize();
// 3. 그 방향으로 이동하고 싶다.
//이동공식 ( P += vt )
//내일의 나 = 오늘의 나 + 오늘 할 일
transform.position += dir * speed * Time.deltaTime;
}
어느 시점에 코드를 작성할 것인가
타겟(목적지)를 따라가는 로직
public class Tail : MonoBehaviour
{
public float speed = 5f; // 속력
public GameObject target; // 목적지
void Start()
{
}
void Update()
{
//1. 목적지를 향하는 방향을 만들고
// 목적지 - 내위치
Vector3 dir = target.transform.position - transform.position;
dir.Normalize();
//2. 그 방향으로 이동하고 싶다
transform.position += dir * speed * Time.deltaTime;
}
}
델타타임 : 한 프레임을 그리는데 걸리는 시간
<Shooting의 프로토타입 정리>
1. PlayerMove : Player 이동
2. Tail
3. Bullet : prefab 만들기
4. PlayerFire
5. Enemy
6. EnemyManager
7. DestroyZone
Bullet script
//위로 이동하고 싶다
public float speed = 10;
void Update()
{
//위로 이동하고 싶다
transform.position += Vector3.up * speed * Time.deltaTime;
}
PlayerFire script
//사용자가 마우스 왼쪽 버튼을 누르면 총알 공장에서 총알을 만들어서 총구 위치에 배치하고 싶다
Bullet을 껐다 켰다하여 메모리를 정리함
MemoryPool / ObjectPool
Instantiate : 프리펩의 원본과 같은 복사본을 반복적으로 생성시킴
public class PlayerFire : MonoBehaviour
{
//총알공장 = Bullet prefab
public GameObject bulletFactory;
//총구위치
public GameObject firePosition;
void Start()
{
}
void Update()
{
//1. 만약 사용자가 마우스 왼쪽 버튼을 누르면
if (Input.GetButtonDown("Fire1"))
{
//2. 총알 공장에서 총알을 만들어서
GameObject bullet = Instantiate(bulletFactory);
//3. 총구 위치에 배치하고 싶다
//총알의 위치 = 총구의 위치
bullet.transform.position = firePosition.transform.position;
}
}
}
'유니티' 카테고리의 다른 글
프로퍼티(Property) get; set; (0) | 2022.05.12 |
---|---|
c# 기본 (0) | 2022.05.09 |
C# 기본 (0) | 2022.05.06 |
Terrain 지형 만들기 (0) | 2022.05.04 |
유니티 3D 쿼터뷰 액션게임 만들기 - 돌격형, 원거리형 몬스터 / 공격 데미지 (0) | 2022.04.25 |