Planificación e implementación de juegos de parkour simples de Unity

introducción al juego

Nombre del juego: Endless Adventure Runner
Tipo de juego: Parkour sin fin
Fondo del juego

En un mundo lleno de incógnitas y milagros, los jugadores desempeñarán el papel de un valiente explorador, viajando a través de varias áreas misteriosas, evitando obstáculos, recolectando tesoros y desafiando sus propios límites.

Jugabilidad principal
  • Parkour Adventure: el jugador controla al personaje para avanzar por el camino interminable, evitando obstáculos saltando y deslizándose.
  • Obstáculos y monedas de oro: el camino está cubierto de varios obstáculos y monedas de oro. Los jugadores deben operar con flexibilidad para evitar chocar contra obstáculos y recolectar monedas de oro al mismo tiempo.
  • Desafío de zona de aceleración: ocasionalmente habrá una zona de aceleración. Una vez que el personaje la pise, obtendrá temporalmente la capacidad de correr a velocidades extremadamente altas, lo que hará que el juego sea más divertido. emocionante y desafiante.
Público objetivo

Endless Adventure Parkour es adecuado para jugadores de todas las edades, especialmente aquellos a quienes les gustan los juegos de acción y desafiantes.

detalles técnicos
  • Plataforma de apertura:Unity
  • Puntos técnicos principales: control del jugador, algoritmo de generación de obstáculos y monedas de oro, detección de colisiones, diseño de interfaz de usuario, efectos de sonido y procesamiento de animación.

Lógica empresarial del juego

¡Hemos simplificado un poco el juego! ¡Las siguientes funciones principales se conservan para el desarrollo! ¡Esto es más adecuado para principiantes!

1. Movimiento del personaje

El personaje corre automáticamente hacia adelante por un camino sin fin. Los jugadores pueden controlar al personaje para que salte o se deslice para evitar obstáculos mediante la entrada.

2. Obstáculos y generación de monedas de oro.

Genera aleatoriamente obstáculos y monedas de oro en el camino. Los tipos y la frecuencia de los obstáculos aumentan gradualmente a medida que avanza el juego.

3. Detección de colisiones

Detecta si el personaje chocó con obstáculos o recogió monedas de oro. La colisión con obstáculos hará que el juego termine y recolectar monedas de oro aumentará tu puntuación.

4. Zona de aceleración

Las franjas de aceleración se colocan aleatoriamente en la carretera y el personaje del jugador obtendrá un breve impulso de velocidad después de contactarlas.

5. Mecanismo de puntuación

Las puntuaciones de los jugadores se basan en la distancia recorrida y la cantidad de monedas de oro recolectadas. La puntuación total se muestra una vez finalizado el juego.

La implementación específica requiere múltiples scripts. Según el pensamiento orientado a objetos, ¡es mejor tener un script separado para cada función!

Construcción de escena:

El primer guión: el guión de control de movimiento del jugador A\D controla el movimiento hacia la izquierda y hacia la derecha.

Este código implementa funciones básicas de control de movimiento para los jugadores del juego, incluido el movimiento y el salto hacia la izquierda y hacia la derecha.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerCont : MonoBehaviour
{
    //Horizontal
    //1.控制玩家移动,input.getaix
    //2.A、D控制向左、右移动
    //3.W控制跳跃
   public GameObject Player;
    public float lrSPEED = 10F;
    public float JUMPSPEED = 5;
    public float RunSpeed = 10f;

    private void Start()
    {
        //Player = GameObject.Find("HPCharacter");
    }
    private void Update()
    {
        UserInput();
        AwalysRun();
    }
    //*=========================
    void UserInput()
    {
        //Debug.Log("检测用户按下的键盘A D W");
        float MoveZuoY = Input.GetAxis("Horizontal");
        ControlMove(MoveZuoY);
        
        if (Input.GetKey(KeyCode.W))
        {
            Jump();
        }
    }
    void ControlMove(float ZuoyouMove)
    {
        Player.transform.Translate(new Vector3(ZuoyouMove * lrSPEED * Time.deltaTime, 0, 0));

    }
   
    void Jump()
    {
        Player.transform.Translate(new Vector3(0, JUMPSPEED * Time.deltaTime, 0));
        //Debug.Log("角色开始移动了");
    }
    void AwalysRun()
    {
        Player.transform.Translate(new Vector3(0, 0, 1 * RunSpeed * Time.deltaTime));

    }
}

Este es un script C# que se adjunta a un objeto del juego llamado PlayerCont y se usa para controlar el movimiento del jugador en el juego.
Aquí hay una breve explicación de algo de lo que hace el código:

  1. En la parte superior del código, utilice la declaración de uso para importar el espacio de nombres requerido. Contiene tres espacios de nombres de uso común: System.Collections, System.Collections.Generic y UnityEngine.
  2. Declare una variable GameObject pública denominada Player para almacenar el objeto del jugador. Al mismo tiempo, se declaran tres variables públicas de punto flotante: lrSPEED, JUMPSPEED y RunSpeed, que se utilizan para establecer la velocidad de movimiento hacia la izquierda y hacia la derecha, la velocidad de salto y la velocidad de avance constante del jugador, respectivamente.
  3. Búsquelo y asígnelo a la variable Reproductor en la función Inicio(). Esta función se llamará automáticamente cuando comience el juego.
  4. La función Update() es un método llamado por el motor Unity en cada cuadro, donde la lógica del juego se puede actualizar para cada cuadro. En Update() se llaman dos funciones, UserInput() y AwalysRun().
  5. La función UserInput() se utiliza principalmente para obtener la entrada del usuario y controlar el movimiento del jugador de acuerdo con las operaciones del usuario. Determine en qué dirección debe moverse el jugador comprobando qué tecla presionó el usuario (como "A" o "D") e implemente esta operación a través de la función ControlMove(). Si el usuario presiona la tecla "W", se llama a la función Jump() para hacer que el jugador salte.
  6. La función ControlMove() recibirá un parámetro que indica el movimiento hacia la izquierda y hacia la derecha, lo multiplicará por lrSPEED y luego usará Time.deltaTime para obtener la diferencia de tiempo dentro de un cuadro y calcular este cuadro. distancia que debe moverse el jugador. Finalmente, use la función Transform.Translate() para trasladar al jugador una distancia específica a lo largo del eje horizontal.
  7. La función Jump() es similar a ControlMove(), excepto que esta vez salta hacia arriba, lo que trasladará al jugador una distancia específica a lo largo del eje vertical.
  8. La función AwalysRun() siempre mantiene al jugador avanzando. También utiliza la función Transform.Translate(), pero esta vez se mueve a lo largo del eje z.

El guión 2 activa la detección y clonación de monedas de oro y obstáculos.

Este script se utiliza para clonar diferentes objetos cuando el protagonista encuentra diferentes desencadenantes y realiza las operaciones correspondientes, como sumar puntos o destruir objetos.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CollisionManager : MonoBehaviour
{
    //触发检测  1.克隆金币 2.恐克隆怪物  3.碰撞金币 吃掉它 加分 4.碰到怪物,掉血 5碰到加速带加速、减速
    //该触发检测脚本挂到 主角身上

    GameObject BeiTriggOBJ;
    public GameObject CoinMuban;
    public GameObject CloneCoinFather;

    public GameObject ObstuctionMuban;
    public GameObject CloneStruFather;

    //PlayerCont onPlayshizhe=new PlayerCont();//实例化对象


    private void OnTriggerEnter(Collider other)
    {

        BeiTriggOBJ = other.transform.gameObject;
        if (BeiTriggOBJ.tag == "rCoinTrigger")
        {
            //克隆金币
            ClonCoin();
        }
        if (BeiTriggOBJ.tag == "MonsterTrigger")
        {
            //克隆怪物
        }
        if (BeiTriggOBJ.tag == "TriggerSpeedUp")
        {
            //开始加速
            SpeedUp(10f);
        }

        //===================================
        if (BeiTriggOBJ.tag == "Coin")
        {
            //吃掉 加分
            Destroy(BeiTriggOBJ);
        }
        if (BeiTriggOBJ.tag == "Monster")
        {
            //掉血 停下来
            //PlayerCont.RunSpeed = 0;
        }
    }

    private void OnTriggerExit(Collider other)
    {
        if (other.transform.gameObject.tag == "TriggerSpeedUp")
        {
            SpeedUp(-10f);
        }
    }

    void ClonCoin()
    {
        Debug.Log("克隆金币");

        for (int i = 0; i < 10; i++)
        {
            Vector3 OnClonPos = new Vector3(153 + Random.Range(0, 6), 0, BeiTriggOBJ.transform.position.z + 50f + i * 3);
            GameObject.Instantiate(CoinMuban, OnClonPos, Quaternion.identity, CloneCoinFather.transform);
        }
    }
    void ClonMonster()
    {
        Debug.Log("克隆怪物");

        Vector3 OnClonPos = new Vector3(153 + Random.Range(0, 6), 0, BeiTriggOBJ.transform.position.z + 50f);
        GameObject.Instantiate(ObstuctionMuban, OnClonPos, Quaternion.identity, CloneStruFather.transform);
    }
    void SpeedUp(float Speed)//函数形参用法
    {
        Debug.Log("加速");
        PlayerCont.RunSpeed += Speed;
    }


}//end class
  1. Cuando el protagonista encuentre el disparador con la etiqueta "TriggerCoin01", se activará la función OnTriggerEnter() en el script para comenzar a clonar monedas de oro. En este proceso, primero se define una nueva ubicación clonePos y luego se usa la función GameObject.Instantiate() para clonar múltiples objetos de monedas de oro en la ubicación clonePos y configurarlos como nodos secundarios del objeto de plantilla CoinMuban.
  2. Cuando el protagonista encuentra un disparador con la etiqueta "TriggerStru", se activará la función OnTriggerEnter() en el script para comenzar a clonar obstáculos. Durante este proceso, se genera un mensaje que indica que se ha iniciado la clonación de obstáculos, pero en realidad no se realiza ninguna operación.
  3. Cuando el protagonista encuentra un objeto con la etiqueta "Moneda", se activará la función OnTriggerEnter() en el script para comenzar a agregar puntos. Durante este proceso, solo se generará un mensaje para indicar el inicio de la adición de puntos, y luego se destruirá el objeto que desencadenó la colisión.
  4. Cuando el protagonista encuentre un objeto con la etiqueta "Monstruo", se activará la función OnTriggerEnter() en el script y se comenzarán a deducir puntos. Durante este proceso, solo se emitirá un mensaje, indicando que las deducciones de puntos han comenzado.

[Agregue el resto la próxima semana]

Guión 3: Sistema de puntuación y pérdida de sangre.

El script modificado también debe colgarse en un objeto del juego. La lógica es: cuando el protagonista activa la detección y detecta la moneda de oro, ¡el método de suma de puntaje del siguiente script de administración de puntaje se llama en todas las clases! ¡La misma pérdida de sangre es la misma!

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ScoreManager : MonoBehaviour
{
    //分数管理 血量管理
    // 如果撞击到金币就加分,如果撞击到障碍物就掉血

    public int CurrentScore=0;
    public  int CurrentBlood = 10000;


    public void ScoreAdd()//构造函数
    {
        Debug.Log("加分函数开始执行");
        CurrentScore += 10;
        Debug.Log("分:"+CurrentScore);
    }


    public void SubBlood()//构造函数
    {
        Debug.Log("掉血函数开始执行");
        CurrentBlood -= 100;
        Debug.Log("血:" + CurrentBlood);
    }
    private void OnGUI()
    {     
        GUI.Label(new Rect(new Vector2(200, 200), new Vector2(500, 500)), CurrentBlood.ToString());
        GUI.Label(new Rect(new Vector2(20, 20), new Vector2(500, 500)), CurrentScore.ToString());

    }

}

Supongo que te gusta

Origin blog.csdn.net/leoysq/article/details/134111311
Recomendado
Clasificación