After I update the script (adding the commented lines), by clicking anywhere, the character walks towards the center of the scene. The balls are not working as in the teacher’s video.
using System;
using UnityEngine;
using UnityStandardAssets.Characters.ThirdPerson;
[RequireComponent(typeof (ThirdPersonCharacter))]
public class PlayerMovement : MonoBehaviour
{
[SerializeField] float walkMoveStopRadius = 0.2f;
ThirdPersonCharacter thirdPersonCharacter; // A reference to the ThirdPersonCharacter on the object
CameraRaycaster cameraRaycaster;
Vector3 currentDestination, clickPoint;
private bool isInDirectMode = false;
private void Start()
{
cameraRaycaster = Camera.main.GetComponent<CameraRaycaster>();
thirdPersonCharacter = GetComponent<ThirdPersonCharacter>();
currentDestination = transform.position;
}
// Fixed update is called in sync with physics
private void FixedUpdate()
{
if (Input.GetKeyDown(KeyCode.G))
{
isInDirectMode = !isInDirectMode;
currentDestination = transform.position;
}
if (isInDirectMode)
{
ProcessDirectMovement();
}
else
{
ProcessMouseMovement();
}
}
private void ProcessDirectMovement()
{
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
// calculate camera relative direction to move:
Vector3 cameraForward = Vector3.Scale(Camera.main.transform.forward, new Vector3(1, 0, 1)).normalized;
Vector3 movement = v * cameraForward + h * Camera.main.transform.right;
thirdPersonCharacter.Move(movement, false, false);
}
private void ProcessMouseMovement()
{
if (Input.GetMouseButton(0))
{
clickPoint = cameraRaycaster.hit.point;
switch (cameraRaycaster.currentLayerHit)
{
case Layer.Walkable:
currentDestination = clickPoint; //Modo antigo
//currentDestination = ShortDestination(clickPoint, walkMoveStopRadius);
break;
case Layer.Enemy:
print("Não ande até o inimigo");
break;
default:
print("Se a terra fosse plana, você cairia no limbo");
return;
}
}
var playerToClickPoint = currentDestination - transform.position;
if (playerToClickPoint.magnitude >= walkMoveStopRadius)
{
thirdPersonCharacter.Move(playerToClickPoint, false, false);
}
else
{
thirdPersonCharacter.Move(Vector3.zero, false, false);
}
}
Vector3 ShortDestination(Vector3 destination, float shortening)
{
Vector3 reductionVector = (destination - transform.position).normalized * shortening;
return destination = reductionVector;
}
private void OnDrawGizmos()
{
//Desenha a trajetória do movimeneto do personagem
Gizmos.color = Color.black;
Gizmos.DrawLine(transform.position, currentDestination);
Gizmos.DrawSphere(currentDestination, 0.1f);
Gizmos.DrawSphere(clickPoint, 0.15f);
}
}