Вот мой код:Простой скрипт «click-to-move» не работает?
public class CharacterController : MonoBehaviour
{
private Vector3 _startLocation = Vector3.zero;
private Vector3 _currentLocation = Vector3.zero;
private Vector3 _endLocation = Vector3.zero;
private bool _isMoving = false;
private float _distanceToTravel;
private float _startTime;
public float Speed = 1.0f;
// Update is called once per frame
void Update()
{
if (Input.GetMouseButtonDown(0))
{
Debug.Log("Left mouse button clicked");
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
if (hit.collider.gameObject.CompareTag("Ground"))
{
_startLocation = transform.position;
_endLocation = hit.point;
_isMoving = true;
_startTime = Time.time;
_distanceToTravel = Vector3.Distance(_startLocation, _endLocation);
Debug.Log(string.Format("Ground has been hit: Start: {0}, End: {1}", _startLocation.ToString(), _endLocation.ToString()));
}
}
}
if (_isMoving)
Move();
}
void Move()
{
float timeElapsed = (Time.time - _startTime) * Speed;
float t = timeElapsed/_distanceToTravel;
_currentLocation = Vector3.Lerp(_startLocation, _endLocation, t);
transform.Translate(_currentLocation);
if (_currentLocation == _endLocation)
{
Debug.Log(string.Format("Destination reached ({0})", _endLocation.ToString()));
_isMoving = false;
}
}
}
Я прочитал документацию по функции Vector3.Lerp
, а также функцию Physics.Raycast
, и в конечном итоге с этим кодом.
Консоль отладки подтверждает, что Земля была поражена, но моя капсула начинает двигаться вверх в направлении Y и никогда не останавливается!
Я все еще очень новичок в Unity и разработке игр в целом, поэтому я все еще участвую, но любые указатели на то, что я делаю неправильно?
Я думаю, что я просто понимаю d, что я использую 'deltaTime', когда я действительно должен держать время с момента начала движения, так как это линейная функция ... –
Я отредактировал свой код, чтобы правильно использовать функцию Lerp' (вместо использования' deltaTime ', но должен ли я все-таки использовать это где-то ...?), так что теперь моя капсула перемещается по осям x и y, но она по-прежнему движется вверх по оси Z бесконечно. –
Коррекция: перемещение бесконечно по оси положительного Y, а не Z. Я привык к координатам, которые использует Blender ... –