Ilustraciones del fractal utilizada bajo la licencia GPL 3.0 de http://opengameart.org/content/fractal-alien-landscape-pack
Enlace de descarga para proyecto completo Enlace aquí.

Tabla de contenidos
convertirse en un desarrollador de juegos vr profesional con la unidad

Pre-Order The Complete Realidad Virtual desarrollo del juego con Unity y aprender a crear juegos y experiencias de inmersión mediante la construcción de 10 juegos de realidad virtual. El curso asume ninguna experiencia previa Unidad o VR – Te enseñaremos C #, la Unidad y la programación 3D de la tierra-para arriba

comprobarlo en Zenva Academia y obtener acceso temprano!

Hoy en día, vamos a tomar el concepto de diseño que hicimos en la parte 1 y en realidad estar desarrollando el juego. Mientras que este juego no será de calidad AAA, mostrará los fundamentos del diseño y la implementación juego. Vamos a utilizar los conceptos aprendidos de todos mis tutoriales anteriores, de alguna manera, forma o forma de estar creando este juego. Por ejemplo; podríamos utilizar formato JSON o XML para guardar datos, algoritmos para los misiles que vuelan hacia el reproductor de direcciones al azar, y mucho más.
Hoy en día, nos centraremos en el juego principal para este juego. Eso significa, que van a trabajar en una sola escena. También vamos a poner en práctica únicamente los scripts necesarios para obtener el juego base a plazo.
Espero que estén tan emocionados como yo por este tutorial. Ha habido bastantes meses y tutoriales para dar lugar a éste. Por lo tanto, vamos a saltar a la derecha en en y comenzar a desarrollar este juego tan esperado.

Parte 1: Configuración del juego esqueleto

Éste debe ser bastante obvio para todos nosotros ahora. Necesitamos primer conjunto conforman el esqueleto de todo el proyecto dentro del editor Unity3D. Esto puede ser tan completa como quiera que sea, pero me gustaría empezar con lo esencial. Lo esencial son los guiones, arte, casas prefabricadas, y carpetas de escena.

1

El siguiente, tomamos toda la materia que nos hemos reunido / creado y colocarlos en la carpeta de arte. Esto incluye el chorro de voxel, misil voxel, y el arte fractal del arte partido abierto.

2

Ahora guarda nuestra base de escena y lo llaman “Juego Pantalla de reproducción”.

3

Bien, ahora podemos configurar nuestros scripts esqueleto que puede o no puede utilizar plenamente la hora de crear el juego. Las secuencias de comandos que necesitamos son límite, el controlador de jugador, el controlador de misiles, destruir misiles, y el plano de desplazamiento.

4

Ahora debe configurar nuestras casas prefabricadas, casas prefabricadas nuestros consistirán en la nave de jugador y el misil en el momento actual. Esta es la forma en que deben ser escalados y el aspecto.

5

Ahora elimine el prefabricada misil desde el panel de jerarquías. Todavía debe estar en la carpeta de casas prefabricadas, asegúrese de no eliminarlo.

6

En la carpeta de arte, subdirectorio fractal; Asegúrese de que la textura fractal se establece en la textura, el modo de ajuste de repetición, y un modo de filtro de trilineal. El nombre de la textura que va a utilizar es el humo del fractal.

7

Crea un plano que es 100 x 100 x 100, aparato de posición y a -38,23, la posición z en 545.27. Adjuntar la imagen fractal denominado humo fractal para el avión.

8

Nuestro juego base esqueleto está completo. Ahora podemos empezar a trabajar en el juego en sí. Aquí es donde comienza la diversión!

Parte 2: La elección de dónde empezar

Antes de que podamos avanzar, tenemos que decidir si el extremo posterior o frontal es de la mayor importancia. Una persona en base visual puede decidir ir con el extremo delantero primero y el trabajo a continuación, en la parte final. Una persona con una mente y un don para el resumen irá con la parte final primera. Hemos de ir con extremo posterior en primer lugar porque es el estándar de la industria. Es el estándar de la industria, porque el arte, la música y los mecánicos pueden cambiar a lo largo del proceso de desarrollo; Volver final se puede escalar fácilmente y modificado para adaptarse a las nuevas ideas mientras extremo delantero tendrá que luchar con ella.

Con este juego, la parte final será la creación de los límites del juego, el controlador de misiles, el controlador de jugador, regulador de fondo, y el script de destrucción. Por lo tanto, antes de saltar en el código, hay que especificar esta información.
Sección 1: Límites juego

Dado que sabemos que este es un juego de vuelo sin fin, no queremos que el jugador se mueva demasiado hacia la izquierda, derecha, arriba o abajo pero nosotros queremos que tengan suficiente libertad de circulación que se puede esquivar los obstáculos. Así que vamos a dar a estos un valor aproximado de 10, podemos modificar estos valores según sea necesario cuando se prueba el juego más adelante.

Izquierda X tiene un valor máximo de -10.
X derecha tiene un valor máximo de 10.
Superior y tiene un valor máximo de 10.
Baja Y tiene un valor máximo de -10.

Dado que sabemos que esto será en una clase propia, sino que también hay que asegurarse de que la clase se fija para tener la capacidad de ser serializado.
utilizando UnityEngine; usando System.Collections; [System.Serializable] public class límite {float pública xMin, xMax, yMin, yMax;} 12345678using UnityEngine; usando System.Collections; [System.Serializable] publicclassBoundary {publicfloatxMin, xMax, yMin, yMax ;}

System.Serialializable ser unido a esta clase nos permitirá modificar los datos en la clase que llama a éste en el editor de Unity. Más sobre esto más adelante.

Sección 2: Controlador jugador

El controlador jugador sólo necesita almacenar los métodos para mover al jugador por la pantalla.
utilizando UnityEngine; utilizando System.Collections; PlayerController clase pública: MonoBehaviour {límite pública de Límites; StiffBody cuerpo rígido pública; la inclinación flotación pública; velocidad de flotación pública; vacío Update () {var = Input.GetAxis horizontal ( «horizontal»); var vertical = Input.GetAxis ( «vertical»); movimiento Vector3 = nuevo Vector3 (horizontal, vertical, 0f); stiffBody.velocity = movimiento * velocidad; stiffBody.position = nuevo Vector3 (Mathf.Clamp (stiffBody.position.x, boundary.xMin, boundary.xMax), Mathf.Clamp (stiffBody.position.y, boundary.yMin, boundary.yMax)); stiffBody.rotation = Quaternion.Euler (0.0f, 0.0f, stiffBody.velocity.x * -Inclinación); }} 123456789101112131415161718192021222324252627using UnityEngine; usando System.Collections; publicclassPlayerController: MonoBehaviour {publicBoundary límite; publicfloattilt;; publicRigidbody stiffBody publicfloatspeed; voidUpdate () {varhorizontal = Input.GetAxis ( «horizontal»); varvertical = Input.GetAxis ( «vertical»); movimiento Vector3 = newVector3 (horizontal, vertical, 0f); stiffBody.velocity = movimiento * velocidad; stiffBody.position = newVector3 (Mathf.Clamp (stiffBody.position.x, boundary.xMin, boundary.xMax), Mathf.Clamp (stiffBody .position.y, boundary.yMin, boundary.yMax)); stiffBody.rotation = Quaternion.Euler (0.0f, 0.0f, stiffBody.velocity.x * -Inclinación);}}

Como se puede ver, denominada clase de límite en el controlador de jugador, aunque no hemos especificado los datos directamente en el código. Es posible que no estén familiarizados con la aplicación de la Vector3 que tenemos en este código.
Esto nos permite afirmar más explícitamente lo que queremos el vector 3 valores sean, ya que sólo tengo 2 artículos en el mismo, el valor predeterminado es Vector3 (float x, y) de flotador. Mathf.Clamp le permite para fijar un valor entre un flotador valor mínimo y máximo de flotación. Quaternion.Eurler se utiliza para devolver una rotación que gira z grados alrededor del eje z, grados alrededor del eje x, ey grados alrededor del eje Y x (en ese orden).
Sección 3:. Misil Controller

El controlador misil albergará los métodos y algoritmos para cuándo y cómo se generan los misiles
utilizando UnityEngine; utilizando System.Collections; public class MissileController: MonoBehaviour {peligro GameObject pública; flotador privada spawnWait = 1f; void start () {StartCoroutine (SpawnWaves ()); } IEnumerator SpawnWaves () {while (true) {var xMinMax = Random.Range (-15F, 20f); Vector3 spawnPosition = nuevo Vector3 (xMinMax, 10f, 25f); Quaternion spawnRotation = Quaternion.Euler (nuevo Vector3 (90f, 0f, 0f)); Instantiate (peligro, spawnPosition, spawnRotation); retorno rendimiento nuevos WaitForSeconds (spawnWait); spawnWait – = 0.01f; si (spawnWait <0.05f) spawnWait = 0.05f; }}} 12345678910111213141516171819202122232425262728using UnityEngine; usando System.Collections; publicclassMissileController: Riesgo de MonoBehaviour {publicGameObject; privatefloatspawnWait = 1f; voidStart () {StartCoroutine (SpawnWaves ());} SpawnWaves IEnumerator () {while (true) {varxMinMax = Random.Range ( -15F, 20f); Vector3 spawnPosition = newVector3 (xMinMax, 10f, 25f); Quaternion spawnRotation = Quaternion.Euler (newVector3 (90f, 0f, 0f)); Instantiate (peligro, spawnPosition, spawnRotation); returnnewWaitForSeconds rendimiento (spawnWait); spawnWait- = 0.01f; si (spawnWait <0.05f) spawnWait = 0.05f;.}}}

IEnumerator es la versión de la unidad de programación en paralelo y se supone que se utilizará en conjunción con StartCoRoutine

Sección 4: destruir objetos

Ahora necesitamos una manera de asegurarse de que el buque jugador y el misil que golpeó la nave es destruida cuando se ha detectado la colisión. También queremos para asegurarse de que serán automáticamente destruidos los misiles generados después de que haya pasado un cierto tiempo.
utilizando UnityEngine; utilizando System.Collections; DestroyMissile clase pública: MonoBehaviour {float vida pública; vacío Inicio () {Destruir (GameObject, toda la vida); } Void OnTriggerEnter (Colisionador de otra) {Destruir (other.gameObject); Destruye (GameObject); }} 123456789101112131415161718using UnityEngine; usando System.Collections; publicclassDestroyMissile: MonoBehaviour {publicfloatlifetime; voidStart () {Destruir (GameObject, tiempo de vida);} voidOnTriggerEnter (Colisionador otra) {Destruir (other.gameObject); Destruye (GameObject);}}

tenemos 2 destruir las capacidades separadas en este código. La primera de ellas, en el interior del método Start destruirá el objeto específico del juego en el marco de tiempo adecuado que especificaremos como 5 segundos. OnTriggerEnter se llama cuando el otro entra Colisionador el gatillo. Básicamente, cuando uno de los objetos especificados chocan con un objeto diferente o otro objeto del mismo tipo; El objeto se destruye.
Sección 5: Adición de vida al fondo

debe hacerlo de modo que nuestro avión con los rollos de imágenes fractales para simular una nave voladora. Se añade un poco de vida al juego, aunque no es 100% necesario. Hay dos maneras que podríamos hacer esto, uno se lo conecta a el movimiento del jugador o mediante la creación de un script para manejarlo solo. Yo he optado por la secuencia de comandos independiente debido al hecho de que el jugador se supone que esquivar los obstáculos y no va a estar constantemente en movimiento.
utilizando UnityEngine; utilizando System.Collections; public class ScrollPlane: MonoBehaviour {MeshRenderer pública rend; flotador privada Scrollspeed = 0.5F; vacío Inicio () {rend = getComponent (); Actualización} void () {float compensado = -Time.time * Scrollspeed; rend.material.SetTextureOffset ( «_ MAINTEX», nueva Vector2 (0, offset)); }} 12345678910111213141516171819using UnityEngine; usando System.Collections; publicclassScrollPlane: MonoBehaviour {publicMeshRenderer rend; privatefloatscrollSpeed ​​= 0.5F; voidStart () {rend = getComponent ();} voidUpdate () {floatoffset = -Time.time * Scrollspeed; rend .material.SetTextureOffset ( «_ MAINTEX», newVector2 (0, offset));.}}

Ahora que tenemos un poco de nuestra parte final hecho, vamos a empezar la construcción de ésta con Unity

Parte 3: Uso de la Unidad de construir el juego

La parte divertida está a punto de comenzar, ahora vamos a adjuntar secuencias de comandos para su legítimo y de prueba para asegurarse de que todo funciona según lo previsto. Todos sabemos que los errores pueden suceder o artículos podrían ser colocado en el área correcta.
Paso 1:

Una el guión jugador a chorro. Queremos que el jugador controle el Jet, también queremos que el chorro se mueva independientemente de la cámara.

Part2Screen1

El guión dice que necesitamos un componente de cuerpo rígido, por lo que debemos añadir que a nuestro jet a través de componente complemento, la física, el cuerpo rígido.

Part2Screen2

Asegúrese de ajustar la fricción angular a 0, y desactive la propiedad utilización gravedad.

Part2Screen3

Ahora podemos arrastrar el objeto de juego chorro sobre el cuerpo rígido en el controlador de jugador. También tenemos que poner nuestra x e y min min a ser -10. X max y max y deben ser 10. Inclinación debe fijarse en 5, y la velocidad debe ser de 10.

Part2Screen4
Paso 2:

Pasando a la prefabricada de misiles. Debemos hacer clic en él y añadir componentes, escritura, destruir misiles.

Part2Screen5

Cambiar la propiedad de por vida a ser 5. Queremos que el misil para una duración de 5 segundos antes de que se destruye a sí mismo fuera de la pantalla.

Part2Screen6
Paso 3:

Crear un objeto del juego vacío en el panel de jerarquías y cambie su nombre por el regulador del juego. (Nota:. Usted no tiene que cambiar las x, y, z las coordenadas de este; elegí porque soy neurótica)

Part2Screen7

Añadir componente, escritura, controlador de misiles o arrastrar y soltar el script del controlador de misiles en el regulador del juego.

Part2Screen8

Una el misil prefabricada a la característica de peligro en el panel de información.

Part2Screen9
Paso 4:.

Seleccione el objeto plano y añadir el guión plano de desplazamiento para que

Part2Screen10

arrastrar el avión desde el panel de jerarquías a la propiedad rend en el panel Inspector.

Part2Screen11
Paso 5:.

Ejecutar el juego y vamos a ver cómo va

Part2Screen12

¡Vaya, se ve como algo ha terminado de escribir la posición z de nuestro jet. Esta es la razón por la prueba es importante. Todos cometemos errores, incluido yo mismo. Por lo tanto, vamos a ir hacia atrás sobre el script del controlador jugador para ver dónde se encuentra el problema.

El problema no reside en el código, sino que se encuentra en la sección de limitaciones del componente de cuerpo rígido. Tenemos que asegurarnos de que se congela la posición y rotación en el eje z.

Part2Screen13

Ahora, esto no es demasiado de un juego actualmente a pesar de que ahora se ejecuta correctamente. Tenemos que añadir algunas colisiones para hacer los peligros … Bien …! Peligrosos
Paso 6:

Seleccione el Jet y añadir componentes, la física, caja colisionador
.
Part2Screen15

Cambiar de juego a la vista de escena para echar un vistazo a cómo el colisionador cuadro sería alrededor del chorro.

Part2Screen15

Configurar el tamaño sea lo más seguido. X 68, Y 10, Z 68 y poner un cheque en la caja para es gatillo.

Part2Screen16

Ahora tenemos que hacer básicamente lo mismo con el misil. Le sugiero que ponga una copia de la prefabricada en la pantalla para la edición.

Part2Screen17

Añadir el componente cuadro colisionador a la misma y la Unidad debe automática del tamaño que sea perfecto. Asegúrese de que esté gatillo está marcada.

Part2Screen18

Haga clic en el botón Aplicar en la parte superior del panel de información. Esto ahorrará los cambios a la misma prefabricada.

Part2Screen19

Ahora usted puede eliminar el misil desde el panel de jerarquías.

Part2Screen20

Estos son los resultados finales:


Nota al pie:

Si la unidad sigue dando algún problema sobre el componente de cuerpo rígido en el misil, puede eliminar el código que hace referencia a ella en el script del controlador de misiles o simplemente retire el cuerpo rígido del misil en el editor de Unity.

Revisión al código para el controlador de misiles, en caso de que quiera ir por ese camino.
utilizando UnityEngine; utilizando System.Collections; public class MissileController: MonoBehaviour {peligro GameObject pública; flotador privada spawnWait = 1f; void start () {StartCoroutine (SpawnWaves ()); } IEnumerator SpawnWaves () {while (true) {var xMinMax = Random.Range (-15F, 20f); Vector3 spawnPosition = nuevo Vector3 (xMinMax, 10f, 25f); Quaternion spawnRotation = Quaternion.Euler (nuevo Vector3 (90f, 0f, 0f)); Instantiate (peligro, spawnPosition, spawnRotation); retorno rendimiento nuevos WaitForSeconds (spawnWait); spawnWait – = 0.01f; si (spawnWait <0.05f) spawnWait = 0.05f; }}} 12345678910111213141516171819202122232425262728using UnityEngine; usando System.Collections; publicclassMissileController: Riesgo de MonoBehaviour {publicGameObject; privatefloatspawnWait = 1f; voidStart () {StartCoroutine (SpawnWaves ());} SpawnWaves IEnumerator () {while (true) {varxMinMax = Random.Range ( -15F, 20f); Vector3 spawnPosition = newVector3 (xMinMax, 10f, 25f); Quaternion spawnRotation = Quaternion.Euler (newVector3 (90f, 0f, 0f)); Instantiate (peligro, spawnPosition, spawnRotation); returnnewWaitForSeconds rendimiento (spawnWait); spawnWait- = 0.01f; si (spawnWait <0.05f) spawnWait = 0.05f;}}}

Bueno, eso es todo por hoy. Para reiterar lo que hemos ido, hemos puesto en marcha el esqueleto básico de juego para el juego. Hemos ampliado sobre ella mediante la adición y escribir los scripts necesarios para el juego. Hemos añadido todas las imágenes y modelos que necesitábamos para el juego básico también. Parte 3 cubrirá las porciones restantes por hacer de este un lleno en el juego. Espero verte allí. Puede ser el código robusto y libre de errores, esta es Jesse cierre de sesión.

Mensajes relacionados

Deja una respuesta

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