using System.Collections;
using UnityEngine;
public class TestPlayer : MonoBehaviour
{
[SerializeField]
private Transform eye;
public float moveSpeed = 5.0f;
private void Start()
{
MoveForward();
}
public void MoveForward()
{
Ray ray = new Ray(this.eye.position, this.transform.forward);
RaycastHit hitInfo;
if (Physics.Raycast(ray, out hitInfo))
{
Debug.DrawRay(ray.origin, ray.direction * hitInfo.distance, Color.blue, 5f);
StartCoroutine(CoMoveForward(hitInfo.distance, hitInfo.normal));
}
else
{
Debug.DrawRay(ray.origin, ray.direction * 100f, Color.blue, 5f);
}
}
private IEnumerator CoMoveForward(float distance, Vector3 wallNormal)
{
float moveAmount = 0;
while (moveAmount < distance)
{
float step = moveSpeed * Time.deltaTime;
moveAmount += step;
this.transform.Translate(Vector3.forward * step);
if (moveAmount > distance)
{
float excess = moveAmount - distance;
this.transform.Translate(Vector3.back * excess);
}
yield return null;
}
Vector3 reflectDirection = Vector3.Reflect(this.transform.forward, wallNormal);
this.transform.rotation = Quaternion.LookRotation(reflectDirection);
}
}
반응형
'KDT > 유니티 심화' 카테고리의 다른 글
[SpaceShooter] 총알이 벽에 닿았을 때 튕기게 만들기 (0) | 2023.08.21 |
---|---|
[SpaceShooter] 벽에 닿았을 때 캐릭터 회전 시키기 (2) (0) | 2023.08.21 |
[궁수의 전설 따라해보기] Legend of Circle (0) | 2023.08.21 |
[궁수의 전설 따라해보기] 이동과 공격 (1) (0) | 2023.08.20 |
[SpaceShooter] 메인 카메라의 회전과 줌 기능 구현 (0) | 2023.08.17 |