
유튜브에도 한번 올려보고 리드미에 사용할 동영상도 찍어봤다
죽었을 때 게임오버 UI 만 띄우기는 허전해서 다시하기 버튼 완성

https://www.youtube.com/watch?v=ly9mK0TGJJo
이 영상을 보고 움직이는 발판을 추가
빈 오브젝트를 사용해서 기준점을 잡고
움직이는 발판이 빈 오브젝트의 위치를 찾아 움직이게끔 하는 방식
과제에는 추가 못했지만 트리거를 이용해서 플레이어가 움직이는 발판에 올라탔을 때 작동하도록 변경해주면 엘레베이터나 화면 전환용으로 사용 가능한 발판도 만들 수 있겠다
부모 오브젝트에 스크립트를 넣어주고 자식 오브젝트로 위치를 지정
public Transform GetWayPoint(int waypointIndex)
{
return transform.GetChild(waypointIndex);
}
public int GetNextWaypointIndex(int currentWaypointIndex)
{
int nextWaypointIndex = currentWaypointIndex + 1;
if (nextWaypointIndex == transform.childCount)
{
nextWaypointIndex = 0;
}
return nextWaypointIndex;
}
움직이는 발판에 적용시켜줄 코드
[SerializeField]
private WaypointPath _waypointPath;
[SerializeField]
private float _speed;
private int _targetWaypointIndex;
private Transform _previousWaypoint;
private Transform _targetWaypoint;
private float _timeToWaypoint;
private float _elapsedTime;
// Start is called before the first frame update
void Start()
{
TargetNextWaypoint();
}
// Update is called once per frame
void FixedUpdate()
{
_elapsedTime += Time.deltaTime;
float elapsedPercentage = _elapsedTime / _timeToWaypoint;
transform.position = Vector3.Lerp(_previousWaypoint.position, _targetWaypoint.position, elapsedPercentage);
if (elapsedPercentage >= 1)
{
TargetNextWaypoint();
}
}
private void TargetNextWaypoint()
{
_previousWaypoint = _waypointPath.GetWayPoint(_targetWaypointIndex);
_targetWaypointIndex = _waypointPath.GetNextWaypointIndex(_targetWaypointIndex);
_targetWaypoint = _waypointPath.GetWayPoint(_targetWaypointIndex);
_elapsedTime = 0f;
float distanceToWaypoint = Vector3.Distance(_previousWaypoint.position, _targetWaypoint.position);
_timeToWaypoint = distanceToWaypoint / _speed;
}
private void OnTriggerEnter(Collider other)
{
other.transform.SetParent(transform);
}
private void OnTriggerExit(Collider other)
{
other.transform.SetParent(null);
}
트리거는 플레이어가 발판위로 올라탔을 때 발판이랑 같이 연동해서 움직일 수 있도록 설정