本文へスキップ
Unity Tutorial

Mover un objeto 3D hacia la posicion clicada en Unity

Usa ScreenPointToRay, Physics.Raycast y MoveTowards para crear un controlador simple de click-to-move.

公開日: 2026-05-05#Unity#Raycast#3D#Movement
+
*
+
Coco, personaje guia・喜ぶ
Coco
Guia de aprendizaje de game dev
Esta leccion sigue la misma estructura guiada que la version japonesa: vista inicial, dialogo, pasos y cierre practico.
+
*
+
Hajime, personaje aprendiz・混乱
Hajime
Aprendiz principiante de game engines
Quiero entender que hacer primero, que revisar y como comprobar que realmente lo aprendi.
Coco, personaje guia
Aprenderas un patron muy util: leer un click sobre el suelo y mover un personaje hacia ese punto de forma clara y controlable.
Hajime, personaje aprendiz
Revisa objetivo, entrada y criterio de exito
Coco, personaje guia
La leccion se sigue mejor cuando sabes que debe pasar en pantalla y que cuenta como completado.

Resumen de la leccion

Termina primero un resultado que funcione

1.

Objetivo

Aprenderas un patron muy util: leer un click sobre el suelo y mover un personaje hacia ese punto de forma clara y controlable.

2.

Tiempo

30-40 min / Principiante

3.

Resultado

Un click en el suelo define el siguiente destino.

Puntos antes de empezar

Revisa objetivo, entrada y criterio de exito

La leccion se sigue mejor cuando sabes que debe pasar en pantalla y que cuenta como completado.

1

Aprenderas un patron muy util: leer un click sobre el suelo y mover un personaje hacia ese punto de forma clara y controlable.

2

Convierte el click en un rayo 3D con Camera.main.ScreenPointToRay y detecta el suelo con Physics.Raycast.

3

Un click en el suelo define el siguiente destino.

1Paso a paso

1
Step 1
Lanza un rayo desde el mouse
Convierte el click en un rayo 3D con Camera.main.ScreenPointToRay y detecta el suelo con Physics.Raycast.
2
Step 2
Guarda el punto de impacto
Cuando el rayo golpee el suelo, guarda hit.point como destino del objeto.
3
Step 3
Mueve y gira con suavidad
Usa Vector3.MoveTowards para la posicion y una rotacion suave si quieres orientar el objeto al destino.

2Codigo

Click-to-move controller
csharp
using UnityEngine;

public class ClickMoveController : MonoBehaviour
{
    [SerializeField] private float moveSpeed = 5f;
    [SerializeField] private LayerMask groundLayer;

    private Vector3 targetPosition;
    private bool hasTarget;

    private void Start()
    {
        targetPosition = transform.position;
    }

    private void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            var ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            if (Physics.Raycast(ray, out RaycastHit hit, 100f, groundLayer))
            {
                targetPosition = hit.point;
                hasTarget = true;
            }
        }

        if (!hasTarget) return;

        transform.position = Vector3.MoveTowards(
            transform.position,
            new Vector3(targetPosition.x, transform.position.y, targetPosition.z),
            moveSpeed * Time.deltaTime
        );
    }
}

3Checklist

  • Un click en el suelo define el siguiente destino.
  • El objeto solo responde a la capa de suelo elegida.
  • La velocidad se mantiene estable gracias a Time.deltaTime.

4Revision con personajes

Hajime, personaje aprendiz
Un click en el suelo define el siguiente destino.
Coco, personaje guia
completa primero la leccion tal como esta y luego cambia un valor o detalle visual para fijar el aprendizaje.
Variacion pequena: completa primero la leccion tal como esta y luego cambia un valor o detalle visual para fijar el aprendizaje.

Siguientes tutoriales