개인 프로젝트를 본격적으로 시작하면서 필수 과제 전부와 도전과제 1개를 완료하였습니다.

using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using UnityEngine;
public class MovePlatform : MonoBehaviour
{
[SerializeField] private Transform _startPoint;
[SerializeField] private Transform _endPoint;
private GameObject _platform;
[SerializeField] private float _waitTime = 1.0f;
[SerializeField] private float _moveSpeed = 2.0f;
private float _yPivot;
private float _extra = 0.1f;
private void Start()
{
_platform = transform.gameObject;
_platform.transform.position = _startPoint.position;
_yPivot = transform.position.y + _platform.transform.localScale.y / 2;
StartCoroutine(MoveRoutine());
}
private IEnumerator MoveRoutine()
{
while (true)
{
// 시작에서 끝 지점으로
yield return StartCoroutine(MoveTo(_endPoint.position));
yield return new WaitForSeconds(_waitTime);
// 끝에서 시작 지점으로
yield return StartCoroutine(MoveTo(_startPoint.position));
yield return new WaitForSeconds(_waitTime);
}
}
private IEnumerator MoveTo(Vector3 target)
{
while (Vector3.Distance(_platform.transform.position, target) > 0.01f)
{
_platform.transform.position =
Vector3.MoveTowards(_platform.transform.position,target,_moveSpeed * Time.deltaTime);
yield return null;
}
_platform.transform.position = target;
}
private void OnCollisionEnter(Collision collision)
{
if (collision.transform.CompareTag("Player"))
{
float playerPivot = collision.transform.position.y + collision.transform.localScale.y / 2;
if (playerPivot + _extra > _yPivot)
{
collision.transform.SetParent(_platform.transform, true);
}
}
}
private void OnCollisionExit(Collision collision)
{
if (collision.transform.CompareTag("Player"))
{
collision.transform.SetParent(null);
}
}
}




using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class UI_Hover : UI_Scene
{
private Camera mainCamera;
[SerializeField] private GameObject hoverUI;
private TextMeshProUGUI hoverTxt;
[SerializeField] private LayerMask interactableLayer;
enum Texts
{
Txt,
}
public override void Init()
{
hoverUI.SetActive(true);
Bind<TextMeshProUGUI>(typeof(Texts));
hoverTxt = Get<TextMeshProUGUI>((int)Texts.Txt);
mainCamera = Camera.main;
hoverUI.SetActive(false);
}
private void Update()
{
Ray ray = mainCamera.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out RaycastHit hit, 100f, interactableLayer))
{
// 마우스 근처에 UI 표시
hoverUI.SetActive(true);
hit.transform.TryGetComponent<ItemObject>(out ItemObject item);
hoverTxt.text = item.Data.DisplayName;
Vector2 screenPos = Input.mousePosition;
hoverUI.transform.position = screenPos + new Vector2(20f, -20f); // 마우스 옆에 띄움
}
else
{
hoverUI.SetActive(false);
}
}
}


