首先新建一个空白的GameObject,挂在一个MouseManager的脚本
实现思路:
通过获取鼠标点击的位置,获得该位置的信息,然后使角色移动到该位置
MouseManager脚本的代码如下:
1 using System;
2 using System.Collections;
3 using System.Collections.Generic;
4 using UnityEngine;
5 using UnityEngine.Events;
6
7 public class MouseManager : MonoBehaviour
8 {
9 public event Action<Vector3> OnMouseClicked;//声明一个Action<Vector3>类型的事件
10 public RaycastHit hitInfo;//RaycastHit类型的变量,可以返回射线碰撞的的信息
11 public static MouseManager Instance;
12 public Texture2D attack, b, c, d, target;
13
14 void Awake()
15 {
16 if (Instance != null)
17 {
18 Destroy(gameObject);
19 }
20 Instance = this;
21 }
22 void Update()
23 {
24 SetCursorTexture();
25 MouseControl();
26 }
27 void SetCursorTexture()
28 {
29 Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
30 if (Physics.Raycast(ray, out hitInfo))
31 {
32 //切换鼠标贴图
33 switch (hitInfo.collider.gameObject.tag)
34 {
35 case "Ground":
36 Cursor.SetCursor(target, new Vector2(16, 16), CursorMode.Auto);
37 break;
38 case "Enemy":
39 Cursor.SetCursor(attack, new Vector2(16, 16), CursorMode.Auto);
40 break;
41 }
42 }
43 }
44 void MouseControl()
45 {
46 if (Input.GetMouseButtonDown(0) && hitInfo.collider != null)
47 {
48 if (hitInfo.collider.CompareTag("Ground"))
49 OnMouseClicked?.Invoke(hitInfo.point);
50 }
51 }
52 }
代码解释:
先创建了一个Action类型的事件OnMouseClicked
这个是C#中事件的内容,我们可以在满足条件的时候自动触发这个OnMouseClicked的事件
接着我们声明两个函数,一个是SetCursorTexture,一个是MouseControl
第一个函数中,我们声明一个射线的对象ray,并且用Camera.Main.ScreenPointToRay()获取从摄像机通过屏幕点的光线
ScreenPointToRay()的参数为鼠标点击的位置,这样我们的对象ray就获得了我们鼠标点击的位置信息
Raycast回返回一个bool值,我这边用了两个参数,一个是我们的射线ray,一个是out的hitInfo,也就是返回的信息
那么当我们返回值为true的时候,我们会有一个切换鼠标贴图的效果
其中SetCursor中有个参数是偏移量,也就是上述代码中的new Vector2,因为鼠标指针判定是在左上角的,调节适当的偏移量,可以使你变换后的指针可以使其作用点在中心
(PS:我声明的几个Texture2D中,有几个没有意义的字母,是留着备用的,目前还没想到哪些功能需要使用)
第二个函数MouseControl的第一个if中,
我们如果鼠标按下了左键(函数的参数0即为鼠标左键,1为鼠标右键)并且我们射线碰撞不为空,
那么我们执行第二个if,第二个if表示 我们射线碰撞到的物体tag为Ground,那么我们执行OnMouseClicked函数
?.Invoke表示如果这个函数不为空,那么我们执行这个函数,和!=null是一个意思,这个写法较为便捷
Invoke中我们需要传入一个Vector3的参数,即为碰撞的Point
最后我们需要在Unity中设置一下我们Ground的Tag
至于鼠标切换贴图,需要在Unity里面进行操作:
先选中自己需要作为鼠标贴图的图片,打开Inspector窗口,设置为Cursor
下方的Max Size可以调整鼠标贴图的大小
关于射线的Unity 官方的API手册如下:
翻译
搜索文章来源:https://www.toymoban.com/news/detail-711013.html
复制文章来源地址https://www.toymoban.com/news/detail-711013.html
到了这里,关于Unity3D学习记录04——利用射线实现角色类似LOL的移动的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!