유니티

c# 기본

nock_ji 2022. 5. 9. 14:13

1. 자료형과 변수

자료형 변수 이름 = 값;

int, float, bool, string

string name = "이름";

2. 조건문

if (조건)

{

}

else if (조건)

{

}

else (조건)

{

}

3. 반복문

for (int i = 0; i <10; i++)

{

//할 일

}

4. 함수

반환자료형 함수이름 (매개변수)

{

}

int result = Plus(10,20)

int Plus (int a, int b)

{

return = a + b;

}

Vector3 dir = Vector3.right * h + Vector3.up * v ;

(위의 식과 같음) Vector3 dir = new Vector(h, v, 0);

오늘은

Enemy

EnemyManager

Enemy

1. 아래로 이동

void Update()
    {
        //아래로 이동하고싶다 
        //P += vt
        transform.position += Vector3.down * speed * Time.deltaTime;
    }

 

Collider가 있어야 충돌체가 있는 것 -> 충돌 가능

충돌하기 위해서는 충돌체와 리지드바디가 있어야 함 !

Player를 타겟하여 에너미가 쫓음

public class Enemy : MonoBehaviour
{
    Vector3 dir;
    public float speed = 5;

    void Start()
    {
        //태어날 때 방향을 정하고 싶다
        int randValue = Random.Range(0, 10);
        // 30% 확률로는 플레이어 방향, 
        if (randValue < 3 )
        {
            GameObject target = GameObject.Find("Player");
            dir = target.transform.position - transform.position;
            dir.Normalize(); //벡터의 정규화 : 벡터의 크기를 1로 만든다
        }
        //나머지 확률로는 아래방향으로 하고 싶다.
        else
        {
            dir = Vector3.down;
        }

    }

    void Update()
    {
        //살아가면서 그 방향으로 이동하고 싶다 

        //아래로 이동하고싶다 
        //P += vt
        transform.position += dir * speed * Time.deltaTime;
    }

    //함수호출 function call (callback 함수, 이벤트 함수)
    private void OnCollisionEnter(Collision collision)
    {
        //너 죽고
        Destroy(collision.gameObject);
        //나 죽자
        Destroy(this.gameObject);
    }
}

 

EnemyManager

어떤 시간이 되면 Enemy 생성하기

1초마다 Enemy Factory에서 Enemy 생성

public class EnemyManager : MonoBehaviour
{
    // 현재시간
    float currentTime;
    // 생성시간
    public float createTime = 1;
    // 적 공장
    public GameObject enemyFactory;
    void Start()
    {
        
    }

    void Update()
    {
        // 의사 코드 = 슈도코드
        //1. 시간이 흐르다가
        currentTime += Time.deltaTime;
        //2. 만약 현재시간이 생성시간을 초과하면
        if (currentTime > createTime )
        {
            //3. 현재시간을 0으로 초기화하고
            currentTime = 0;
            //4. 적공장에서 적을 만들어서
            GameObject enemy = Instantiate(enemyFactory);
            //5. 내 위치에 배치하고 싶다
            //enemy의 위치 = 내 위치 
            enemy.transform.position = enemyFactory.transform.position;

        }

    }
​

 

일정 범위 밖으로 나간 Enemy와 Bullet 파괴하기

파괴 존을 만든다

감지충돌 : Trigger

물리충돌 : Rigidbody

 

public class DestroyZone : MonoBehaviour
{
    private void OnTriggerEnter(Collider other)
    {
        //부딪힌 상대방을 파괴하고 싶다.
        Destroy(other.gameObject);
    }

 

DestroyZone끼리 닿으면 없어짐. 그렇게 되지 않도록 함

Layer 추가하여 edit - projectsetting - 부딪히지 않도록 언체크 !!!

** Shoot 슈팅 스크립트 프로토타입 외우기 ! -> 훨씬 좋아짐

'유니티' 카테고리의 다른 글

FBSGunTarget 1인칭 시점 object grab  (0) 2022.05.12
프로퍼티(Property) get; set;  (0) 2022.05.12
Vector3 , Unity Lifecycle, 타겟 추적, 총구 발사 생성  (0) 2022.05.09
C# 기본  (0) 2022.05.06
Terrain 지형 만들기  (0) 2022.05.04