RPG 2D avec Unity 2020 et C#

Créer une quête pour notre RPG + Dialogue PNJ

 

Description

Télécharger le projet RPG 2D UNITY 2020 complet.

Description

Pour terminer ce petit atelier pratique 2D sous Unity 2020, nous allons mettre en place un système de quête avec les fonctionnalités suivantes :

  • Détecter si le joueur parle à un PNJ
  • Déclencher/afficher un dialogue pour donner la quête
  • Vérifier si la quête est terminée
  • Ramasser l’objet de quête
  • Laisser passer le joueur vers la zone 2 s’il a terminé la quête
  • Empêcher qu’un dialogue se relance si on a déjà pris la quête

Code source

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

// CODE COMPLET DU PROJET
public class Character : MonoBehaviour
{
    public float speed = 5f;
    Rigidbody2D rb;
    Vector2 dir;
    Animator anim;
    public GameObject quete;
    bool chestOk = false; // quete terminée ??
    public BoxCollider2D colliderPnj;

    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
        anim = GetComponent<Animator>();
    }

    void Update()
    {
        dir.x = Input.GetAxisRaw("Horizontal");
        dir.y = Input.GetAxisRaw("Vertical");
        rb.MovePosition(rb.position + dir * speed * Time.fixedDeltaTime);

        SetParam();
    }

    void SetParam()
    {
        if (dir.x == 0 && dir.y == 0)
            anim.SetInteger("New Int", 0); 

        else if (dir.y < 0) // bas
            anim.SetInteger("New Int", 1);

        else if (dir.x > 0) // droite
        {
            anim.SetInteger("New Int", 2);
            GetComponent<SpriteRenderer>().flipX = true;
        }

        else if (dir.x < 0) // gauche
        {
            anim.SetInteger("New Int", 2);
            GetComponent<SpriteRenderer>().flipX = false;
        }

        else if (dir.y > 0) // haut
            anim.SetInteger("New Int", 3);
    }

    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.gameObject.name == "quete1")
        {
            Destroy(collision.gameObject.GetComponent<CircleCollider2D>());
            quete.SetActive(true);
            StartCoroutine("HideQuest");
        }

        if (collision.gameObject.name == "chest")
        {
            Destroy(collision.gameObject);
            chestOk = true; // quete fini
            Destroy(colliderPnj);
        }
    }

    IEnumerator HideQuest()
    {
        yield return new WaitForSeconds(3);
        quete.SetActive(false);
    }
}

 

Comments are closed.