游戏项目实践(二)
2015-01-09 22:18
134 查看
欢迎来到我的博客,谢谢大家的支持,如果有问题可以回复,我看到的话会尽快回复的。由于最近要制作我真正意义上的一个小游戏,现在正在做一些准备工作,今天想要实践完成游戏人对话。今天通过查找资料终于完成了游戏主人公在游戏中和NPC对话功能,有两种方式,下面我一一做介绍解释。
第一种方式看起来必计较简单:
1. 鼠标事件:OnMouseDown()方法
2.MonoBehavior类中的Reset()方法
用这两个方法实现Box中内容的的显示和隐藏,这样可以实现和NPC对话效果,下面是一个简单代码运用
string str1 = "你要买什么";
bool flag = false;
void OnMouseDown()
{
flag = true;
}
void OnGUI()
{
if (flag)
{
GUI.Box(new Rect(20, 80, 150, 70), str1);
bool a = GUI.Button(new Rect(90, 120, 30, 20), "是");
if (a)
{
flag = false;
}
GUI.Button(new Rect(120, 120, 30, 20), "否");
}
}
void Reset() { }
可以实现的效果:鼠标点击NPC
鼠标点击 按钮”是“,对话框消失:
第二种方式需要用到索引,可以实现NPC介绍剧情等功能:
1. 将NPC的话放入数组
2.射线来判断鼠标点中NPC,出发GUIText
3.enabled 标志为可以现实和隐藏GUIText
//定义NPC对话数据
private string[] Data ={ { "你好,我是NPC",
"你终于来了",
"你想要杀死恶魔需要给子弹附加魔法",
"附魔只有城主大人会",
"城主现在睡觉,你最好明天再来",
"明天见"};
//当前对话索引
private int index = 0;
//用于显示对话的GUI Text
public GUIText Text;
void Update()
{
AnimationToIdle();
//从角色位置向NPC发射一条经过鼠标位置的射线
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
//判断是否击中了NPC
if (Physics.Raycast(ray, out hit))
{
//如果击中了NPC
if (hit.collider.gameObject.tag == "NPC")
{
if (Input.GetMouseButtonDown(0))
{
//绘制指定索引的对话文本
if (index < Data.Length)
{
Text.enabled = true;
Text.text = "NPC:" + Data[index];
index = index + 1;
}
else
{
Text.enabled = false;
}
}
}
}
}
游戏效果:鼠标点击NPC,依次打印NPC的话,下面是部分内容截取
总结问题:
1.第二种方式有小缺陷,主人公如果加入”run“动画,需要点击NPC主人公一直播放动画(主人公移动用的是unity自带的自动寻径组件)。
2.今天本来还想实现游戏进度存储,然同一个玩家可以在退出游戏后,下次进入游戏可以接着退出进度玩,但是只找到需要用到PlayerPrefs,具体操作方法还需研究。
第一种方式看起来必计较简单:
1. 鼠标事件:OnMouseDown()方法
2.MonoBehavior类中的Reset()方法
用这两个方法实现Box中内容的的显示和隐藏,这样可以实现和NPC对话效果,下面是一个简单代码运用
string str1 = "你要买什么";
bool flag = false;
void OnMouseDown()
{
flag = true;
}
void OnGUI()
{
if (flag)
{
GUI.Box(new Rect(20, 80, 150, 70), str1);
bool a = GUI.Button(new Rect(90, 120, 30, 20), "是");
if (a)
{
flag = false;
}
GUI.Button(new Rect(120, 120, 30, 20), "否");
}
}
void Reset() { }
可以实现的效果:鼠标点击NPC
鼠标点击 按钮”是“,对话框消失:
第二种方式需要用到索引,可以实现NPC介绍剧情等功能:
1. 将NPC的话放入数组
2.射线来判断鼠标点中NPC,出发GUIText
3.enabled 标志为可以现实和隐藏GUIText
//定义NPC对话数据
private string[] Data ={ { "你好,我是NPC",
"你终于来了",
"你想要杀死恶魔需要给子弹附加魔法",
"附魔只有城主大人会",
"城主现在睡觉,你最好明天再来",
"明天见"};
//当前对话索引
private int index = 0;
//用于显示对话的GUI Text
public GUIText Text;
void Update()
{
AnimationToIdle();
//从角色位置向NPC发射一条经过鼠标位置的射线
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
//判断是否击中了NPC
if (Physics.Raycast(ray, out hit))
{
//如果击中了NPC
if (hit.collider.gameObject.tag == "NPC")
{
if (Input.GetMouseButtonDown(0))
{
//绘制指定索引的对话文本
if (index < Data.Length)
{
Text.enabled = true;
Text.text = "NPC:" + Data[index];
index = index + 1;
}
else
{
Text.enabled = false;
}
}
}
}
}
游戏效果:鼠标点击NPC,依次打印NPC的话,下面是部分内容截取
总结问题:
1.第二种方式有小缺陷,主人公如果加入”run“动画,需要点击NPC主人公一直播放动画(主人公移动用的是unity自带的自动寻径组件)。
2.今天本来还想实现游戏进度存储,然同一个玩家可以在退出游戏后,下次进入游戏可以接着退出进度玩,但是只找到需要用到PlayerPrefs,具体操作方法还需研究。
相关文章推荐
- 第14周上机实践项目5——体会棋盘游戏中的数据存储(2)
- 游戏项目实践(一)
- 第六周上机实践项目-项目2-带武器的游戏角色
- 第六周上机实践项目——项目2-带武器的游戏角色
- 第六周上机实践项目2:带武器的游戏角色
- Cocos2d-x手机游戏开发与项目实践详解_随书代码
- 第八周上机实践项目4(1):游戏中角色类增强版
- 第五周上机实践项目2(1):游戏中的角色类
- 第五周上机实践项目——项目2-游戏中的角色类(2)
- 第八周上机实践项目——项目4-游戏中的角色类增强版-问题(2)
- 《C语言及程序设计》实践项目——数字游戏
- 第五周上机实践项目——项目2-游戏中的角色类-(2)
- 第五周上机实践项目——项目2-游戏中的角色类-(1)
- 第五周上机实践项目2(2):游戏中的角色类
- 第四次上机实践项目-项目2-游戏中的角色类-(1)
- 第14周上机实践项目5——体会棋盘游戏中的数据存储(3)
- 第三次上机实践项目-项目3-猜数字游戏
- 第五周实践项目2————游戏中的角色类(1)
- 第五周上机实践项目 项目2--游戏中的角色类(1)
- 第八周上机实践项目——项目4-游戏中的角色类增强版-问题(3)