본문 바로가기

spartacodingclub/개발보고서

게임개발 종합반 2주차

 

*스파르타 클럽 강의[게임개발 종합반 7기] 2주차를 듣고 난 개인적인 후기*

더보기

2주차를 들으면서 점점 비전공자들에게는 추천할 수 없는 난이도가 나타나기 시작했다

기본적으로 프로그래밍을 해본 적이 있거나 C언어 계열에 대한 이해가 있다면 쉽게 따라갈 수 있을 것 같다

하지만 점점 코딩하는 거나 과제로 나오는 문제들 같은 경우에는

그런 프로그래밍을 해본 사람에게 적절한 난이도로 나온다

그리고 유니티라는 게 생각보다 오류와 변수가 많이 나타난다는 것을 깨달은 수업인 것 같다

저번에는 캐릭터가 움직이지 않아서 프로젝트를 다시 만들었고(기본적으로 캐릭터에게 행동을 가할 때는 프로젝트에 올려진 오브젝트에 변화를 주자)이번에는 게임오버 코드를 짜 실행했더니 캐릭터와 적 오브젝트가 땅에 딛지 않고 그대로 추락하는 오류가 발생해서 지금 이.. 보고서를 쓰는 와중에도 고치지 못하고 있는 중이다

 

 

*강의 내용*

 

앞으로 자세한 사소한 조작 방식에 대한 건 따로 포스터를 쓸 예정이다

이 강의 내용에서 가장 중요한 실습 위주로 작성해보도록 하겠다

 

 

*실습*

 

1. 캐릭터가 점프하게 만들기

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CharacterJump : MonoBehaviour
{
    public Rigidbody2D rigid;
    public float jumpHeight;
    bool isGrounded;
    bool isSecondJump = false;

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.UpArrow))
        {
            if (isGrounded == true)
            {
                rigid.AddForce(Vector3.up * jumpHeight, ForceMode2D.Impulse);
                if (isSecondJump)
                {
                    isGrounded = false;
                }
                else
                {
                    isSecondJump = true;
                }
            }
        }
    }
    private void OnTriggerEnter2D(Collider2D collision)
    {
        if(collision.gameObject.tag == "ground")
        {
            isGrounded = true;
        }
        Debug.Log("enter");
    }
}

위의 코드는 '2단 점프'와 '땅에 닿았는지' 확인하는 코드이다.

이 코드를 실행하면 캐릭터가 땅에 닿아 있을 때만 점프를 할 수 있는데,

그때 2단까지 점프할 수 있게 isSecondJump 변수를 이용해서

3단, 4단 점프를 미리 방지하는 코드이다

 

 

2. 벽에 부딪힐 때마다 방향을 바꿔 알아서 움직이는 적 만들기

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class EnemySaurus : MonoBehaviour
{
    public Rigidbody2D rigid;
    public SpriteRenderer reneder;
    public float moveSpeed;
    bool isLeft = true;

    // Update is called once per frame
    void Update()
    {
        if (isLeft)
        {
            rigid.velocity = Vector2.left * moveSpeed;
            reneder.flipX = false;
        }
        else
        {
            rigid.velocity = Vector2.right * moveSpeed;
            reneder.flipX = true;
        }
    }

    private void OnCollisionEnter2D(Collision2D collision)
    {
        if(collision.gameObject.tag == "wall")
        {
            isLeft = !isLeft;
        }
    }
}

위의 코드를 잘 보면 Update 함수에서 적이 왼쪽으로 움직일 때와 오른쪽으로 움직일 때를 나눈 것을 볼 수 있다

이는 움직이는 방향을 바꿀 때 2D 이미지를 좌우 반전해주는 코드를 담고 있다

그리고 OnCollisionEnter2D 함수는 유니티에서 지원해주는 것으로

게임 오브젝트가 'wall' 태그를 가진 것과 부딪히면 방향을 변경할 수 있게 해준다

 

 

3. 적이랑 부딪히면 게임 오버

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CharacterDamage : MonoBehaviour
{
    public BoxCollider2D col1;
    public BoxCollider2D col2;
    public SpriteRenderer render;


    
    void OnDamage()
    {
        col1.enabled = false;
        col2.enabled = false;
        render.color = new Color(1, 1, 1, 0.5f);
    }
    
    private void OnCollisionEnter2D(Collision2D collision)
    {
        if(collision.gameObject.tag == "enemy")
        {
            OnDamage();
        }
    }
}

위의 코드에서 주목해야 하는 건 col 변수들이다

바닥을 무시하고 통과하지 않도록 부여한 BoxCollider2D을 이용해서

적과 부딪히면 해당 기능들을 없어지게 만들어 그대로 떨어지면서 게임 오버가 되는 연출을 만든다

이때 OnCollisionEnter2D 함수는 적이 벽에 부딪혔을 때 다른 값을 주는 것과 같이

캐릭터가 태그가 'enemy'인 오브젝트를 만나면 OnDamage 함수를 실행하게 한다

 

 

4. 캐릭터 방향키에 맞춰 2D 이미지 좌우 반전

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Rtan : MonoBehaviour
{
    public SpriteRenderer spriteRenderer;

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.LeftArrow))
        {
            spriteRenderer.flipX = true;
        }

        if (Input.GetKey(KeyCode.RightArrow))
        {
            spriteRenderer.flipX = false;
        }
    }
}

이 코드를 이용하면 좌우 버튼을 눌렀을 때 캐릭터 이미지 변화 없이 움직이기만 하던 오브젝트가

입력하는 값에 따라 몸을 돌려 바라보게 된다

즉, 왼쪽을 눌렀을 때는 왼쪽을 바라보게 이미지를 반전하게 True 값을 주고

반대로 오른쪽을 눌렀을 때는 오른쪽을 바라보게 이미지를 반전하지 않게 False 값을 준다