유니티를 이용해 간단한 벽돌깨기 게임을 만들어 보았다.

이게 제일 기초인듯

1. 우선 플레이어와 공, 벽을 Cube와 Sphere로 만들어 주었다. 벽은 프리팹화해서 사용하였다.



2. 이후 Material을 만들어 색상을 넣어줬다.



3. Ball에 Rigidbody를 입혀 물리운동을 하게 하였다.

중력은 적용되면 공이 너무 빠르게 떨어지므로 해제.



4. Player에 스크립트를 연결하여 방향키로 좌우로 움직이고 스페이스바를 누를시 공이 날아가게 하였다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// 공을 연결
public GameObject ball = null;
 
// Update is called once per frame
void Update () {
    if (Input.GetKey(KeyCode.LeftArrow))
    {
        // 왼쪽벽보다 오른쪽일때만 왼쪽으로 이동
        if(transform.position.x > -25 + 6)
            transform.Translate(-Time.deltaTime * 40.0f, 00);
    }
    else if (Input.GetKey(KeyCode.RightArrow))
    {
        // 오른쪽벽보다 왼쪽일때만 이동
        if (transform.position.x < 25 - 6)
            transform.Translate(Time.deltaTime * 40.0f, 00);
    }
    
    if (Input.GetKeyDown(KeyCode.Space))
    {
        // 스페이스 클릭시 대각선으로 힘줌
        var cball = ball.GetComponent<Rigidbody>();
        cball.AddForce(800.0f, 1200.0f, 0);
    }
}
cs



5. 프리팹으로 블록을 만들고 공과 충돌시 삭제하게 스크립트를 작성

1
2
3
4
private void OnCollisionEnter(Collision collision)
{
    Destroy(gameObject);
}
cs



6. 기본 블록을 생성하는 스크립트를 만들어 메인 카메라에 넣어줬다. (그냥 1번 작동하라고)

1
2
3
4
5
6
7
8
9
public GameObject block = null;
// Use this for initialization
void Start () {
    for (int x = 0; x < 21; x++)
    {
        for (int y = 0; y < 4; y++)
            Instantiate(block, new Vector3(-20 + 2 * x, 23 - 2 * y, 0), Quaternion.identity);
    }
}
cs

Quaternion.identity는 회전하지않고 생성하게 하는 것.



7. 게임오브젝트에 물리마테리얼을 넣어줌

전부 마찰력은 0, 탄력?은 1로 주고 bounce combine을 maximum으로 하여 무엇과 충돌해도

항상 1이 유지되어 속도가 감소하지않고 계속 튀게 만들었다.


문제점은 중간에 튀다가 가로로 공이 튀게되면 바닥에 떨어지지않는 점...

중력을 주거나 탄력을 줄이면 공이 내려오긴 하는데 계속 속도가 줄어서 원래 속도로 돌아가지않는 새 문제가 생기더라

그래서 일단 연습단계라서 이렇게 만들기로 함



8. 완성

이렇게하여 간단한 벽돌깨기 게임이 완성되었다.

퀄리티는 매우 낮지만 연습하는 과정이니까.. 열심히 해서 더 완성도 높은 게임을 만들것이다.


block.mp4


Posted by misty_
,