수학적 기초인 벡터의 개념을 정립하고, 이를 유니티 실무에 적용하는 방법을 학습하였다.
벡터(Vector): 크기와 방향을 동시에 가지는 값.
스칼라(Scalar): 크기만 있는 값.
연산 활용:
덧셈: 두 힘의 합성.
뺄셈: 대상 간의 방향 벡터 산출.
곱셈: 방향은 유지하되 크기(길이)만 변화.
Normalize() 함수 사용).기존의 자동 기믹을 플레이어의 상호작용에 반응하는 수동/트리거 기믹으로 발전시켰다.



using UnityEngine;
public class DoorController : MonoBehaviour
{
[SerializeField] private DoorMovement _DoorMovementTarget;
private int _stayCount = 0;
private void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Key") || other.CompareTag("Player"))
{
_stayCount++;
UpdateDoorState();
}
}
private void OnTriggerExit(Collider other)
{
if (other.CompareTag("Key") || other.CompareTag("Player"))
{
_stayCount--;
if (_stayCount < 0) _stayCount = 0;
UpdateDoorState();
}
}
private void UpdateDoorState()
{
_DoorMovementTarget._isMoving = (_stayCount > 0);
}
}
using UnityEngine;
public class DoorMovement : MonoBehaviour
{
[SerializeField] float _moveDistance = 4f;
[SerializeField] float _moveSpeed = 2f;
public bool _isMoving = false;
Vector3 _closedPos;
Vector3 _openPos;
void Start()
{
_closedPos = transform.position;
_openPos = _closedPos + Vector3.up * _moveDistance;
}
void Update()
{
Vector3 targetPos = _isMoving ? _openPos : _closedPos;
transform.position = Vector3.MoveTowards(transform.position, targetPos, _moveSpeed * Time.deltaTime);
}
}
Exit 되면 닫힘)._stayCount 변수를 도입하였다. Enter 시 카운트를 증가시키고 Exit 시 감소시켜, 존 안에 남아있는 객체가 하나라도 있다면(Count > 0) 문이 열린 상태를 유지하도록 로직을 개선하였다.Grounded)를 체크하는 로직 보완이 필요하다.Normalize()를 적용하려 했으나, 미세한 조작 시에도 속도가 1로 고정되어 미끄러지는 듯한 조작감이 발생하는 문제가 생겼다. 입력 값의 크기에 따른 예외 처리가 필요함을 느꼈다.점프 기능 수정을 위해 지면을 감지하는 Raycast 방식이나 OnCollisionStay 활용법을 함께 알아볼까? 도움이 필요하면 말해다오.