Semaine d'apprentissage de l'unité 3

présentation du jeu

Dans le jeu "FlappyBird", le joueur clique sur l'écran avec la souris, et l'oiseau volera vers le haut, et le clic continu continuera à voler vers des endroits plus élevés. Si vous ne cliquez pas, il tombera rapidement. Ainsi, le joueur doit contrôler l'oiseau pour voler vers l'avant, puis faire attention à éviter les tuyaux inégaux sur le chemin.
effet de jeu
insérez la description de l'image ici

L'idée de conception du jeu
utilise le processus de déplacement de la scène par rapport à l'oiseau pour réaliser indirectement le déplacement horizontal de l'oiseau. En fait, l'oiseau ne change de position que dans le sens vertical, ce qui augmente la gravité de l'oiseau. Lorsque le joueur clique sur la souris bouton ou appuie sur l'espace L'oiseau obtient une force vers le haut. Lorsque l'oiseau est au milieu d'une conduite d'eau, jugez si l'oiseau est entré en collision avec le côté supérieur ou inférieur de la conduite d'eau, ou le sol. S'il y a une collision, le jeu est jugé terminé et le jeu recommence.

La mise en œuvre spécifique du jeu

1. La construction de la scène
Utilisez les matériaux pour construire selon les modèles du jeu.
(1) Placez les conduites d'eau supérieures et inférieures dans leur ensemble dans un nouveau modèle (GameObject) et placez cette classe et la scène au sol dans la scène d'arrière-plan.
(2) Placez la scène d'arrière-plan dans le préfabriqué, ctrl+D pour copier.
(3) Animez le matériau de l'oiseau (sélectionnez et faites glisser toutes les images de l'oiseau dans la hiérarchie) et placez-le dans la scène.
2. Ajoutez des composants aux objets du jeu
Ajoutez des corps rigides et des corps de collision pour l'oiseau, et ajoutez des corps de collision au sol et aux conduites d'eau.

Écrire du code

Code de l'oiseau
Lors de l'écriture du code de l'oiseau, il convient de noter que la détection de collision est utilisée lorsqu'il entre en collision avec le sol et les conduites d'eau, et la détection de déclenchement est utilisée lorsqu'il entre en collision avec des pièces d'or. Les pièces d'or ici peuvent également être modifiées pour ajouter un déclencheur entre les deux conduites d'eau, et lorsque l'oiseau passe à travers les conduites d'eau, un point sera marqué.

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);
    }
   
}

Le code du fond
Le fond se déplace vers la gauche avec le temps,
notez ici que tout le fond doit se déplacer.

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);
    }
}

La mise en boucle de l'arrière-plan
Lorsque le champ de vision de la caméra sort de l'arrière-plan, le déclencheur se déclenche dans le deuxième arrière-plan et le premier arrière-plan se déplace derrière le troisième arrière-plan.

//背景的循环
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;
        }
    }
}

Mise en place du menu principal

Interface du menu principal (version simplifiée)
insérez la description de l'image ici
insérez la description de l'image ici
Code image
pour la sélection et la confirmation

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);//跳到游戏界面
        }
    }
}

Je suppose que tu aimes

Origine blog.csdn.net/AD_GOD/article/details/122750676
conseillé
Classement