Unity Learning Semana 3

introdução do jogo

No jogo "FlappyBird", o jogador clica na tela com o mouse, e o pássaro voa para cima, e o clique contínuo continua voando para lugares mais altos. Se você não clicar, ele cairá rapidamente. Portanto, o jogador deve controlar o pássaro para voar para frente e, em seguida, prestar atenção para evitar os canos irregulares no caminho.
efeito de jogo
insira a descrição da imagem aqui

A ideia do design do jogo
usa o processo de movimento da cena em relação ao pássaro para realizar indiretamente o deslocamento horizontal do pássaro. O pássaro na verdade só muda de posição na direção vertical, aumentando a gravidade do pássaro. Quando o jogador clica no mouse botão ou pressiona o espaço O pássaro recebe uma força para cima. Quando o pássaro estiver no meio de um cano de água, julgue se o pássaro colidiu com o lado superior ou inferior do cano de água ou com o solo. Se houver uma colisão, o jogo é considerado encerrado e o jogo começa de novo.

A implementação específica do jogo

1. A construção da cena
Use os materiais para construir de acordo com os padrões do jogo.
(1) Coloque os canos de água superiores e inferiores como um todo em um novo modelo (GameObject) e coloque esta classe e a cena do solo na cena de fundo.
(2) Coloque a cena de fundo no prefab, ctrl+D para copiar.
(3) Anime o material do pássaro (selecione e arraste todas as imagens do pássaro para a Hierarquia) e coloque-o na cena.
2. Adicione componentes aos objetos do jogo
Adicione corpos rígidos e corpos de colisão para o pássaro e adicione corpos de colisão ao solo e canos de água.

Escrever código

Código do pássaro
Ao escrever o código do pássaro, deve-se notar que a detecção de colisão é usada quando colide com o solo e canos de água, e a detecção de gatilho é usada quando colide com moedas de ouro. As moedas de ouro aqui também podem ser alteradas para adicionar um gatilho entre os dois canos de água e, quando o pássaro passar pelos canos de água, um ponto será marcado.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class Bird : MonoBehaviour
{
    
    
    public int score = 0;//分数
    public Rigidbody2D rigidbodybird;
    public GameObject isDefentUI;
    public Text text; 
    public SpriteRenderer sr;
    public Sprite birds;
    // Start is called before the first frame update
    private void Awake()
    {
    
    
        sr = GetComponent<SpriteRenderer>();
    }
    void Start()
    {
    
    
        rigidbodybird = GetComponent<Rigidbody2D>();

    }

    // Update is called once per frame
    void Update()
    {
    
    
       
        Up();
    }
     void Up()
    {
    
    
        if (Input.GetKeyDown(KeyCode.Space)||Input.GetMouseButton(0))
        {
    
    
            rigidbodybird.AddForce(new Vector2(0, 250f));
        }
    }
    public void OnTriggerEnter2D(Collider2D other)
    {
    
    
       //触发检测食物
        if (other.tag == "Food")
        {
    
    

            Destroy(other.gameObject);//销毁食物
            score++;
            text.text = "分数:" + score;
        }  
    }
    public void OnCollisionEnter2D(Collision2D collision)
    {
    
    
    //检测是否碰撞水管和地面
        if (collision.gameObject.tag == "Pipe" || collision.gameObject.tag == "Grass")
        {
    
    
            sr.sprite = birds;
            isDefentUI.SetActive(true);
            Invoke("ReturnMenu", 3);//如果游戏结束返回主界面

        }
    }
    private void ReturnMenu()
    {
    
    
        SceneManager.LoadScene(1);
    }
   
}

O código do plano de fundo
O plano de fundo move-se para a esquerda com o tempo
Observe aqui que todo o plano de fundo deve se mover.

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

public class backgrad : MonoBehaviour
{
    
    
    public float speed = 2f;//移动速度
    // Start is called before the first frame update
    void Start()
    {
    
    
        
    }

    // Update is called once per frame
    void Update()
    {
    
    
        transform.Translate(Vector3.left * speed * Time.deltaTime);
    }
}

O loop do plano de fundo
Quando o campo de visão da câmera se move para fora do plano de fundo, aciona o gatilho no segundo plano de fundo e o primeiro plano de fundo se move atrás do terceiro plano de fundo.

//背景的循环
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Pipe : MonoBehaviour
{
    
    
   
     void Update()
    {
    
    
     
    }
    public void PipeMove()
    {
    
    
        float move_y = Random.Range(1,8);
        this.transform.localPosition = new Vector2(this.transform.localPosition.x, move_y);
    }
}
//触发检测
using System.Collections.Generic;
using UnityEngine;

public class trige : MonoBehaviour
{
    
    
    public Transform GetTransform;
    public void OnTriggerEnter2D(Collider2D other)
    {
    
    
        if(other.tag=="Bird")
        {
    
    
            Transform tf = Newcamer.newcamera.tf;
            GetTransform.position = new Vector2(GetTransform.position.x+71, GetTransform.position.y);
            Newcamer.newcamera.tf = GetTransform;
        }
    }
}

Implementação do menu principal

Interface do menu principal (versão simplificada)
insira a descrição da imagem aqui
insira a descrição da imagem aqui
Código de imagem
para seleção e confirmação

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

public class Image : MonoBehaviour
{
    
    
    public Transform poseone;
    public Transform posetwo;
    private float h = 1;
    // Start is called before the first frame update
    void Start()
    {
    
    

    }

    // Update is called once per frame
    void Update()
    {
    
    
        if (Input.GetKeyDown(KeyCode.W))
        {
    
    
            h = 1;
            transform.position = poseone.position;
        }
        else if (Input.GetKeyDown(KeyCode.S))
        {
    
    
            h = 2;
            transform.position = posetwo.position;
        }
        if (Input.GetKeyDown(KeyCode.Space) && h == 1)
        {
    
    
            SceneManager.LoadScene(0);//跳到游戏界面
        }
    }
}

Acho que você gosta

Origin blog.csdn.net/AD_GOD/article/details/122750676
Recomendado
Clasificación