您的位置:首页 > 移动开发 > Unity3D

游戏项目实践(二)

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,具体操作方法还需研究。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息