乐趣区

关于unity:Unity-游戏黑暗之光笔记第四章-任务系统的实现

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();
    }
退出移动版