1
This commit is contained in:
95
unity/Assets/Script/DialogSystem/DialogueSystem.cs
Normal file
95
unity/Assets/Script/DialogSystem/DialogueSystem.cs
Normal file
@@ -0,0 +1,95 @@
|
||||
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<int, List<DialogNode>> dialogNodes = new Dictionary<int, List<DialogNode>>();
|
||||
private void Awake()
|
||||
{
|
||||
foreach (var dia in dialogue.dialogNode)
|
||||
{
|
||||
if (!dialogNodes.ContainsKey(dia.npcID))
|
||||
{
|
||||
dialogNodes.Add(dia.npcID,new List<DialogNode> { 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<UITip>().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);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user