[TIL] 74일차 - Update와 Coroutine

김유원·2024년 4월 9일
1

📝 24.04.09

어제 기술 면접 문답을 많이 해서 오늘은 생략한다.

오늘 면접 연습을 하면서 여러 피드백을 받았다.

  1. 자기 소개에는 자기가 왜 게임을 좋아하는지 그래서 어떤 것을 했는지 나만의 이야기를 포함해야 한다.
  2. 기술 면접은 외워서 대답하는 게 아니라 이해하는 것이 중요 - 예를 들어 스택과 힙에 대해 물어보면 구조체나 지역 변수, 동적 배열 리스트, new 키워드 등 예시를 들어서 설명하는 것이 좋음
  3. 문제 자체 뿐만 아니라 꼬리 질문에 대비 해야 함 - 드로우콜 배칭에 대한 대답만 준비할게 아니라 드로우콜이 뭔지도 알아둬야 함

위의 피드백을 바탕으로 기술 면접 문답을 더 정교하게 준비해야겠다.



오늘은 몬스터 사망 시 아이템 드랍을 가장 주요하게 구현했다.

아이템 드랍 효과 📝

위의 포스트를 참고하여 구현하였는데, Update() 사용이 굳이 필요없을 뿐더러 탑다운 게임을 기반으로 만든 위의 스크립트를 플랫포머 게임 기준으로 새로 구현하였다.

또한, 그림자 효과는 필요없으므로 삭제했다.

using System.Collections;
using UnityEngine;

public class Gem : MonoBehaviour
{
    [SerializeField] private int xForce = 5;
    [SerializeField] private int yForce = 15;
    [SerializeField] private int gravity = 25;

    private Vector2 direction;
    private bool isGrounded = true;

    private float maxHeight;
    private float currentHeight;

    private void Start()
    {
        currentHeight = Random.Range(yForce - 1, yForce);
        maxHeight = currentHeight;
        direction = new Vector2(Random.Range(-xForce, xForce), 0);
        Initialize(direction);
        StartCoroutine(Move());
    }

    private IEnumerator Move()
    {
        while (!isGrounded)
        {
            currentHeight += -gravity * Time.deltaTime;
            transform.position += new Vector3(0, currentHeight, 0) * Time.deltaTime;
            transform.position += (Vector3)direction * Time.deltaTime;

            yield return null;
            CheckGroundHit();
        }
    }

    private void Initialize(Vector2 _direction)
    {
        isGrounded = false;
        maxHeight /= 1.5f;
        direction = _direction;
        currentHeight = maxHeight;
    }

    private void CheckGroundHit()
    {
        RaycastHit2D hit = Physics2D.Raycast(transform.position, Vector2.down, 0.5f, LayerMask.GetMask("Ground"));
        Debug.Log(hit.collider);
        if (hit.collider != null)
        {
            // 땅에 닿음
            isGrounded = true;
            transform.position = hit.point;
        }
    }
}

땅에 바로 떨어지길 바래서 여러번 튀지 않게 했고, 몬스터가 죽으면 터지는 것처럼 포물선을 그리는 효과만 유지했다.

굳이 꾸준한 이동을 프레임마다 호출할 이유가 없으므로 Update() 대신 코루틴을 통해 이동을 실행하도록 수정했다.

profile
개발 공부 블로그

0개의 댓글

관련 채용 정보