Mi nuevo proyecto con unity. Videojuego de guerra.

(POSDATA...PASAR EL MOUSE SOBRE LAS LINEAS DE CODIGO ASI PODREIS LEERLAS POR CONTRASTE..DE COLORES Y COPIARLAS TAMBIEN APRETANDO EL BOTON IZQUIERDO..)
 

Mi nuevo proyecto con unity.

Estoy trabajando actualmente un juego de guerra, y me estoy inspirando en el de Medal of Honor,

Medal of Honor es una serie de videojuegos creada y producida por Steven Spielberg. La temática de la serie siempre ha estado basada en los combates de la Segunda Guerra Mundial, tema de culto para Spielberg .


Voy a ir explicando como estoy haciendo el videojuego los problemas que me voy encontrando y las soluciones que voy encontrando.

El argumento y guion del tema no lo cuento ….¡¡¡¡¡¡que me lo copiannnn!!!!!!!! ¡¡¡¡jajajajajajjajajajaj!!!!!!!.

Bueno esto ultimo es broma claro, solo escribire que es algo corto y concreto para poder terminarlo, un episodio mas bien una situación de guerra, al escapar el player un soldado americano, se gana el juego eso es todo el argumento que voy a contar asta ahora.


Lo que e aprendido aquí de forma novedosa, pondré el script en c# donde se ve el cambio, es hacer disparos con ráfaga tipo ametralladora pero no de forma mecánica sino directamente desde el script.



Concretamente, esta linea de código:


if (Input.GetButton ("Fire1")) ////ametralladora

// if (Input.GetButtonDown ("Fire1")) original tiro a tiro


if (Input.GetButton ("Fire1")) ////ametralladora--------al mantener pulsado sale constantemente disparos


// if (Input.GetButtonDown ("Fire1")) original tiro a tiro—-solo hace hace un disparo hay que pulsar la tecla una y otra vez es tiro a tiro sin rafaga.







/// <summary>

/// Launcher.

///

/// 3/2/2013

/// Steve Peters

/// Game Developers Guild - Miami, FL

///

/// Allows us to launch projectiles at a wall. It preinstantiates and stores the projectiles in a

/// stack to improve performance

/// </summary>

using UnityEngine;

using System.Collections;


public class Launcher : MonoBehaviour

{

public Rigidbody projectile;

public Rigidbody explosiveProjectile;

public float launchspeed = 50;

public bool useExplodingProjectiles = false;

private float _LaunchDelayTime = 0.0f;

public int stackSize = 60;

public Transform launchHole1;

public Transform launchHole2;

private Stack _Projectiles;

private Stack _ExplosiveProjectiles;

private Transform _myTransform;

// Use this for initialization

void Start ()

{

_myTransform = transform;

_Projectiles = new Stack();

if(useExplodingProjectiles)

{

_ExplosiveProjectiles = new Stack();

}


for(int i = 0; i < stackSize; i++)

{

Rigidbody tr = Instantiate (projectile, _myTransform.position, _myTransform.rotation) as Rigidbody;

PushProjectile(tr);


if(useExplodingProjectiles)

{

Rigidbody rr = Instantiate (explosiveProjectile, _myTransform.position, _myTransform.rotation) as Rigidbody;

PushExplosiveProjectile(rr);

}

}

}

// Update is called once per frame

void Update ()

{

if(_Projectiles.Count > 0)

{

if(Time.time > _LaunchDelayTime)

{





if (Input.GetButton ("Fire1")) ////ametralladora

// if (Input.GetButtonDown ("Fire1")) original tiro a tiro


{

Rigidbody tr = PopProjectile();

tr.gameObject.SetActive(true);

tr.transform.position = launchHole1.position;

tr.transform.rotation = launchHole1.rotation;

tr.velocity = transform.TransformDirection (Vector3.forward * launchspeed);

tr = PopProjectile();

tr.gameObject.SetActive(true);

tr.transform.position = launchHole2.position;

tr.transform.rotation = launchHole2.rotation;

tr.velocity = transform.TransformDirection (Vector3.forward * launchspeed);

_LaunchDelayTime = Time.time + 0.5f;

}

}

}


if(useExplodingProjectiles)

{

if(_ExplosiveProjectiles.Count > 0)

{

if(Time.time > _LaunchDelayTime)

{

if (Input.GetButtonDown ("Fire2"))

{

Rigidbody tr = PopExplosiveProjectile();

tr.gameObject.SetActive(true);

tr.transform.position = launchHole1.position;

tr.transform.rotation = launchHole1.rotation;

tr.velocity = transform.TransformDirection (Vector3.forward * launchspeed);

tr = PopExplosiveProjectile();

tr.gameObject.SetActive(true);

tr.transform.position = launchHole2.position;

tr.transform.rotation = launchHole2.rotation;

tr.velocity = transform.TransformDirection (Vector3.forward * launchspeed);

_LaunchDelayTime = Time.time + 0.5f;

}

}

}

}

}

public void PushProjectile(Rigidbody x)

{

x.gameObject.SetActive(false);

_Projectiles.Push(x);

}

public Rigidbody PopProjectile()

{

return (Rigidbody)_Projectiles.Pop();

}


public void PushExplosiveProjectile(Rigidbody x)

{

x.gameObject.SetActive(false);

_ExplosiveProjectiles.Push(x);

}

public Rigidbody PopExplosiveProjectile()

{

return (Rigidbody)_ExplosiveProjectiles.Pop();

}

}





Asta ahora para hacer ráfagas utilizaba este método que me daba resultado pero es mecánico,

https://youtu.be/cTSwWrXgVow


paso enlace del video donde veréis como lo hacia antes y en este juego hay partes que sigo utilizando este sistema.



Otra novedad aprendida con mi nuevo videojuego es la de combinar colisiones personalizadas por tag y las escenas del juego, cuando me disparan los enemigos y me alcanzan utilizo este escriptque me cambia a la escena donde muero y desde esta escena al presionar la tecla “o” buelbo a riniciar el juego.








using System.Collections;

using System.Collections.Generic;

using UnityEngine;


public class colisiontcambioportagdenivel : MonoBehaviour {



//public float distancePerSecond;//////IMBENTADO





//public float Destroy = 0.2f;

// Use this for initialization

void Start () {


}





//void OnCollisionEnter (){



void OnCollisionEnter (Collision collision)

{

//if (collision.gameObject.tag == "maloazul (4)") {

//Destroy (gameObject, 0.0f);



if (collision.gameObject.tag == "pomada") {

//Destroy (gameObject, 2.0f);


// transform.position = new Vector3 (198.301f, 20.316f, 136.023f);/////////nuebo mio

//transform.Translate (new Vector3 (198 * Time.deltaTime, 20, 136.2f), Space.Self);/////////////IMBENTADO


Application.LoadLevel (1);






}

}

}




--------------------------------------------------------------------------

-----------------------------------------------------------------------------

----------------------------------------------------------------------------

A las balas enemigas, las e nombrado con el tag “pomada”, sirve cualquier palabra que queramos ponerle…...El gameobjet de las balas enemigas se llama Sphere y de tag le puesto “pomada”, cuando me colisionan las Sphere enemigas me cambia la escena del videojuego...Application.LoadLevel (1);


y desde aquí donde seme ve muriendo, al presionar la tecla “o” reinicio el videojuego.

Pongo el script….todo esto siempre en c#





using System.Collections;

using System.Collections.Generic;

using UnityEngine;


public class reinicioalapretartecla : MonoBehaviour {




//public AudioSource tickSource;//////////////////////////nueboooooooo


//public AudioSource tickSource;



void Start () {


//tickSource = GetComponent<AudioSource> ();


//tickSource = GetComponent<AudioSource> ();///////////////////////////////////////////nuebooooooo


}


void Update ()

{



//tickSource.Play ();//////////////////////////////////////////////////nuevoooooooooooo


if (Input.GetKey(KeyCode.O))


//tickSource.Play ();

Application.LoadLevel (0);



}}




Tambien e mejorado el sonido de fondo del videojuego poniendo uno de sonidos de guerra generales, uno sola mente, antes ponía un sonido por cada elemento, claro se bloqueaba y se mezclaba todo ,,,,,un caos vamos. Ahora lo justo .

1-sonido de fondo de guerra disparos sirenas etc...pero solo uno.

2- sonido de muertes.

3- mis sonidos personales de disparos del player……

4- me faltara el fondo musical que no lo e puesto y que pienso componerlo yo mismo estilo jazz improvisando o como las antiguas películas de charlot que había uno con un piano tocando mientras daban la película…



Y el tema del juego me da pie y me funciona muy bien con animaciones gratuitas descargadas desde unity de las series

Raw Mocap Data


Animaciones de personajes deambulando por el terreno de diversas formas diferentes , procurare variar aquí todo lo que pueda,.

Luego esta el tema de la iluminación que pienso darle al videojuego un aire cálido de oscuridad y juego de luces.





Los personajes los e modelado yo y pintado yo con blender, el americano y al alemán, aquí me encontrado que al pintarlo con blender estaba muy contento con los colores y los tonos pero al pasarlo a unity no salían con la misma intensidad me salían muy flojos y apagados, ignoro el motivo,,,,pero ya lo estudiare y practicare ,,,no tengo prisa,,,voy haciendo aprendiendo y disfrutando un montón.

(continuara………………………………………………………………………….)

(POSDATA...PASAR EL MOUSE SOBRE LAS LINEAS DE CODIGO ASI PODREIS LEERLAS POR CONTRASTE..DE COLORES Y COPIARLAS TAMBIEN APRETANDO EL BOTON IZQUIERDO..)



No hay comentarios:

Publicar un comentario