Unity 网络游戏黑暗之光笔记

第四章 任务系统的实现

注意要点

在把鼠标放在任务面板上点击时,为了让角色不移动,在PlayerDir脚本的Update方法中的第一个if判定语句中添加一句,由于NGUI版本的原因使用下面一行代码

 if (Input.GetMouseButtonDown(0)&& UICamera.isOverUI==false)
  • NPCBar脚本
    public TweenPosition questTween;
    public UILabel desLabel;
    public GameObject acceptBtnGo;
    public GameObject okBtnGo;
    public GameObject cancelBtnGo;
    public bool isInTask = false;//表示是否在任务中
    public int killCount = 0;//表示任务进度,已经杀死了几只小野狼

    private PlayerStatus status;

    void Start()
    {
        //查找方法,获取状态
        status = GameObject.FindGameObjectWithTag(Tags.player).GetComponent<PlayerStatus>();
    }

    void OnMouseOver()
    {//当鼠标位于这个collider之上的时候,会在每一帧调用这个方法
        if (Input.GetMouseButtonDown(0))
        {//当点击了老爷爷
            if (isInTask)
            {
                ShowTaskProgress();
            }
            else
            {
                ShowTaskDes();
            }
            ShowQuest();
        }
    }
    void ShowQuest()
    {
        questTween.gameObject.SetActive(true);
        questTween.PlayForward();
    }
    void HideQuest()
    {
        questTween.PlayReverse();
       // questTween.gameObject.SetActive(false);
    }
    void ShowTaskDes()
    {
        desLabel.text = "任务:\n杀死了10只狼\n\n奖励:\n1000金币";
        okBtnGo.SetActive(false);
        acceptBtnGo.SetActive(true);
        cancelBtnGo.SetActive(true);
    }
    void ShowTaskProgress()
    {
        desLabel.text = "任务:\n你已经杀死了" + killCount + "\\10只狼\n\n奖励:\n1000金币";
        okBtnGo.SetActive(true);
        acceptBtnGo.SetActive(false);
        cancelBtnGo.SetActive(false);
    }

    //任务系统 任务对话框上的按钮点击时间的处理
    public void OnCloseButtonClick()
    {
        HideQuest();
    }

    public void OnAcceptButtonClick()
    {
        ShowTaskProgress();
        isInTask = true;//表示在任务中
    }

     
    public void OnOkButtonClick()
    {
        if (killCount >= 10)
        {//完成任务
            //获得金币
            status.GetCoint(1000);
            //数量归零
            killCount = 0;
            ShowTaskDes();
        }
        else
        {
            //没有完成任务
            HideQuest();
        }
    }
    public void OnCancelButtonClick()
    {
        HideQuest();
    }
  • 鼠标指针管理

创建GameSetting游戏物体加载CursorManager组件并且制定好指针图片

    public static CursorManager _instance;
    public Texture2D cursor_normal;
    public Texture2D cursor_npc_talk;
    public Texture2D cursor_attack;
    public Texture2D cursor_lockTarget;//锁定目标
    public Texture2D cursor_pick;

    //设置热点
    private Vector2 hotspot = Vector2.zero;
    //指针的类型,自动选择鼠标软硬件的指针
    private CursorMode mode = CursorMode.Auto;

    //设置为单例模式
    void Start()
    {
        _instance = this;
    }
    public void SetNormal()
    {
        Cursor.SetCursor(cursor_normal, hotspot, mode);
    }
    public void SetNpcTalk()
    {
        Cursor.SetCursor(cursor_npc_talk, hotspot, mode);
    }


创建NPC脚本并且是NPCBar继承NPC

    //每一帧都要调用
    private void OnMouseEnter()
    {
        CursorManager._instance.SetNpcTalk();
    }
    private void OnMouseExit()
    {
        CursorManager._instance.SetNormal();
    }