【鼠标点击实现移动】

第一步,在要移动的GameObject的Inspector面板中添加角色控制器组件并调整参数。

参数的调整可以依照Scene面板,如下图的绿色线框(角色控制器组件是一种胶囊形状的特殊刚体,这里我把Height调整为了0所以是球体的样子):

第二步,在 要移动的GameObject 的 脚本 中先声明下面的变量:

 private CharacterController m_CharacterController;    //角色控制器组件的引用
private Vector3 targetPosition = Vector3.zero; //用于存放要到达位置的坐标,归零表示暂时不需要移动
private RaycastHit hitInfo;           //存放碰撞检测信息(点击射线与地面的碰撞的信息)

第三步,在脚本的Update方法里实现鼠标点击获取目的地坐标(当然把下述代码封装在一个方法里,再在Update方法中调用也可以):

         if (Input.GetMouseButtonUp())//参数0是左键,1是右键
{ //生成由一道 由主Camera至屏幕点击处 的射线
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
4 //检测射线与地面是否碰撞并额外返回碰撞信息至hitInfo变量,第三个参数确定射线长度,第四个参数确定开启检测的layer(在本例子里地面处于defaul层,即第0层)
if (Physics.Raycast(ray, out hitInfo,Mathf.Infinity,<<))
{//讲hitInfo中关于碰撞点的位置存贮至targetPosition变量中
targetPosition = hitInfo.point;
} }
//空格键停止移动
if (Input.GetKeyUp(KeyCode.Space)) {targetPosition = Vector3.zero;}

最后一步,在脚本的Update方法中实现物体的移动(下述代码也可以封装在一个方法里,然后在Update方法中调用也可以,但注意,在调用这段代码前,targetPosition要先获取的目的地坐标):

 //坐标归零则不需要移动
if (targetPosition == Vector3.zero) { return; }
//先检测物体与坐标与目的坐标,大于0.1f则继续朝向移动,注意:这里不能判断条件不可以写>0,因为实际运行时两的点的距离通常不会为零,而是零点几
if (Vector3.Distance(transform.position, targetPosition) > 0.1f){
Vector3 direction = targetPosition - transform.position; //获得方向向量
direction = direction.normalized; //方向向量归一化
transform.LookAt(new Vector3(targetPosition.x,transform.position.y, targetPosition.z)); //物体Z轴指向目的地坐标
m_CharacterController.Move(direction *Time.deltaTime* ); //调用组件移动方法,方向向量作为参数传入
}
else
{ //到达目的地则targetPosition归零
targetPosition = Vector3.zero;
}

Last but not least,再强调一下比较重要的三个地方。

1、第二段代码第5行:

if (Physics.Raycast(ray, out hitInfo,Mathf.Infinity,1<<0))
方法的第二个参数添加额外返回值,第四个参数开启指定图层的碰撞检测。

2、第三段代码第4行的判断条件: 

Vector3.Distance(transform.position, targetPosition) > 0.1f
这里判断条件不要写>0,因为实际运行时,两点距离为一个小数,写>0的话,物体到达目的地后不会停下,而是围着目的地转。

3、第三段代码第6行:

direction = direction.normalized;
 方向向量的归一化。 

【Unity3D】简单常用的功能实现1——鼠标点击实现移动的更多相关文章

  1. 【Unity3D】简单常用的功能实现2——视角的跟随、旋转、缩放

    [视角的跟随.旋转.缩放实现] 首先,在实现这些功能之前,我们给Hierarchy面板中的主摄像机额外包装几层Empty Object,形成一个新的摄像机结构,如下图(当然这些空物体的命名大家按自己方 ...

  2. 【Unity3D基础】让物体动起来②--UGUI鼠标点击逐帧移动

    背景 上一篇通过鼠标移动的代码很简单,所以看的人也不多,但是还是要感谢“武装三藏”在博客园给出的评论和支持,希望他也能看到第二篇,其实可以很简单,而且是精灵自控制,关键是代码少是我喜欢的方式,也再次印 ...

  3. 【Unity3D基础】让物体动起来①--UGUI鼠标点击移动

    背景 首先还是先声明自己是比较笨的一个人,总是找不到高效的学习方法,目前自己学习Unity3D的方式主要是两种,一种是直接看高质量的源码,另一种是光看不行还要自己动手,自己写一些有代表性的小程序,这也 ...

  4. Unity3D事件顺序与功能

    Unity3D中所有控制脚本的基类MonoBehaviour有一些虚函数用于绘制中事件的回调,也可以直接理解为事件函数,例如大家都很清楚的Start,Update等函数,以下做个总结. Awake 当 ...

  5. ASP.NET MVC 学习4、Controller中添加SearchIndex页面,实现简单的查询功能

    参考:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/examining-the-edit-method ...

  6. iOS常用小功能

    CHENYILONG Blog 常用小功能 技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http://weibo.com/luohanchenyilong  ...

  7. iOS 常用小功能 总结

    常用小功能 iOS中的很多小功能都是非常简单的,几行代码就搞定了,比如打电话.打开网址.发邮件.发短信等 打电话 方法一(不被采用): 拨号之前会弹框询问用户是否拨号,拨完后能自动回到原应用 NSUR ...

  8. Unity UGUI 实现简单拖拽功能

    说到拖拽,那必然离不开坐标,UGUI 的坐标有点不一样,它有两种坐标,一种是屏幕坐标,还有一种就是 UI 在Canvas内的坐标(暂时叫做ugui坐标),这两个坐标是不一样的,所以拖拽就需要转换. 因 ...

  9. 一步一步学Silverlight 2系列(5):实现简单的拖放功能

    述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

随机推荐

  1. Ubuntu k80深度学习环境搭建

    英伟达驱动安装 英伟达驱动下载:https://www.nvidia.cn/Download/driverResults.aspx/135493/cn/ 由于是驱动的冲突,那么自然是要杀掉和显卡结合不 ...

  2. Oracle 导入数据库dmp文件

    场景:windows2008 R2系统 ,往新安装的oracle11g数据库导入同事给的dmp文件到指定的新建的用户. 1.创建表空间 在导入dmp文件之前,先打开查看dmp文件的表空间名称(tabl ...

  3. Hills——一道转移方程很“有趣”的线性DP

    题目描述 Welcome to Innopolis city. Throughout the whole year, Innopolis citizens suffer from everlastin ...

  4. 利用IDEA搭建JDK源码阅读环境

    利用IDEA搭建JDK源码阅读环境 首先新建一个java基础项目 基础目录 source 源码 test 测试源码和入口 准备JDK源码 下图框起来的路径就是jdk的储存位置 打开jdk目录,找到sr ...

  5. Github Actions简单部署一个vue/react项目

    大体介绍 本文对github actions部署前端项目做一个简单的总结,总体来说,我感觉用它想要部署一个前端项目,可以说非常简单,简单得令人震惊

  6. day44 初识数据库

    目录 一.数据的演变 二.数据库 三.MySQL 1 基本原理 2 重要概念介绍 3 安装 4 启动 5 sql基本语句 6 环境变量的配置及系统服务制作 7 关于密码 8 统一编码 9 基本sql语 ...

  7. sass-loader安装+Failed to resolve loader: sass-loader You may need to install it.解决方法

    方式一: 通过 cnpm 安装node-sass cnpm install node-sass --save 方式二: 通过npm 安装 1.安装sass-loader npm install sas ...

  8. 数据可视化之powerBI入门(五)PowerQuery,支持从多种源导入数据

    PowerBI的强大绝不仅是最后生成炫酷的可视化报告,她在第一步数据获取上就显示出了强大的威力,利用Power Query 的强大数据处理功能,几乎可以从任何来源.任何结构.任何形式上获取数据 htt ...

  9. XSS原理及代码分析

    前言 XSS又叫跨站脚本攻击,是一种对网站应用程序的安全漏洞攻击技术.它允许恶意用户将代码注入网页,其他用户在浏览网页时就会受到影响.XSS分为三种:反射型,存储型,和DOM型.下面我会构造有缺陷的代 ...

  10. L-BFGS算法详解(逻辑回归的默认优化算法)

    python信用评分卡建模(附代码,博主录制) https://study.163.com/course/introduction.htm?courseId=1005214003&utm_ca ...