유니티

Vector3 , Unity Lifecycle, 타겟 추적, 총구 발사 생성

nock_ji 2022. 5. 9. 13:57

위치 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