개발일지/WIL(Weekly I Learned)

10월 4주차

프린스 알리 2024. 10. 25.

- FACTS: 이번 일주일 동안 있었던 일, 내가 한 일

(1) 게임개발 스터디

3주차에 HTML, CSS, JavaScript를 이용해 게임을 만들었던 것처럼, 4주차에는 C#과 유니티를 이용해서 새로운 게임 만들기에 도전해 보았다. 굳이 유니티 게임에 도전했다는 게 의아할 테지만 나름의 이유가 있었다. 정적 언어인 C#을 아주 살짝이나마 익혀보는 게 우리 팀에 도움이 될 거라고 생각했기 때문이다. 실제로 팀원 분 중엔 자바스크립트로 프로그래밍 언어에 첫 입문을 하신 분이 계시기도 했고, 자바스크립트가 가진 편의성은 어쩌면 다른 언어를 알고 있을 때 체감이 될 때가 많다고 생각한다. 하여간 이유는 각설하고 어떤 공부를 했는지, 설명하도록 하겠다.

 

저번주차와 마찬가지로 든든한 바탕이 되어준 스파르타 코딩클럽의 강의가 있었다.


스파르타코딩클럽

 

스파르타코딩클럽

스파르타코딩클럽 | 올해의 브랜드 대상 1위 왕초보를 위한 온라인 코딩강의

online.spartacodingclub.kr

 

사실 어떤 언어든지 제일 중요한 건 게임을 구현하기 위한 문제 해결 방식일 터다.


자바스크립트에서 캐릭터의 이동을 좌표를 통해 구현했던 것처럼, 유니티에서도 겉모습만 다를 뿐 본질은 같았다.
또, 좌표를 쓰는 것에서 더 나아가 벡터의 개념을 활용할 수 있었다.

void Update()
    {
        inputAndMove();

        if (IsJump && IsGround)
        {
            if (currentJumpTime <= Time.time)  // Time.time 게임 엔진상의 시간
            {
                currentJumpTime = Time.time + JumpInterval;
                rb.velocity = new Vector2(rb.velocity.x, JumpPower);
            }
        }
    }

    private void inputAndMove()
    {
        // WASD, 방향키 등의 입력 시간을 방향에 따라 입력해주는 함수
        float x = Input.GetAxis("Horizontal");
        direction = new Vector2(x, 0); // X축 방향의 벡터를 생성

        // 스페이스바를 누르면 IsJump = true
        IsJump = Input.GetKeyDown(KeyCode.Space); 
    }

    private void FixedUpdate()
    {
        rb.velocity = new Vector2(direction.x * moveSpeed, rb.velocity.y); 
        // Rigidbody의 속도 벡터=(direction 벡터 * 속력(크기), 현재 위치의 y)
        var myPos = transform.position;

        // 카메라의 포지션
        camTrnsform.position = new Vector3(myPos.x, myPos.y, camTrnsform.position.z) + camOffset;
    }

 

웹 환경과는 조금 다른 방식으로 객체 생성 타이머를 구현해보기도 했다.

public float currentObstacleTime = 0f;
// 장애물 스폰 시간 랜덤하게 정하기
private void ObstacleSpawn()
{
    if (currentObstacleTime > Time.time) return; 
    // 현재 시간(Time.time)이 장애물 스폰 시간보다 작으면 리턴

    // 장애물 생성
    TGameManager.InstanceTGameManager.SpawnObstacle(transform.position);

    // 2초~5초 랜덤 주기로 다음 스폰 시간 설정
    currentObstacleTime = Time.time + Random.Range(2f, 5f);

    Debug.Log($"Next obstacle spawn time: {currentObstacleTime}");
}

 

언어에 따라 활용할 수 있는 메서드나 모듈이 다를 테지만, 물리적 움직임을 화면에 나타낸다는 본질은 여전히 동일했다. 특정 기능을 어떻게 구현할 지에 대한 아이디어가 있고 없고의 차이는 클 거라고 본다. 그런 점에서 만족스러운 팀 프로젝트였다.

(2) MySQL 심화 과정

MySQL 걷기반 퀘스트를 마치고 달리기반 퀘스트까지 모두 완료하였다. 문제를 해결하는 과정에서 참 많이 헤매기도 했고 어떻게 푸는 게 좋을지 고민도 오래하게 되었다. 그러다가 내가 편하다고 느끼는 방식을 찾게 되었는데 달리기반 퀘스트까지 무사히(?) 풀게 된 것을 보니 나름 효과가 있었던 것 같다. 본캠프에 들어서서 더 최적화를 시킬 수 있다면 좋을 것 같다.

- FEELINGS(느낌, 주관) : 나의 감정적인 반응, 느낌

정말 팀원들의 도움을 많이 받게 된 한 주였다. 서로에게 모르는 부분을 알려주고, 답을 찾아주려고 노력한 과정이 모두 우리의 밑거름이 된 듯하다. 이렇게 열심히, 그리고 화기애애하게 마무리 지을 수 있다니. 말 그대로 행운이 따랐던 게 아닐까.

- FINDINGS(배운 것) : 그 상황으로부터 내가 배운 것, 얻은 것

코드를 어떻게 쓰는 게 현명할지 고민하게 되었다. 이를 테면 특정 기능을 수행하는 코드 조각들은 가능한 함수로 만드는 게 활용성이 좋다는 것. 숫자를 하드코딩하는 것보단 변수를 생성하여 그것에 의미를 부여하는 게 좋다는 것. 또 게임을 만드는 과정에서 겪게 될 시행착오를 어떤 방향으로 해결하면 좋을지, 전반적인 위기 관리 능력이 향상되었다고 생각한다.

- FUTURE(미래) : 배운 것을 미래에는 어떻게 적용할 지

앞서 작성한 코드들을 기능별로 분류해서 나만의 라이브러리를 만들어두면 괜찮을 것 같다. 물론 누군가 이미 만들어뒀을 테지만 내가 작성했다는 점에서 의미가 값질 테니 하나씩 모아봐야겠다. 우리가 글을 쓸 때마다 이미 오래 전에 습득한 문장 구조를 여러 번 활용하는 것처럼, 코딩 또한 그와 비슷한 게 아닐까. 내가 과거에 보고 배우고 작성해본 코드를 스스로 체화시키는 과정이 결국 개발 공부인 것 같다.

'개발일지 > WIL(Weekly I Learned)' 카테고리의 다른 글

11월 1주차  (4) 2024.11.08
10월 5주차  (5) 2024.11.01
10월 3주차  (2) 2024.10.18
10월 2주차  (7) 2024.10.11
2024년 10월 1주차  (5) 2024.10.04

댓글