欢迎来到unity学习社区
今天的内容与npc对话
首先,根据用户鼠标的位置向NPC发射射线,如果射线击中了NPC,则进入对话状态。当用户按下空格键或者单击鼠标左键时,开始显示事先定义好的NPC对话数据。今天采取的方式是在场景中使用GUI Text ,然后在脚本中更新它的内容,这样就实现了与NPC对话的目的。搭建的场景如图:
对象npc挂载的脚本
我们接下来向场景中拖入一个熊的模型作为我们这里的NPC,在Tag中添加NPC后,为其设置NPC标签,并加上一个合适的触发器,这里使用的是胶囊触发器。接下来,我们创建一个GUI Text,它将作为我们显示NPC对话的一个GameObject。到目前为止,场景我们已经搭建完成了。接下来,我们来编写用于控制NPC对话的脚本Npc1Talk .cs:
public class Npc1Talk : MonoBehaviour {
//定义NPC对话数据
private string[] mData ={"你好,我是NPC","你的事我已经知道了",
"为救你的星碟,我可以给你一些建议","你需要先去提升你的等级才能去拯救星碟","快去旁边的农场种白菜去吧"
,"好了,希望我的话可以对你有所帮助"};
//当前对话索引
private int index = 0;
//用于显示对话的GUI Text
public GUIText mText;
//是否显示对话标示贴图
private bool isTalk = false;
float a = 5f;
void Start()
{
mText.enabled = false ;
}
void Update()
{
//从角色位置向NPC发射一条经过鼠标位置的射线
Ray mRay = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit mHi;
//判断是否击中了NPC
if (Physics.Raycast(mRay, out mHi))
{
//如果击中了NPC
if (mHi.collider.gameObject.tag == "NPC1")
{
//进入对话状态
isTalk = true;
//允许绘制
if (Input.GetKeyDown(KeyCode.Space) || Input.GetMouseButtonDown(0))
{
//绘制指定索引的对话文本
if (index < mData.Length)
{
mText.enabled = true;
mText.text = "NPC:" + mData[index];
index = index + 1;
}
else
{
index = 0;
mText.text = null;
}
}
}
}
}