Introducción

En este segundo tutorial, vamos a ser la creación de un sistema multi-indicador basado en los métodos básicos que empleamos en la Parte 1. Este proyecto actualizado incluirá una biblioteca dinámica personalizada enlace, control de indicadores múltiples, y los sprites de usuario de interfaz de usuario definibles.

Requisitos Tutorial

Para completar este tutorial, se le requiere una comprensión básica de la Unidad y el flujo de trabajo de Visual Studio.

El paquete de activos

Para evitar repeticiones innecesarias, el nuevo paquete de activos contiene una escena preconfigurada y varios componentes adicionales. Puede descargar los activos aquí. Descomprimir el paquete, hacer una nota de la ubicación.

Uso de activos

Los componentes son liberados bajo la ‘idea 0’ licencia.

No se pierda! extremos de la oferta en

  • Accede a los más de 200 cursos
  • Nuevos cursos añadió mensual
  • Cancelar en cualquier momento
  • Los certificados de terminación

    ACCESO ahora

    El Proyecto Unidad

    Vamos a empezar por la creación de un nuevo proyecto llamado Unidad ‘Indicator_System_Part_2’


    A continuación vamos a importar el paquete de activos que ha descargado antes …


    • Haz clic derecho dentro del ‘Proyecto / Activos’ panel
    • Seleccione ‘Importar paquete Paquete / personalizado’
    • Busque y seleccione el paquete ‘’ IndicatorSystem_02_Assets
    • Haga clic en ‘Abrir’ para mostrar el ‘Paquete Unidad de importación’ ventana
    • Haga clic en ‘Importar’


      Ahora vamos a abrir la escena preconfigurada …


      • Abra el ‘Proyecto / Activos / escenas’ carpeta
      • Haga doble clic en la escena ‘IndicatorSystem’


        Para terminar el conjunto escena hasta vamos a alinear la vista de la escena para que coincida con la opinión de la cámara principal …


        • Seleccione la opción ‘Cámara principal’ en la ‘jerarquía’ panel
        • Abrir el menú del ‘GameObject’ y seleccione ‘Alinear Vista al Seleccionado’

          Y, por último, vamos a eliminar la escena predeterminada redundante …


          • Abra los ‘activos / escenas’ carpeta
          • Haz clic derecho en la ‘SampleScene’ y seleccione ‘Borrar’
          • Haga clic en ‘Sí’ para confirmar
          • Guardar la escena

            Se puede cerrar la unidad por lo que estaremos de cambiar a Visual Studio para crear la biblioteca de vínculos dinámicos.

            La biblioteca de vínculos dinámicos

            Se puede pensar en las bibliotecas de vínculos dinámicos como los recipientes portátiles para las funciones, instrucciones y recursos. Aparte de su inherente facilidad de despliegue, que ofrecen varias ventajas adicionales en comparación con las bibliotecas de vínculos estáticos.


            • formato modular portátil
            • Memoria eficiente
            • requisitos de espacio de disco reducido
            • reutilizable a través de proyectos
            • Acceso proceso simultáneo

              Visual Studio Instalación

              Vamos a utilizar Visual Studio para crear nuestra DLL. Si no está presente en su ordenador, puede instalarlo a través de la lista de instalación de la unidad.


              Crear el proyecto de Visual Studio

              Antes de abrir Visual Studio, cree una carpeta principal para nuestra biblioteca …


              • Crear una carpeta llamada ‘red de Bibliotecas’ en un lugar accesible como el escritorio

                Ahora podemos empezar a crear el proyecto VS …


                • Lanzamiento de Visual Studio
                • Abra el menú [BP] ‘Archivo’ y seleccione ‘Nuevo proyecto /’


                  Para garantizar la compatibilidad con versiones anteriores de Unity, vamos a utilizar una clase de .NET Framework.


                  • Seleccione el ‘Visual C # / biblioteca de clases (.NET Framework)’ opción
                  • Introduzca ‘IndicatorSystem’ en el campo de nombre
                  • Haga clic en la ubicación ‘Examinar’ botón
                  • Vaya a la ‘red’ Bibliotecas carpeta que creó anteriormente
                  • Haga clic en ‘Seleccionar carpeta’
                  • campo Establecer el ‘marco’ a ‘.NET Framework 3.5’
                  • Haga clic en ‘Aceptar’ para crear el proyecto


                    Visual Studio creará el nuevo proyecto en la carpeta ‘netas’ Libaries y abrir la ventana de instrucciones de clase …


                    añadir referencias Unity

                    Vamos a tener que agregar un par de referencias unidad al proyecto …


                      menú y

                    • Abra el ‘Proyecto’ seleccionar ‘Agregar referencia’

                      Si usted ha accedido a las bibliotecas del motor de la unidad y de la unidad de interfaz de usuario antes, van a ser listadas en la lista del Administrador de referencia. Si no es así, tendrá que añadir a cada componente de forma manual …



                      • Haga clic en ‘Examinar’ del Reference Manager botón
                      • Vaya a cada lugar, a su vez
                      • Haga clic en ‘Aceptar’ para agregar cada referencia

                        Una vez que ambas bibliotecas aparecen en la lista del Administrador de la referencia, puede añadirlos a su proyecto …


                        • Seleccione las dos bibliotecas y haga clic en ‘Aceptar’
                        • Guardar el proyecto


                          Configuración de exportación de marcas

                          Antes de comenzar secuencias de comandos, vamos a establecer la configuración de exportación de clase …


                          • Abra el menú ‘Build’ y seleccione ‘Administrador de configuración’
                          • Establecer el campo ‘configuración de la solución activa’ a ‘Release’
                          • Tipo de Juego ‘Configuración’ a ‘Release’
                          • Haga clic en ‘Cerrar’
                          • Guardar el proyecto


                            La biblioteca de secuencias de comandos Indicador

                            La biblioteca de la escritura ‘indicador’ se encarga de la interfaz de usuario en la pantalla de indicadores mediante el seguimiento de la posición del jugador objeto en relación con cada posición de destino. Conversión de puntos de la lona es manejado por la función ‘UpdatePosition’ que también actualiza el estado activado de cada objetivo y la posición de la interfaz de usuario.


                            • Borrar el código de clase existente
                            • Introduzca la siguiente secuencia de comandos

                              using System; usando UnityEngine; usando UnityEngine.UI; IndicatorSystem espacio de nombres {// Crear Clase [Serializable] public class IndicatorClass {[HideInInspector] Indicador Objetivo imagen pública; [HideInInspector] La etiqueta de texto público; Transformar público objetivo; Sprite pública en sprites el color del color pública; bool pública habilitada; } // – clase estática pública Indicador {private static // Declarar alineación vector Vector3 alignmentVector; // – Actualización de la función estática public void UpdatePosition (Transform jugador, IndicatorClass [] oc) {// Recurse Objetivo foreach Clase Elementos (IndicatorClass elemento en oc) {element.indicator.gameObject.SetActive (relativePosition (jugador, element.target, element.enabled)); // Conjunto de Indicadores de Estado si (element.indicator.gameObject.activeInHierarchy) {element.label.text = LinearDistance (player.position, element.target.position) + «M»; // Convertir Posición objetivo Para Viewport Punto alignmentVector = element.indicator.rectTransform.anchorMin; alignmentVector.x = Camera.main.WorldToViewportPoint (element.target.position) .x; // Indicador de actualización de la posición element.indicator.rectTransform.anchorMin = alignmentVector; element.indicator.rectTransform.anchorMax = alignmentVector; }}} // – LinearDistance flotación estática privada (Vector3 playerPosition, Vector3 TargetPosition) {// Cero eje Y Coordenadas playerPosition.y = 0; targetPosition.y = 0; // Retorno lineal Distancia retorno Mathf.Round (Vector3.Distance (playerPosition, TargetPosition)); } // – private static bool relativePosition (Transform jugador, Transformar objetivo, el estado bool) {// Retorno de Null jugador / Null Objetivo Elemento / minusválidos if (!!! Jugador || || objetivo de estado) {falsa retorno; } // Volver relativa posición de Boole retorno Vector3.Dot (Vector3.forward, player.InverseTransformPoint (target.position) .normalized)> 0; } // – public static bool (Lona, indicador de Imagen, IndicatorClass [] oc) PopulateClass {// Indicador de retorno de la Null lona / null Clase / if (lienzo || indicador!) {Falsa retorno; } /// Instantiate Indicador Componentes / foreach (IndicatorClass elemento en oc) {Image indicatorClone = UnityEngine.Object.Instantiate (indicador, canvas.GetComponentInChildren ()); indicatorClone.color = element.color; indicatorClone.sprite = element.sprite; // Llenar elementos de la clase objetivo element.label = indicatorClone.GetComponentInChildren (); element.indicator = indicatorClone; } // Volver Estructura de validación return true; }}} 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576using System; usando UnityEngine; usando UnityEngine.UI; namespaceIndicatorSystem {// Crear clase publicclassIndicatorClass {[HideInInspector] indicador Publicimage [Serializable] Objetivo; [HideInInspector] publicText etiqueta; objetivo publicTransform; publicSprite de sprite, el color publicColor; publicboolenabled;} // –publicstaticclassIndicator {// Declarar alineación VectorprivatestaticVector3 alignmentVector; // – actualización FunctionpublicstaticvoidUpdatePosition (Transform jugador, IndicatorClass [] oc) {// Recurse Objetivo Clase Elementsforeach (IndicatorClass INOC elemento) {element.indicator.gameObject.SetActive (relativePosition (jugador, element.target, element.enabled)); // Conjunto Indicador Statusif (element.indicator.gameObject.activeInHierarchy) {element.label.text = LinearDistance (player.position, element.target.position) + «m» ; // Convertir Posición objetivo Para Viewport Pointalignmen tVector = element.indicator.rectTransform.anchorMin; alignmentVector.x = Camera.main.WorldToViewportPoint (element.target.position) .x; // Indicador de actualización Positionelement.indicator.rectTransform.anchorMin = alignmentVector; element.indicator.rectTransform.anchorMax = alignmentVector;}}} // –privatestaticfloatLinearDistance (Vector3 playerPosition, Vector3 TargetPosition) {// Zero eje Y CoordinatesplayerPosition.y = 0; targetPosition.y = 0; // Volver Linear DistancereturnMathf.Round (Vector3.Distance (playerPosition, TargetPosition ));} // –privatestaticboolRelativePosition (Transform jugador, Transformar objetivo, boolstatus) {// Retorno de Null jugador / Null objetivo / minusválidos Elementif (reproductor || || objetivo de estado) {returnfalse;!!!} // Retorno Posición relativa BooleanreturnVector3.Dot (Vector3.forward, player.InverseTransformPoint (target.position) .normalized)> 0;} // –publicstaticboolPopulateClass (lona, ​​indicador de imagen, IndicatorClass [] oc) {// Retorno de Null lona / indicador nulo / nulo Clasif (! || lona! indicador) {return false;} /// Instantiate Indicador Componentes / foreach (IndicatorClass INOC elemento) {indicatorClone Image = UnityEngine.Object.Instantiate (indicador, canvas.GetComponentInChildren ()); indicatorClone.color = element.color; indicatorClone.sprite = element.sprite; // Llenar Objetivo Clase Elementselement.label = indicatorClone.GetComponentInChildren (); element.indicator = indicatorClone;} // Volver Estructura Validationreturntrue;}}}

                              construcción de la librería

                              Una vez que haya introducido el código y se guardó el proyecto que es hora de construir la biblioteca …


                              • Abra el menú ‘Build’ y seleccione ‘Construir IndicatorSystem’
                              • La ventana ‘Salida’ se abrirá para mostrar el progreso de construcción

                                Una vez que el proyecto ha sido recopilada debe recibir la siguiente confirmación …


                                Si recibe un mensaje de error, compara el código con el guión original, como las modificaciones necesarias y repita el proceso de construcción. Pero si todo va bien, que ha creado con éxito la biblioteca de vínculos dinámicos.


                                • Guardar el proyecto
                                • Cierre Visual Studio

                                  Importar La Biblioteca

                                  La librería de enlace dinámico que ha creado será el núcleo del proyecto Unity por lo que debe ser importado antes de crear secuencias de comandos que se basan en las funciones personalizadas.


                                  • Lanzamiento de la Unidad
                                  • Abra su ‘Indicator_System_Part_2’ proyecto

                                    Ahora vamos a crear un nuevo activo carpeta …


                                    • Haz clic derecho en el panel de ‘activos’
                                    • Seleccione ‘Create / carpeta’
                                    • Cambiar el nombre de la carpeta de ‘plugins’

                                      El archivo DLL se puede importar utilizando el método estándar …


                                      • Haz clic derecho en la ‘plugins’ carpeta
                                      • Seleccione ‘Importar nuevo activo’
                                      • Navegar hasta su ‘Net Bibliotecas’ carpeta
                                      • Analizar a la ‘obj / Release’ carpeta
                                      • Seleccione el componente ‘IndicatorSystem.dll’
                                      • Haga clic en ‘Importar’
                                      • Aparecerá el panel de importación DLL de configuración


                                        Los Scripts del proyecto

                                        El proyecto requiere de guiones para la cámara, reproductor y gestor de indicador. Todos los guiones incluyen comentarios descriptivos.

                                        La Cámara de secuencias de comandos


                                        • Abra la ‘Activos / Scripts / cámara’ carpeta
                                        • Haga doble clic en el guión ‘FollowCam’ para abrir el editor de scripts
                                        • Eliminar el código existente
                                        • Introduzca el siguiente código …

                                          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
                                          • Arrastre el ‘FollowCam’ en objeto de juego de la ‘Cámara principal’

                                            Vamos a tener que agregar una referencia de objeto ‘Jugador’ de la secuencia de comandos ‘FollowCam’ …


                                            • Seleccione el objeto ‘Cámara principal’
                                            • Haga clic en el ‘Inspector / FollowCam / Objeto de destino’ seleccionar el icono
                                            • Haga doble clic en el objeto del juego el ‘jugador’


                                              The Script jugador


                                              • Abra la ‘Activos / Scripts / Jugador’ carpeta
                                              • Haga doble clic en el guión ‘PlayerMotion’ para abrir el editor de scripts
                                              • Eliminar el código existente
                                              • Introduzca el siguiente código …

                                                utilizando UnityEngine; PlayerMotion clase pública: MonoBehaviour {// privada Declaraciones flotador privada verticalInput; horizontalInput flotador privado; // declaraciones públicas flotación pública motionSpeed ​​= 10.0f; flotación pública rotateSpeed ​​= 90.0f; // – vacío Update () {// Asignar entrada de usuario verticalInput = Input.GetAxis ( «vertical») * * Time.deltaTime motionSpeed; horizontalInput = Input.GetAxis ( «horizontal») * Time.deltaTime * rotateSpeed; // Aplicar movimiento / rotación si transform.Translate {(0, 0, verticalInput) (horizontalInput.Equals (0) || verticalInput.Equals (0)!); transform.rotate (0, horizontalInput, 0); }}} 12345678910111213141516171819202122using UnityEngine; publicclassPlayerMotion: MonoBehaviour {// privada DeclarationsprivatefloatverticalInput; privatefloathorizontalInput; // DeclarationspublicfloatmotionSpeed ​​Pública = 10.0f; publicfloatrotateSpeed ​​= 90.0f; // – voidUpdate () {// El usuario Asignar InputverticalInput = Input.GetAxis ( «Vertical «) * * Time.deltaTime motionSpeed; horizontalInput = Input.GetAxis (» horizontal «) * * Time.deltaTime rotateSpeed;! // Aplicar movimiento / Rotationif (horizontalInput.Equals (0)! || verticalInput.Equals (0)) {transform.Translate (0,0, verticalInput); transform.rotate (0, horizontalInput, 0);}}}

                                                • Guardar la secuencia de comandos
                                                • Arrastre el guión ‘PlayerMotion’ en objeto de juego el ‘jugador’


                                                  The Script Objetivo Administrador

                                                  Las referencias Script Manager objetivo la ‘IndicatorSystem.dll’ y serializa el panel inspector de configuración de usuario.


                                                  • Abra la ‘Activos / Scripts / Director’ carpeta
                                                  • Haga doble clic en el guión ‘TargetManager’ para abrir el editor de scripts
                                                  • Eliminar el código existente
                                                  • Introduzca el siguiente código …

                                                    utilizando UnityEngine; usando UnityEngine.UI; usando IndicatorSystem; TargetManager clase pública: MonoBehaviour {// declaraciones públicas pública lienzo canvasReference; indicatorReference imagen pública; Transformar pública playerReference; // Referencia de la Clase pública IndicatorClass [] indicatorClass; // Declaraciones privado private bool classValidated; // –void Start () {// Llenar Indicador Clase / Volver Validación classValidated = Indicator.PopulateClass (canvasReference, indicatorReference, indicatorClass); } // – LateUpdate vacío () {// Función de invocación Actualizarsi (classValidated) {Indicator.UpdatePosition (playerReference, indicatorClass); }}} 123456789101112131415161718192021222324252627using UnityEngine; usando UnityEngine.UI; usando IndicatorSystem; publicclassTargetManager: MonoBehaviour {// Pública DeclarationspublicCanvas canvasReference; Publicimage indicatorReference; publicTransform playerReference; // Clase ReferencepublicIndicatorClass [] indicatorClass; // privada DeclarationsprivateboolclassValidated; // –voidStart () {// Llenar Indicador Clase / Volver ValidationclassValidated = Indicator.PopulateClass (canvasReference, indicatorReference, indicatorClass);} // –voidLateUpdate () {// Invocar actualización Functionif (classValidated) {Indicator.UpdatePosition (playerReference, indicatorClass);}} }

                                                    • Guardar la secuencia de comandos
                                                    • Arrastre el guión ‘TargetManager’ en objeto de juego los ‘objetivos’
                                                    • Seleccione el objeto ‘objetivos’ juego
                                                    • Tamaño Configurar el ‘Inspector / Target Gerente / Indicador de clase’ a ‘4’
                                                    • Abra cada elemento ‘Indicador de clase’


                                                      Gestor de configuración de destino

                                                      Tenemos que añadir referencias a la secuencia de comandos del gestor de destino. El sistema indicador no funcionará si encuentra una referencia nula.

                                                      Canvas Referencia


                                                      • Haga clic en la selección del ‘Canvas Referencia’ icono
                                                      • Haga doble clic para seleccionar el objeto de juego ‘lienzo’

                                                        Indicador de referencia


                                                        • Arrastre el ‘Activos / Prefabs / Indicador’ prefabricada a la ranura de la ‘Indicador de referencia’

                                                          Reproductor de referencia


                                                          • Haga clic en la selección del ‘jugador de referencia’ icono
                                                          • Haga doble clic para seleccionar el ‘jugador’ objeto juego

                                                            Referencias objetivo


                                                            • Haga clic en la selección de cada ‘Elemento / Target’ icono
                                                            • Haga doble clic para seleccionar el objeto del juego correspondiente ‘Target’

                                                              Sprite Referencias


                                                              • Haga clic en la selección de cada ‘Elemento / Sprite’ icono
                                                              • Haga doble clic para seleccionar su opción de sprites indicador
                                                              • Guardar la escena

                                                                La paleta de colores personalizada

                                                                El ‘Activos / Editor’ contiene un componente ‘IndicatorPalette’, que contiene una selección de colores de ejemplo para su uso con los sprites de interfaz de usuario.


                                                                • Haga clic en el ‘elemento 0 / Color’ campo para abrir el ‘Selector de color’
                                                                • Izquierda haga clic en el ‘Selector Paleta’
                                                                • Seleccione la opción ‘IndicatorPalette (Proyecto)’
                                                                • Elija un color para cada elemento


                                                                  Indicador opción activada


                                                                  • Activar todas las opciones de los elemento / enabled ‘
                                                                  • Guardar la escena


                                                                    Pruebas La escena

                                                                    Después de haber hecho a través de este tutorial final, se le complace saber que ahora estamos listos para poner a prueba el proyecto!


                                                                    • ‘Play’ Pulse el icono de la unidad
                                                                    • Utilice las teclas de flecha para mover el objeto jugador alrededor de la escena

                                                                      Si los 4 indicadores objetivos son visibles y la información de la distancia es válida, entonces usted ha tenido éxito. Si no hay indicadores visibles, verificar las referencias de script «Destino del Administrador para asegurarse de que están bien asignadas.

                                                                      Implementación del sistema

                                                                      Una vez configurado, el sistema indicador funciona de forma automática, pero se puede ajustar el estado activado de cualquier indicador de secuencia de comandos.

                                                                      ‘indicatorClass [índice] .enabled = verdadero / falso’

                                                                      Véanse las observaciones de guión «Destino del Administrador de información despliegue completo.

                                                                      Conclusión

                                                                      Así que eso es todo por ahora: ahora hemos terminado este proyecto que le permite crear un sistema de indicadores múltiples totalmente portátil para su uso en sus propias creaciones. Nos ascendieron desde los métodos básicos empleados por última vez, para incluir una biblioteca dinámica personalizada enlace, control de indicadores múltiples, y los sprites de usuario de interfaz de usuario definibles. Espero que hayan disfrutado este tutorial, lo encontró muy útil, y que pueda ser útil para sus juegos. Por favor comparta sus pensamientos en los comentarios abajo por debajo gratuita – de lo contrario, hasta la próxima vez .

                                                                      Mensajes relacionados

Deja una respuesta

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