martes, 28 de junio de 2022

Sobre barras de vida de los personajes y disparos en persecuciones a la carta mediante C#;

Otros temas que e aprendido hace muy poco y que voy practicando y comentando es el uso de barras de vida de todos los personajes y de disparos de enemigos pero al estar a cierta distancia de su objetivo no se ponen a atacar asta que no tienen la distancia deseada por el desarrollador del videojuego,

El script en c# que realiza esta tarea es muy corto y muy sencillo.






using System.Collections;

using System.Collections.Generic;

using UnityEngine;


public class DISPARATIRITO : MonoBehaviour {


public Transform player;


// public float range = 1f;

//public float range = 4f;

public float range = 0.04f;



public float bulletImpulse = 0.1f;


private bool onRange = false;


public Rigidbody projectile;


void Start()

{

float rand = Random.Range(1.0f, 2.0f);/////ORIGINAL

//float rand = Random.Range(0.04f, 2.0f);/////tambien funciona///////////////////////////EL QUE VENGO USANDO

//float rand = Random.Range(0.04f, 0.5f);/////tambien funciona

//float rand = Random.Range(0.04f, 0.08f);/////tambien funciona






InvokeRepeating("Shoot", 2, rand);//////ORIGINAL




}


void Shoot()

{


if (onRange)

{


Rigidbody bullet = (Rigidbody)Instantiate(projectile, transform.position + transform.forward, transform.rotation);

bullet.AddForce(transform.forward * bulletImpulse, ForceMode.Impulse);


Destroy(bullet.gameObject, 2);

}



}


void Update()

{


onRange = Vector3.Distance(transform.position, player.position) < range;


if (onRange)

transform.LookAt(player);

}



}



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

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

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

cuando se aplica el script aun gameobject en este caso puse un cubo como hijo en la cabeza de un enemigo, hay aparecen mediante el // public float range = 1f;

//public float range = 4f;

public float range = 0.04f;



public float bulletImpulse = 0.1f;


private bool onRange = false;


public Rigidbody projectile;


5 casillas donde se arrastran y se ponen los gameobjects que se disparan las velocidades de disparos

las distancia donde empiezan a disparar y al elemento del juego hacia donde va dirigido el disparo, esto si se suma al personaje que por su cuenta va caminando hacia el enemigo suma interés al videojuego, jugar con estas posibilidades cuando se saben emplear hace el juego interesante, pero claro hay que currárselo un montonazo….

Bien sigo explicando este script….en el video se puede ver como un enemigo al llegar a cierta distancia del lobo empieza a dispararle proyectiles desde sus ojos...intento representar que le esta disparando clones de sus ojos (mal de ojo) una cosa por el estilo para ambientar el tema del juego con un aire algo macabro…..


 

Y en este siguiente video intento que se vea visualmente los elementos del script que se pueden manipular , 1-el objetivo donde van a parar los disparos-2 la distancia desde la que empieza a disparar al objetivo- 3 la velocidad del disparo fuerza – 4-el proyectil o elemento gameobject que se dispara.

Dentro de este tema hay otros factores como darle al proyectil esa raya roja que simula la trayectoria como si fuera un cometa, ponerle al proyectil a su vez una script para que se borre cada 5 u 8 segundos, ponerle algún efecto de sonido..etc etc...

 

El gameobject proyectil se arrastra el prefabricado a la casilla donde esta el script.

El objetivo el lobo se arrastra también a la casilla correspondiente donde esta el script.

El script se añade al cubo que es hijo de la cabeza del enemigo


El gameobject proyectil se arrastra el prefabricado a la casilla donde esta el script.

El objetivo el lobo se arrastra también a la casilla correspondiente donde esta el script.

El script se añade al cubo que es hijo de la cabeza del enemigo





 

Y maravilloso script c# para Unity que hace funcionar una barra de vida de un enemigo, que al menguar esta provoque un cambio en el enemigo de muerte por ejemplo…...

 

 
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class lekitavestidoconbarradevidas : MonoBehaviour {


        public int damage;
        public int vidaEnemigo;
        public Slider BarraVidaEnemigo;





        //public Rigidbody cubo;/// pruebas

        public Rigidbody ENEMIGOSALTAEXPLOTADO;/// pruebas
    public Rigidbody ENEMIGOSALTAEXPLOTADO2;/// pruebasIMBENTADO POR MIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
    //public Rigidbody ENEMIGOSALTAEXPLOTADO3;/// pruebasIMBENTADO POR MIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
        //public Rigidbody source;/// pruebas


        //public Rigidbody  targetGameObject;/// pruebas


        void Update () {

            BarraVidaEnemigo.value = vidaEnemigo;

        }


        void OnTriggerEnter(Collider other) {
            //    if (other.gameObject.CompareTag ("Player")){
            if (other.gameObject.CompareTag ("caca")){

                vidaEnemigo-=damage;

            //    if (vidaEnemigo <= 0) {///////////////////ORIGINAL
                if (vidaEnemigo <= 1) {
                    Destroy (this.gameObject);/////destruye funciona

                    //    Application.LoadLevel (0);




                    //Rigidbody p = Instantiate(cubo, transform.position, transform.rotation);////pruebassss
                    Rigidbody p = Instantiate(ENEMIGOSALTAEXPLOTADO, transform.position, transform.rotation);////pruebassss
                Rigidbody p2 = Instantiate(ENEMIGOSALTAEXPLOTADO2, transform.position, transform.rotation);////pruebassssIMBENTADOPOR MIIIIIIIIIII
            //    Rigidbody p3 = Instantiate(ENEMIGOSALTAEXPLOTADO2, transform.position, transform.rotation);////pruebassssIMBENTADOPOR MIIIIIIIIIII
                    // Instantiate(source, targetGameObject.transform.position,
                    //targetGameObject.transform.rotation);




                //    Application.LoadLevel (3);///cambia la escena donde quiero funciona


                }


            }}

    }


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

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

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

  using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class lekitavestidoconbarradevidas : MonoBehaviour {


        public int damage;
        public int vidaEnemigo;
        public Slider BarraVidaEnemigo;





        //public Rigidbody cubo;/// pruebas

        public Rigidbody ENEMIGOSALTAEXPLOTADO;/// pruebas
    public Rigidbody ENEMIGOSALTAEXPLOTADO2;/// pruebasIMBENTADO POR MIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
    //public Rigidbody ENEMIGOSALTAEXPLOTADO3;/// pruebasIMBENTADO POR MIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
        //public Rigidbody source;/// pruebas


        //public Rigidbody  targetGameObject;/// pruebas


        void Update () {

            BarraVidaEnemigo.value = vidaEnemigo;

        }


        void OnTriggerEnter(Collider other) {
            //    if (other.gameObject.CompareTag ("Player")){
            if (other.gameObject.CompareTag ("caca")){

                vidaEnemigo-=damage;

            //    if (vidaEnemigo <= 0) {///////////////////ORIGINAL
                if (vidaEnemigo <= 1) {
                    Destroy (this.gameObject);/////destruye funciona

                    //    Application.LoadLevel (0);




                    //Rigidbody p = Instantiate(cubo, transform.position, transform.rotation);////pruebassss
                    Rigidbody p = Instantiate(ENEMIGOSALTAEXPLOTADO, transform.position, transform.rotation);////pruebassss
                Rigidbody p2 = Instantiate(ENEMIGOSALTAEXPLOTADO2, transform.position, transform.rotation);////pruebassssIMBENTADOPOR MIIIIIIIIIII
            //    Rigidbody p3 = Instantiate(ENEMIGOSALTAEXPLOTADO2, transform.position, transform.rotation);////pruebassssIMBENTADOPOR MIIIIIIIIIII
                    // Instantiate(source, targetGameObject.transform.position,
                    //targetGameObject.transform.rotation);




                //    Application.LoadLevel (3);///cambia la escena donde quiero funciona


                }


            }}

    }

SLIDER CON UNITY......( EN CONSTRUCCION ...CONTINUARA......


Timeline de Unity;

 

Boy a rellenar tema del blog sobre cosas que e aprendido estos 2 o 3 últimos meses.

Lo ultimo a empezar a usar el timeline de Unity, 

en los últimos juegos sobre un hombre lobo loco en el metro, e descubierto que es muy fácil dar animaciones a un personaje que persiga al protagonista del videojuego usando timeline, 

funciona de forma parecida al montaje de una película antigua, esas de celuloide, imaginemos que tenemos una película una cinta con diversas animaciones una de correr otra de saltar otra de caminar agachado otra de golpear con los puños otra de dar patadas, 

imaginemos que cortamos esa cinta con cada una de estas animaciones y las enganchemos luego ponemos la película en el proyector y salen esos movimientos elegidos por nosotros.

Eso se hace mas o menos con timeline de Unity, ademas se le pueden añadir sonidos en los diferentes cortes elegidos….aun e de estudiar y practicar muchísimo este apartado de timeline de Unity , pero es muy fácil poner animaciones diversas y que el personaje que persigue al lobo las realice ….en el video podéis ver como se consigue de forma resumida.

En el ejemplo también manipulo una cámara al empezar el videojuego, utilizando timeline…..

Esta al cabo de unos segundos se borra y deja que se use la que tiene el lobo, y voy jugando un poco con varias cámaras y con sus tiempos de ejecución….