不知道大家有没有玩过红色警戒?—— 一款即时战略游戏,和罪恶都市一样小编小学的时候就开始玩了,这款游戏控制单位角色移动是通过鼠标的点击来实现。
同样的操作方法还有英雄联盟等很多游戏,那本篇文章小编就通过简单小实例来讲解这种操作在Unity中是如何实现的。
小编先展示一下实例的演示动图:红色球体表示我们控制的角色,鼠标左键点击小球就会到相应的坐标位置并打印坐标。
先来讲一下这种操作方式的原理:它其实是从摄像机发射出的一条射线。当鼠标点击的时候,射线就从摄像机发射打到你点击的位置,通过检测射线获取到位置坐标,角色就向这个坐标移动。
?注:射线发射后碰到的游戏物体必须要有碰撞组件才会被检测到,演示动图中点击平面区域以外的地方是没有任何反应的。
创建射线的两种方法:该实例是通过摄像机创建射线
//创建射线的两种方法:
//方式一 通过向量创建
Ray ray1 = new Ray(Vector3.zero , Vector3.up);
//方式二 通过摄像机创建
Ray ray2 = Camera.main.ScreenPointToRay(Input.mousePosition);
新建一个平面一个球体,球体挂载上红色的材质方便我们观察,新建RayTest脚本用来检测射线并挂载到球体上。
public class RayTest : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
//当点击鼠标左键时执行
if(Input.GetMouseButtonDown(0))
{
//按下鼠标左键发射射线 射线发射后碰到的游戏物体必须要有碰撞组件才会被检测到
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
//声明一个碰撞信息类
RaycastHit hit;
//碰撞检测用布尔类型表示
bool res = Physics.Raycast(ray,out hit);
//如果碰撞到的情况下,hit就有内容了
if (res == true)
{
//打印出碰撞信息的坐标
Debug.Log(hit.point);
//把坐标赋值给球体,球体位置就会直接闪现到射线检测点
transform.position = hit.point;
}
//多检测
//RaycastHit[] hits = Physics.RaycastAll(ray, 100, 1 << 10);
}
}
}
点击运行就是动图的演示效果了,很简单的一个实例,拜拜┏(^0^)┛