Tabla de contenidos

Introducción

Los indicadores objetivos son ampliamente utilizados en los juegos modernos, ya que ofrecen al jugador una indicación clara de su próximo objetivo. En este tutorial vamos a crear un método básico de guiar nuestro jugador a través de un conjunto de bucle de posiciones de destino. En la segunda parte de este tutorial vamos a ampliar este proyecto inicial para crear un activo listo para jugar avanzada.

Para completar este proyecto se necesita una comprensión básica de la interfaz y flujo de trabajo de la Unidad.

El paquete de activos

Antes de comenzar, por favor descargue el paquete activo relacionado aquí.

Cuando se completa la descarga, descomprimir el paquete y hacer una nota de la ubicación.


Uso de activos

Los activos originales del proyecto se ofrecen bajo las licencias Creative Commons 0.

Introducción

Lanzamiento de la Unidad y crear un proyecto 3D llamado ‘Indicator_System’


Una vez que el proyecto ha cargado vamos a empezar a establecer la escena. Si está utilizando una versión legado de la Unidad, es necesario crear un ‘Escenas’ carpeta que contiene una nueva escena denominada ‘IndicatorSystem’. Para las versiones recientes sólo tiene que cambiar el nombre de la escena por defecto.


Preparación de la escena

Antes de empezar vamos a ajustar algunas opciones de configuración para que se adapte al proyecto actual …


  • Abra las configuraciones de iluminación y establecer el Skybox en ‘No’
  • Impuestos por medio ambiente fuente de luz a ‘Color’
  • Anular la configuración automática lightmap ‘Generar’ casilla de verificación


    Importar El paquete de activos

    El paquete de activos suministrado contiene una selección de los componentes básicos diseñados para que pueda ponerse en marcha rápidamente. Para instalar el paquete, haga clic derecho en la carpeta ‘activos’ y seleccione ‘Importar paquete Paquete / personalizado’ A continuación, vaya al archivo que ha descomprimido antes.

    Contenido del paquete de activos …


    • Suelo objeto plano
    • El material molido
    • Textura de tierra
    • Reproductor objeto paralelepípedo
    • material de jugador
    • objeto de destino
    • material objetivo
    • textura de destino
    • imagen Indicador de la interfaz de usuario


      Adición juego de objetos a la escena

      Una escena vacía apenas se inspira, así que vamos a añadir algunos objetos del juego. Como se mencionó anteriormente, el paquete de activos contiene tres casas prefabricadas que han sido diseñados para caer directamente en la escena. Vamos a empezar arrastrando la ‘tierra’ y prefabricados ‘jugador’ de la ventana de jerarquía.


      Adición El primer objetivo prefabricada

      Antes de añadir el ‘Target (0)’ prefabricada, tenemos que crear un objeto de juego vacío denominado ‘objetivos’. Esta será la carpeta principal objetivo.


      • Haz clic derecho dentro de la ventana de jerarquía y seleccione ‘Crear vacío’
      • Cambie el nombre del objeto vacío a ‘objetivos’
      • Set la posición del objeto ‘objetivos’ a 0, 0, 0

        Ahora podemos arrastrar el ‘Target (0)’ prefabricada en objeto los nuevos ‘objetivos’


        Creación de blancos múltiples

        Vamos a necesitar más de un objetivo en la escena de lo que vamos a crear tres copias utilizando la función de duplicado …


        • Haga clic derecho sobre el ‘Target (0)’ objeto del juego y seleccione ‘Duplicar’
        • Repetir hasta que tenga cuatro, objetivo numeradas secuencialmente objetos


          Establecer un objetivo posiciones de objetos

          Si dejamos a los objetos de destino en sus ubicaciones predeterminadas del sistema objetivo sería prácticamente redundante, por lo que necesitaremos para mover cada uno a una posición diferente en el plano de tierra. En las imágenes de ejemplo los objetivos están colocados a distancias iguales alrededor del jugador, pero se puede decidir por sí mismo donde deben estar.


          Configuración de la cámara principal

          Más adelante en este tutorial crearemos un script cámara, pero primero tendremos que colocar la cámara principal detrás del jugador objeto y configurarlo de sacrificio de máscara …


          • Seleccione la cámara principal y fijar su posición a 0, 3, -12
          • valor de ajuste ‘claras las banderas’ a ‘color sólido’
          • Abrir el menú del ‘GameObject’ y seleccione ‘Alinear Vista al Seleccionado’


            Ajustes de la cámara principal

            Ahora vamos a preparar el sacrificio de la máscara de la cámara principal mediante la eliminación de la capa de la ‘interfaz de usuario’ de la lista render …


            • Abrir la cámara principal ‘Desvieje Máscara’ menú y anular la selección de la ‘interfaz de usuario’ capa


              La interfaz de usuario de la cámara

              Vamos a utilizar una segunda cámara para mostrar los elementos de la interfaz de usuario de lona, ​​así que haga clic derecho dentro de la ventana de jerarquía y seleccione ‘Cámara’. Cambiar el nombre de la nueva cámara a ‘UICamera’ y configurarlo de posición a 0, 0, 0


              Vamos a tener que ajustar la UICamera sacrificio de máscara para hacer sólo la capa de interfaz de usuario …


              • opción Establecer el UICamera ‘claras Banderas’ a ‘Profundidad Sólo’
              • Establecer la opción de UICamera ‘El sacrificio Máscara’ a ‘Nada’
              • Vuelva a seleccionar el menú ‘El sacrificio Máscara’ y seleccione ‘interfaz de usuario’


                En este punto se debe guardar la escena.

                añadir el componente lienzo

                Ahora tenemos que añadir un componente de la lona que se utiliza para mostrar el elemento indicador. Para ello, haga clic dentro de la ventana de jerarquía y seleccione ‘UI / lienzo. No dude en eliminar el componente ‘de sucesos del sistema’ que acompaña ya que es innecesaria para este proyecto.


                Lo siguiente que necesitamos para asignar nuestra UICamera estableciendo el lienzo ‘Render Mode’ a ‘espacio de pantalla – Cámara’. Y arrastrando la UICamera a la ranura ‘Render cámara’


                Ahora tenemos una cámara principal que muestra la capa por defecto y una cámara secundaria que mostrará los elementos de interfaz de usuario.

                A continuación, vamos a añadir el componente de la imagen indicador y el texto …

                interfaz de usuario para Indicadores

                • Haga clic derecho sobre el objeto del juego de la lona y seleccione ‘UI / Imagen’
                • Cambiar el nombre de la imagen de ‘indicador’
                • Haga clic derecho sobre la imagen ‘Indicador’ y seleccione ‘UI / texto’
                • Cambie el nombre del objeto de texto para ‘etiqueta’


                  Indicador imagen Configuración

                  • Seleccione el objeto Indicador
                  • Haga clic en el icono del círculo ‘Fuente de la imagen’ y seleccione ‘IndicatorTX’
                  • Valor de ajuste del ‘color’ a hexadecimal E5D44D
                  • Set el ‘Rect Transform’ de anchura y altura valores a 32


                    También es necesario establecer el punto indicador de anclaje utilizando las opciones ‘ancla Presets’ …


                    • Izquierda clic en el icono del ancla del ‘Inspector / Indicador’ y seleccione ‘Top Center’



                      • Cierre el panel de anclaje preestablecido
                      • Establecer el ‘Rect Transform’ posición a 0, -22, 0


                        Indicador de texto Configuración

                        Ahora vamos a configurar la etiqueta de texto que se utiliza para mostrar la distancia entre el objeto y el jugador de la posición de destino actual …


                        • Establecer la ‘etiqueta’ punto de anclaje del objeto a ‘Mejor Centro’
                        • Establecer la posición a 0, -42, 0
                        • Set el ancho a 100 y la altura a 20


                          Y vamos a ajustar las propiedades de texto …


                          • Cambiar el ‘texto’ texto a ‘0m’
                          • Establecer la alineación del párrafo a ‘Centro / Superior’
                          • Cambiar el color del texto a CCCCCC hexadecimal


                            En este punto se debe guardar la escena.

                            Estructura de carpetas de secuencias de comandos

                            Vamos a almacenar los scripts de proyectos en subcarpetas fácilmente identificables. Este es un buen hábito para adoptar, ya que mejora la legibilidad, especialmente cuando la creación de proyectos de mayor envergadura.

                            Empecemos creando un script carpeta madre …


                            • Haga clic derecho sobre los activos de la carpeta y seleccionar ‘Crear / carpeta’
                            • Cambiar el nombre de la carpeta a ‘Scripts’


                              Ahora vamos a añadir las subcarpetas …


                              • Crear tres subcarpetas y cambiarles el nombre ‘Cámara’, ‘Administrador’ y ‘jugador’, respectivamente


                                El script jugador

                                El script reproductor permite al usuario controlar el reproductor con un teclado estándar, joystick o gamepad. En la práctica, el eje de entrada se multiplica por un factor de velocidad preestablecida y usos de sincronización de cuadro para suavizar el movimiento.


                                • Haga clic derecho sobre la subcarpeta ‘Jugador’ y seleccione ‘Crear / C # script’
                                • nombre de la secuencia de comandos ‘PlayerControl’
                                • Haga doble clic en la secuencia de comandos para abrir el editor de código

                                  Introduzca el código siguiente en la secuencia de comandos ‘PlayerControl’ …
                                  utilizando UnityEngine; PlayerControl clase pública: MonoBehaviour {// privada Declaraciones flotador privada verticalInput; horizonatlInput flotador privado; playerSpeed ​​flotador privado; flotador privada rotationSpeed; // – vacío Inicio () {// Establecer valores predeterminados playerSpeed ​​= 10.0f; rotationSpeed ​​= 1.0f; } // – vacío Update () {// Obtener entrada del usuario desde el teclado Controlador de juego verticalInput / = Input.GetAxis ( «vertical»); horizonatlInput = Input.GetAxis ( «horizontal»); // Actualización de Posición del Jugador transform.Translate (0, 0, verticalInput * * playerSpeed ​​Time.deltaTime); // Actualización de Rotación del Jugador transform.rotate (0, horizonatlInput * rotationSpeed, 0); }} 1234567891011121314151617181920212223242526using UnityEngine; publicclassPlayerControl: MonoBehaviour {// privada DeclarationsprivatefloatverticalInput; privatefloathorizonatlInput; privatefloatplayerSpeed; privatefloatrotationSpeed; // –voidStart () {// Establecer predeterminado ValuesplayerSpeed ​​= 10.0f; rotationSpeed ​​= 1.0f;} // –voidUpdate () {// Obtener entrada del usuario desde el teclado / Juego ControllerverticalInput = Input.GetAxis ( «vertical»); horizonatlInput = Input.GetAxis ( «horizontal»); // actualización jugador Positiontransform.Translate (0,0, verticalInput * * Tiempo playerSpeed. DeltaTime); // actualización jugador Rotationtransform.Rotate (0, horizonatlInput * rotationSpeed, 0);}}

                                  • Guardar la secuencia de comandos y esperar a que la Unidad para compilar el código
                                  • Arrastre el guión en el objeto Player
                                  • Guardar la escena

                                    El script principal de la cámara

                                    El script principal de la cámara se alinea la cámara principal utilizando los valores de distancia y altura preestablecidos. La naturaleza suave del movimiento de la cámara se logra mediante interpolación sincronizado enmarcado.


                                    • Crea un nuevo C # script en el ‘Scripts / cámara’ carpeta
                                    • Cambiar el nombre del script para ‘FollowCam’
                                    • Haga doble clic en la secuencia de comandos para abrir el editor de código

                                      Introduzca el código siguiente en la secuencia de comandos ‘FollowCam’ …
                                      utilizando UnityEngine; FollowCam clase pública: MonoBehaviour pública {// declaraciones públicas Transform targetObject; flotador cameraDistance pública = 12.0f; flotador cameraHeight pública = 3.0f; int heightDamping pública = 3; int público rotationDamping = 3; // Declaraciones Privadas currentHeight flotador privado; currentAngle flotador privado; currentRotation Quaternion privado; // – LateUpdate vacío () {if retorno (targetObject!); // Incremento de la cámara Altura y ángulo currentHeight = Mathf.Lerp (transform.position.y, targetObject.position.y + cameraHeight, heightDamping * Time.deltaTime); currentAngle = Mathf.LerpAngle (transform.eulerAngles.y, targetObject.eulerAngles.y, rotationDamping * Time.deltaTime); // Llenar rotación Quaternion currentRotation = Quaternion.Euler (0, currentAngle, 0); // set Cámara Posición transform.position = targetObject.position; transform.position – = currentRotation * * Vector3.forward cameraDistance; transform.position = nuevo Vector3 (transform.position.x, currentHeight, transform.position.z); // Look At Target transform.LookAt (targetObject); }} 123456789101112131415161718192021222324252627282930using UnityEngine; publicclassFollowCam: MonoBehaviour {// Pública DeclarationspublicTransform targetObject; publicfloatcameraDistance = 12.0f; publicfloatcameraHeight = 3.0f; publicintheightDamping = 3; publicintrotationDamping = 3; // privada DeclarationsprivatefloatcurrentHeight; privatefloatcurrentAngle; privateQuaternion currentRotation; // –voidLateUpdate () {if (! targetObject) return; // cámara incremento en altura y AnglecurrentHeight = Mathf.Lerp (transform.position.y, targetObject.position.y + cameraHeight, heightDamping * Time.deltaTime); currentAngle = Mathf.LerpAngle (transform.eulerAngles .y, targetObject.eulerAngles.y, rotationDamping * Time.deltaTime); // Llenar rotación QuaternioncurrentRotation = Quaternion.Euler (0, currentAngle, 0); // set cámara Positiontransform.position = targetObject.position; transform.position- = currentRotation * * Vector3.forward cameraDistance; transform.position = newVector3 (transform.position.x, currentHeight, transform.position.z); // mirada en Tar gettransform.LookAt (targetObject);}}

                                      • Guardar la secuencia de comandos y esperar a que la Unidad para compilar el código
                                      • Arrastre el guión en el objeto principal de la cámara
                                      • Arrastre el objeto del jugador a la ranura FollowCam ‘Target Object’


                                        El script de destino Administrador

                                        El guión director de destino controla el indicador basado interfaz de usuario utilizando el vector de conversión del punto de vista. distancia lineal se calcula por una función de número entero de encargo mientras que el cálculo de la posición relativa se devuelve como un valor booleano que se utiliza para controlar el estado activo indicador.


                                        • Crea un nuevo C # script en el ‘Scripts / Director’ carpeta
                                        • Cambiar el nombre del script para ‘TargetManager’
                                        • Haga doble clic en la secuencia de comandos para abrir el editor de código

                                          Introduzca el código siguiente en la secuencia de comandos ‘TargetManager’ …
                                          utilizando UnityEngine; usando UnityEngine.UI; usando System.Collections.Generic; TargetManager clase pública: MonoBehaviour pública // declaraciones públicas {Transform playerReference; indicatorReference imagen pública; Lista pública TargetList; // Declaraciones Privadas privada Vector3 indicatorVector; textReference texto privado; targetRange int privado; targetIndex int privado; private bool targetValidated; // – vacío Awake () {// tienda Indicador de referencia de objetos de texto textReference = indicatorReference.GetComponentInChildren (); } // – void start () {// Establecer valores predeterminados targetIndex = 0; targetRange = 5; // Validar Lista de destino Count targetValidated = targetList.Count> 0; } // – LateUpdate vacío () {// Comprobar si Estado del jugador (targetValidated) {if (LinearDistance (playerReference.position, TargetList [targetIndex] .position) 0; }} 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071using UnityEngine; usando UnityEngine.UI; usando System.Collections.Generic; publicclassTargetManager: MonoBehaviour {// Pública DeclarationspublicTransform playerReference; Publicimage indicatorReference; publicList TargetList; // privada DeclarationsprivateVector3 indicatorVector; privateText textReference; privateinttargetRange; privateinttargetIndex; privatebooltargetValidated ; // –voidAwake () {// tienda de objetos de texto Indicador ReferencetextReference = indicatorReference.GetComponentInChildren ();} // –voidStart () {// Establecer predeterminado ValuestargetIndex = 0; targetRange = 5; // Validar Lista de destino CounttargetValidated = targetList.Count> 0;} // –voidLateUpdate () {// Comprobar jugador Statusif (targetValidated) {if (LinearDistance (playerReference.position, TargetList [targetIndex] .position) 0;}}

                                          • Guardar la secuencia de comandos y esperar a que la Unidad para compilar el código
                                          • Arrastre el objeto guión en juego los ‘objetivos’

                                            Ahora vamos a añadir referencias de componentes a la secuencia de comandos de destino Administrador …


                                            • Arrastre el objeto ‘Jugador’ a la ranura de la ‘Jugador Referencia’
                                            • objeto Arrastre el ‘indicador’ interfaz de usuario a la ranura de la ‘Indicador de referencia’
                                            • Haga clic izquierdo para abrir el campo ‘Lista de destinos’ y establecer el tamaño de 4
                                            • Arrastra cada objetivo a la ‘Lista de destino’ ranura correspondiente


                                              Prueba El Proyecto

                                              Para comprobar que todo está trabajando como se espera, haga clic en el botón ‘Play’ y utilice las teclas de flecha para mover el jugador hacia el indicador de blancos. Cuando estás dentro del alcance del objetivo actual del indicador cambiará a la siguiente objetivo. El bucle de indicador de objeto voluntad a través de los objetos de destino disponibles.


                                              Conclusión

                                              En la parte 2 de esta serie de tutoriales, vamos a actualizar el proyecto con la optimización del código, múltiples indicadores, puntos de referencia definidos por el usuario y las bibliotecas de vínculos dinámicos personalizados. El proyecto terminado le permitirá crear un sistema totalmente portátil para su uso en sus propias creaciones

                                              Mensajes relacionados

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *