오늘 한 일
오늘은 위에서 내려다보는 시점의 탑다운 방식의 게임을 만들어보았습니다.
코드 몇개를 발췌해서 알려드리겠습니다.
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;문제였음.
지우니 바로 해결이 됨.