using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class DialogueSystem : MonoBehaviour { [SerializeField] private Dialogue dialogue; [SerializeField] private GameObject dialogBox; [SerializeField] private Text dialog; [SerializeField] private Text characterName; [SerializeField] private Image characterSprite; [SerializeField] private CharacterType type; private int index; private bool isInTurn; private int npcId; public Dictionary> dialogNodes = new Dictionary>(); private void Awake() { foreach (var dia in dialogue.dialogNode) { if (!dialogNodes.ContainsKey(dia.npcID)) { dialogNodes.Add(dia.npcID,new List { dia}); } else { dialogNodes[dia.npcID].Add(dia); } } } void Update() { if (Input.GetKeyDown(KeyCode.E) && isInTurn) { Play(); } } private void OnTriggerEnter2D(Collider2D collision) { if (collision.CompareTag("Npc")) { Debug.Log("aaa"); isInTurn = true; npcId = collision.GetComponent().GetNpcId(); } } private void OnTriggerExit2D(Collider2D collision) { if (collision.CompareTag("Npc")) { Debug.Log("bbb"); isInTurn = false; index = 0; dialogBox.SetActive(false); } } void Play() { dialogBox.SetActive(true); DialogNode node = dialogNodes[npcId][Mathf.Clamp(index++, 0, dialogNodes[npcId].Count - 1)]; if (index - 1 == dialogNodes[npcId].Count) { dialog.text = "抱歉,我很忙,你可以找一下事情做"; } else { dialog.text = node.dialog; } characterName.text = node.characterName; characterSprite.overrideSprite = node.characterSprite; if (index - 1 == dialogNodes[npcId].Count) { dialog.text = null; dialogBox.SetActive(false); } } }