今天我们来完成游戏中NPC的对话。 对于游戏中的NPC的对话,可以有许多方法做出来。不过这次我要介绍的是,通过碰撞OnTriggerEnter()的方法。 下面我们就来详细解刨一下代码。以下代码都是用C#写出来的。 using UnityEngine;
using System.Collections; public class Npc : MonoBehaviour {
bool flag = false, flag1, flag2; //定义三个判断的标志位
public static bool flag3; //接受任务的标志位
void Update()
{ //定义一个鼠标点击的射线 Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); //定义光线投射碰撞
RaycastHit hit; //判断是否碰撞
if (Physics.Raycast(ray, out hit))
{ //碰撞判断目标是否是NPC1
if (hit.collider.tag == "NPC1")
{ //鼠标单击事件
if (Input.GetMouseButtonDown(1))
{ //第一个标志是真。
flag = true;
} }
}
}
void OnMouseDown()
{ //第一个标志位是真。
flag = true;
}
void OnGUI()
{ // 如果标志位为真
if (flag)
{ //GUI的label中的字体大小为10. GUI.skin.label.fontSize = 10;
GUI.Box(new Rect(0, 450, 700, 200), "你好,我是诸葛神机");
GUI.Label(new Rect(0, 500, 200, 100), "能力不够去帮我采蘑菇,采完给你奖励,小心,你现在打不过哪些怪物,好了去吧,等你回来");
if (GUI.Button(new Rect(50, 450, 50, 30), "接受")) //如果单击了按钮。
{ //第一个表示为真
flag = false;
} //如果单击”关闭“按钮
else if (GUI.Button(new Rect(0, 450, 50, 30), "关闭"))
{
//标志位为真
flag = false;
}
} //如果标志位2为真
else if (flag2)
{
GUI.Box(new Rect(0, 450, 700, 200), "你好,我是诸葛神机");
GUI.Label(new Rect(0, 500, 200, 100), "好吧,看在你这么努力的份上,给你10个金币吧");
if (GUI.Button(new Rect(0, 450, 50, 30), "拒绝")) //单击拒绝按钮
{ //标志位2为真。
flag2 = false;
}
} //或者标准位3为真
else if (flag3)
{
GUI.Box(new Rect(0, 450, 700, 200), "你好,我是诸葛神机");
GUI.Label(new Rect(0, 500, 200, 100), "能力不够去帮我采蘑菇,采完给你奖励,小心,你现在打不过哪些怪物,好了去吧,等你回来");
if (GUI.Button(new Rect(0, 450, 50, 30), "关闭")) //单击关闭按钮
{ //标志位2为真
flag2 = false;
}
} }
} 注意: 以上就是NPC的对话,实现。里面用来很多标志位。再看时要仔细看清楚。 最重要的是。你不能通过按钮判断直接弹出GUI.Label里面的内容。 举个例子: if(GUI.Button(new Rect(100,200,111,222,),"确定")) { GUI.Lable(new Rect(211,121,233,123),"恭喜你过关!"); } 这段代码在OnGUI中是不能被调用的。所以要用标志位flag,完成这段GUI.Label内容的显示。 把上面的代码改一下就能出来了。 if(GUI.Button(new Rect(100,200,111,222,),"确定")) { flag=true; } if(flag) { GUI.Lable(new Rect(211,121,233,123),"恭喜你过关!"); } 这样通过标志位就完成了GUI.Label内容的显示。更多精彩内容请到: /
如果觉得《角色游戏二(NPC对话)》对你有帮助,请点赞、收藏,并留下你的观点哦!