【Unity3DRPG入门学习笔记第六卷】SetCursor 设置鼠标指针
在上一卷使用了 UnityEvent
,还用了序列化,在编辑器界面拖拽绑定事件对象,不太好维护,本卷换一种方式实现,先看 MouseManager.cs
中的更改
using System;
public event Action<Vector3> m_OnMouseClicked; // 鼠标点击事件
MouseManager.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;public class MouseManager : MonoBehaviour
{[Header("鼠标控制移动参数")]private RaycastHit m_HitInfo; // 射线击中信息private static MouseManager m_Instance; // 单例对象public event Action<Vector3> m_OnMouseClicked; // 鼠标点击事件public Texture2D m_Point, m_Doorway, m_Attack, m_Target, m_Arrow; // 鼠标指针纹理// --- private -------------------------------------private MouseManager() { }private void Awake(){m_Instance = this; // 初始化单例}private void Update(){SetCursorTexture(); // 切换鼠标贴图MouseControl(); // 鼠标控制}// --- public --------------------------------------public static MouseManager GetInstance(){if (m_Instance == null)m_Instance = new MouseManager();return m_Instance;}// --- private -------------------------------------/// <summary>/// @brief 切换鼠标贴图/// </summary>private void SetCursorTexture(){// 获取相机到鼠标点击点的射线Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);if (Physics.Raycast(ray, out m_HitInfo)){// 更换鼠标纹理switch (m_HitInfo.collider.gameObject.tag){case "Ground":Cursor.SetCursor(m_Target, new Vector2(16, 16), CursorMode.Auto);break;}}}/// <summary>/// @brief 鼠标控制/// </summary>private void MouseControl(){// 如果在边界内点击了左键if (Input.GetMouseButtonDown(0) && m_HitInfo.collider != null){if (m_HitInfo.collider.gameObject.CompareTag("Ground")) // 如果是地面m_OnMouseClicked?.Invoke(m_HitInfo.point); // 如果对象不为空,则调用所有已注册的回调}}
}
PlayerController.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;public class PlayerController : MonoBehaviour
{private NavMeshAgent m_Agent; // 导航网格动力源private void Awake(){m_Agent = GetComponent<NavMeshAgent>();}private void Start(){// 添加事件调用的方法MouseManager.GetInstance().m_OnMouseClicked += MoveToTarget;}private void Update(){}/// <summary>/// @brief 移动到目标点/// </summary>/// <param name="target"></param>public void MoveToTarget(Vector3 target){m_Agent.destination = target;}
}
本卷演示
The End.
【Unity3DRPG入门学习笔记第六卷】SetCursor 设置鼠标指针相关推荐
- 【Unity3DRPG入门学习笔记第五卷】MouseManager 鼠标控制人物移动
创建一个空物体用来管理鼠标脚本 添加脚本 MouseManager.cs 示例代码: using System.Collections; using System.Collections.Generi ...
- 【Unity3DRPG入门学习笔记第七卷】Cinemachine Post Processing 摄像机跟踪和后处理
一.相机跟随 1. 安装 Cinemachine 插件 2. 在 Hierarchy 面板中右键创建 Virtual Camera 3. 设置 Virtual Camera 参数 角色的中心默认在脚那 ...
- 【Unity3DRPG入门学习笔记第二卷】Build Level 熟悉基本工具
一.更换默认天空盒 1. 隐藏 Scene 天空盒 2. 导入天空盒素材 选择素材的时候看是否支持 URP 下载导入素材即可 有时候下载连接有问题,选择在 Unity 中打开就可以- 默认导入应该也是 ...
- 量子计算入门学习笔记(六 量子测量-上 )
经过了万恶的期末考试 之后,我们再次重新踏上量子学习的不归路(手动狗头)! 如果您是第一次观看我的博客,如果您也是和我一样刚入门量子力学或是量子计算相关的学习,纠结于量子计算的抽象与晦涩难懂,那么本专 ...
- 知识图谱入门学习笔记(六)-关系抽取
目录 0 前言: 1 语义关系: 1.1 句法关系 1.1.1 替代关系 1.1.3 同现关系(Relations of Co-occurence) 2 关系抽取的用处 2.1 关系抽取中的特征 ...
- 【Unity3DRPG入门学习笔记第四卷】Navigation 智能导航地图烘培
一.使用 Navigation 打开 Navigation 窗口 地面选择静态的(Navigation Static) 先处理地面,地面是可以行走的 (Walkable),树木占用的地方是不能行走的 ...
- 【Unity3DRPG入门学习笔记第一卷】创建项目导入素材
一.创建 3D (Core) 项目 1. 安装 Universal RP 2. 创建 New Universal Render Pipeline Asset 3. 项目设置 4. 导入素材 在选择的素 ...
- 【OpenCV入门学习笔记1】:Mat对象的指针操作和掩膜操作
b站:https://www.bilibili.com/video/BV1uW411d7Wf?p=5 下面是我在b站上看视频学习的笔记和操作的示例代码 实例代码 #include<opencv2 ...
- JavaScript学习笔记(六)(Jquery入门)
JavaScript学习笔记(六) 一.jQuery是什么? 二.jQuery的安装 三.载入事件区别 四.jQuery对象和DOM对象的区别 DOM对象和Jquery对象互转 五.选择器 5.1 j ...
最新文章
- Application Architecture - Table Data Gateway
- sharedpreferences 重启不保存_MMKV为什么可以替换SharedPreferences
- SAP UI5 BarcodeScannerButton 的初始化逻辑 - feature 检测,Cordova API 检测等逻辑
- 学数据库你竟然不用用JAVA写代码,可惜你遇到了我! JAVA连接数据库(JDBC)的安装使用教程
- 每日一笑 | 为什么英语老师让我们养成背单词的习惯?
- python打包成安装包_把 python 程序打包成 egg 或者 whl 安装包
- 关于java设计模式与极品飞车游戏的思考
- java jdbc jar包_通过 Spring 框架如何进行JDBC操作呢?
- 秦始皇嬴姓、赵氏,那“秦”是姓还是氏呢?
- arduino液位传感器_「雕爷学编程」Arduino动手做(24)——水位传感器模块
- Windows 8 系统安装
- 基于Node.js打造Web在线聊天室
- 计算机老出现安全警报怎么办,windows安全警报怎么关闭,教您怎么关闭windows安全警报...
- python csv写文件,用Excel打开中文乱码解决
- Mysql数据处理函数/单行处理函数
- 如何在H5页面中实现长按二维码关注微信公众号?
- Qt5中使用lambda表达式
- 杰里之电流声/杂音【篇】
- 玩了一下 SAP Fiori ABAP编程模型
- 分步傅里叶算法_分布快速傅里叶算法,split-step fast fourier transformed,音标,读音,翻译,英文例句,英语词典...
热门文章
- 芝加哥大学计算机语言学,芝加哥大学cs专业值得申请么?
- 微软向公众开放与新冠病毒相关的黑客攻击活动的威胁数据
- 8. 【gRPC系列学习】resetTransport建立TCP连接流程
- 实习日/周/月记学习计划(第一周)
- 视频号关联账号超1000个!品牌矩阵如何在视频号上“风生水起”?
- 【Qt】cmake 手册
- 计算机动画算法与编程基础pdf,清华大学 计算机动画算法与编程基础2-图形绘制课件.ppt...
- android jni中的java调c的两种方法
- StackOverflow网友Bert F发帖提问:哪本最具影响力的书,是每个程序员都应该读的?...
- 「Unity2D」使用Unity创建一个2D游戏系列-1