코딩의 신 19

김동관·2025년 10월 27일

오늘 한 일

오늘은 위에서 내려다보는 시점의 탑다운 방식의 게임을 만들어보았습니다. 
코드 몇개를 발췌해서 알려드리겠습니다.

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

using UnityEngine;

public class BaseController : MonoBehaviour
{
    protected Rigidbody2D _rigidbody;

//캐릭터의 좌우반전을 나타냅니다.
    [SerializeField] private SpriteRenderer characterRenderer;
    [SerializeField] private Transform weaponPivot;
    

    protected Vector2 movementDirection = Vector2.zero;
    public Vector2 MovementDirection { get { return movementDirection; } }

    protected Vector2 lookDirection = Vector2.zero;
    public Vector2 LookDirection { get { return lookDirection; } }

//공격을 받았을때 뒤로 밀리는 힘을 저장합니다.
    private Vector2 knockback = Vector2.zero;
    private float knockbackDuration = 0.0f;

    protected virtual void Awake()
    {
        _rigidbody = GetComponent<Rigidbody2D>();
    }

    protected virtual void Start()
    {

    }

    protected virtual void Update()
    {
        HandleAction();
        Rotate(lookDirection);
    }

//매 물리 프레임마다 Move를 적용합니다.
    protected virtual void FixedUpdate()
    {
        Movment(movementDirection);
        if (knockbackDuration > 0.0f)
        {
            knockbackDuration -= Time.fixedDeltaTime;
        }
    }

    protected virtual void HandleAction()
    {

    }

//실제 이동함수인데, 넉백을 받으면 움직임이 줄어들게 합니다.
    private void Movment(Vector2 direction)
    {
        direction = direction * 5;
        if (knockbackDuration > 0.0f)
        {
            direction *= 0.2f;
            direction += knockback;
        }

        _rigidbody.velocity = direction;
    }

//방향에따라 sprite및 방향회전 입니다.
    private void Rotate(Vector2 direction)
    {
        float rotZ = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;
        bool isLeft = Mathf.Abs(rotZ) > 90f;

        characterRenderer.flipX = isLeft;

        if (weaponPivot != null)
        {
            weaponPivot.rotation = Quaternion.Euler(0, 0, rotZ);
        }
    }

    public void ApplyKnockback(Transform other, float power, float duration)
    {
        knockbackDuration = duration;
        knockback = -(other.position - transform.position).normalized * power;
    }
}

금일의 트러블 슈팅

<문제발생>
Assets/Script/Entity/BaseController.cs(3,25): error CS0234: 
The type or namespace name 'Metadata' does not exist in the namespace 
'System.Reflection' (are you missing an assembly reference?) 라는 오류가발생함.
<문제해결>
코드에서는 문제를 찾지 못해 다른요인이 있을거라 판단을 함
<결과>
코드를 만들때마다 자동으로 생성되는
using System.Reflection.Metadata;문제였음.
지우니 바로 해결이 됨.
profile
아이디어 뱅크

0개의 댓글