[#2]우주 정복 프로젝트

Maengkkong·2023년 11월 17일

11/09 ~ 11/12

  • 게임 시스템 기획
  • 게임 에셋 탐색

2023.11.13

Development History

  1. Monsters(Basic/Middle/Boss) prefab 제작
  2. Basic Monster가 아래로 떨어질 수 있도록 Rigidbody2D와 Boxcollider2D 사용
  3. AddForce 사용하여 Monster가 떨어지는 방향과 속도 조절
  4. Random.Range()를 사용하여 Monster가 X축 좌표에서 랜덤으로 생성

1. Monsters prefab 제작

  • prefab 시스템을 이용하여 게임 오브젝트를 생성, 설정 및 저장할 수 있다.
  • prefab을 생성 후 해당 prefab 안의 게임 오브젝트의 Component, property 값, 자식 게임 오브젝트를 수정한다면 prefab 하나씩 기능을 수정하는 것이 아니라 한번에 해당 기능을 수정할 수 있다.


2. Monster 떨어지고 충돌하기

  • Rigidbody2D와 Boxcollider2D 사용
  • Rigidbody2D는 Unity 에디터의 Transform component의 게임 오브젝트 및 자식 게임 오브젝트가 씬 내에 배치, 회전 및 스케일 방식을 설정해준다.
  • Boxcollider2D는 박스 모양의 충돌체입니다.
  • Rigidbody와 collider를 함께 사용하여 물체끼리 충돌할 수 있게 만든다.


3. Monster 떨어지는 조절

  • GetComponent<>를 사용하여 GameObject에 속한 Rigidbody2D를 호출
  • AddForce()를 사용하여 Monster가 떨어지는 방향과 속도 조절

GetComponent<ComponentType>();

AddForce(Vector2 force, ForceMonde2D.Force);

public class BasicMonster_Force : MonoBehaviour
{
    public Rigidbody2D BasicMoster_Rigidbody;

    // Start is called before the first frame update
    void Start()
    {
        //Rigidbody2D에서 rigidbody를 가져옵니다.
        BasicMoster_Rigidbody = GetComponent<Rigidbody2D>();
    }

    // Update is called once per frame
    void Update()
    {
        //AddForce를 사용하여 방향과 속도 조절
        BasicMoster_Rigidbody.AddForce(Vector2.down * 1f, ForceMode2D.Force);

    }
}

4. Monster 랜덤 생성

Monster의 위치를 X축 좌표를 기준으로 램던으로 생성

Random.Range(minInclusive , maxInclusive);

public class BaiscMonster : MonoBehaviour
{
    public GameObject BasicMonster;
    public int BasicMonsterCount = 50;
    private float randomX;

    // Start is called before the first frame update
    void Start()
    {
        InvokeRepeating(nameof(spawn), 0.5f, 3f);
    }
    

    // Update is called once per frame
    void spawn()
    {
    	// Monster의 X좌표 범위 고정 후 랜덤 생성
        randomX = Random.Range(-2, 3);
        GameObject newObject = Instantiate(BasicMonster, new Vector3(randomX, gameObject.transform.position.y, 0f), transform.rotation);
        Destroy(newObject, 4f);
    }
}
  • randomX를 void start가 아닌 InvokeRepeating을 사용하여 spawn을 선언한 후 void spawn을 사용한 이유
    : 계속해서 다양한 x좌표 위치에서 몬스터가 반복적으로 나오게 하기 위해 새로 생성하였다.

  • 몬스터의 X 값을 확인 후 Random.Range(-2, 3);의 값을 작성 > (-2, 2)범위

1개의 댓글

comment-user-thumbnail
2023년 11월 20일

wow

답글 달기