앱 만들기/유니티2D

유니티-충돌 처리 하기(2) 게임 중지시키기

나도 처음이야 2021. 6. 16.

특정 오브젝트에 주인공 유닛이 충돌하였을때 게임을 중지시킬 수 있다.

게임을 중지 시킬때 중요한 코드는 하기와 같다.

게임 역시 영화처럼 시간 개념이 있기때문에 Time.timescale = 0 으로 하면 게임씬이 정지하게 된다.

반대로 Time.timescale=1 이면 정상적인 속도로 시간이 움직인다.

Time.timescale = 2 하면 그럼 어떻게 될까? 그렇다 2배속으로 빨리 재생이 되어진다.

유니티에서 게임은 영화의 한씬처럼 생각하면 된다.

 

지난 시간에 이어 소방차를 활용해보자.

특정 블럭에 충돌되면 멈추어서게된다. 하기 처럼 말이다.

https://youtu.be/7Xs04chErck

 

지난 시간과 동일하게 

블럭 과 자동차에 동일 컴포넌트를 적용하고 하기 처럼 코드를 작성한다.

이 코드는 자동차가 특정 블럭에 충돌시 게임을 정지하는 효과를 가져다 준다.

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class MoveOnRightLeft : MonoBehaviour
{
    public float speed = 1;
    Rigidbody2D rbody;
    public string targetObject;
 
    // Start is called before the first frame update
    void Start()
    {
        // 게임 시작.
        Time.timeScale = 2;
        rbody = GetComponent<Rigidbody2D>();
        // 소스상에서 중력 무시 및 Z축 회전 방지를 한다
        rbody.gravityScale = 0;
        rbody.constraints = RigidbodyConstraints2D.FreezeRotation;    
    }
 
    // Update is called once per frame
    void FixedUpdate()
    {
        // 물리엔진의 속도로 X축으로 이동
        rbody.velocity = new Vector2(speed, 0);        
    }
 
    private void OnCollisionEnter2D(Collision2D collision)
    {
        // 충돌오브젝트가 타겟 오브젝트라면.. 게임을 중지
        if(collision.gameObject.name  == targetObject)
        {
            Time.timeScale = 0;
        }
        // 충돌시 방향을 바꾼다.
        speed = -speed;
        this.GetComponent<SpriteRenderer>().flipX = (speed < 0);
 
    }
}
 
cs

 

OnCollisionEnter2D 함수에서 게임을 중지하기 위한 하기 코드가 중요하다.

   // 충돌오브젝트가 타겟 오브젝트라면.. 게임을 중지

        if(collision.gameObject.name  == targetObject)

        {

            Time.timeScale = 0;

        }

 

유니티 게임은 마치 영화의 씬과 같이 동작한다는 것이 주요하다

감사합니다. 

반응형

댓글