Unity3d鼠标点击屏幕来控制人物的走动
今天呢,我们来一起实现一个在RPG中游戏中十分常见的功能,通过鼠标点击屏幕来控制人物的走动。首先来说一下原理,当我们点击屏幕时,我们按照一定的方法,将屏幕上的二维坐标转化为三维坐标,然后我们从摄像机位置发射 一条经过该点的射线,则这条射线与大地平面的交点,就是我们的目标位置。那么确定了这个位置以后,我们需要做的就是让角色从原来的位置移动到这个位置,并在其间添加角色动画即可。对于角色移动的问题,如果复杂点的画我们可能要计算移动的方向向量,并针对起点和终点进行插值计算来实现,这里我们选择一种相对简单的办法,在Unity3D中,有一个LookAt()方法,该方法可以使物体发生旋转,使其z轴始终指向目标物体。再完成了旋转后,我们需要让物体沿着Z轴方向(forward)移动。这样就实现了鼠标点击控制人物走动这一功能。好了,下面我们来一起看今天的内容吧!
首先创建一个场景,我们准备一个地形Terrain和平行光Direction Light,并拖入我们事先准备好的人物模型,如图:
接下来为模型添加动画组件,并将动画的类型设置为Legacy模式,如图所示:
我们设置默认的动画为idle,接下来,我们来编写脚本代码:
using UnityEngine; using System.Collections;public class PeopleControl : MonoBehaviour { //目标点坐标 private Vector3 mTargetPos; void Start () { } void Update () { //按下鼠标右键时 if(Input.GetMouseButton(1)) { //获取屏幕坐标 Vector3 mScreenPos=Input.mousePosition; //定义射线 Ray mRay=Camera.main.ScreenPointToRay(mScreenPos); RaycastHit mHit; //判断射线是否击中地面 if(Physics.Raycast(mRay,out mHit)) { if(mHit.collider.gameObject.tag=="Terrain") { //获取目标坐标 mTargetPos=mHit.point; //让主角面朝目标坐标并向目标移动 transform.LookAt(mTargetPos); //播放奔跑动画 transform.gameObject.GetComponent<Animation>().Play("run"); transform.Translate(Vector3.forward * 0.5F); } } } //松开鼠标右键时 if(Input.GetMouseButtonUp(1)) { transform.gameObject.GetComponent<Animation>().Play("idle"); } } }
将脚本绑定到角色上以后,我们就能看到下面的效果啦,哈哈:)
这就是今天的内容啦,当然我们还需要解决的问题还有如何在控制人物走动的时候避免和其它物体发生碰撞,以及后续的优化问题,这些内容我们会在后面的文章中为大家解答,谢谢大家!喜欢我请记住我的名字
Unity3d鼠标点击屏幕来控制人物的走动相关推荐
- AHK 键盘控制鼠标点击屏幕不同位置
按键控制鼠标点击屏幕特定位置 按键控制重设屏幕点击位置 按键显示当前鼠标在屏幕上的位置 V1.0代码功能: 按 A 和 D 分别对应点击两个单独的屏幕坐标 按 Q 和 E分别对应重新设置两个单独的屏幕 ...
- unity3d]鼠标点击地面人物自动走动(也包含按键wasdspace控制)
目录(?)[-] 一效果图 二大概步骤 创建一个plane设置层为Terrain因为后面要判断是否点击的是这个层 准备好人物模型并且将三个脚本拖放到人物上并且将动画文件也拖放好记得看前面提醒哦 Thi ...
- java怎样自动调用鼠标点击屏幕固定地方_python办公自动化:让PyAutoGUI来帮你干活...
做不完的工作,写不完的文档,粘贴不完的excel,打不完的 word,讨厌的996,今天我将会带领一个你专属的机器人送给你,让它来代替你做这些重复性的工作,只要你能动脑经把工作分解成若干步可重复的劳动 ...
- Unity3D鼠标&Touch拖拽控制节点绕任意轴旋转的实现
这个拖拽最明显的一个优点就是有阻尼的效果 阻尼(damping)是指摇荡系统或振动系统受到阻滞使能量随时间而耗散的物理现象 using UnityEngine; using System.Collec ...
- java 控制鼠标点击_java中控制鼠标点击的方法
//利用java.awt.Robot类来自一些键盘或鼠标的动作,下流程:模拟鼠标左键点击-->运行-->CMD-->DIR-->CLS-->EXIT//模拟右键点击移动到 ...
- Unity3D鼠标、WASD空格键盘控制摄像机及esc键退出C#脚本
C#控制WASD键盘前后左右及空格键抬升高度脚本代码如下: using UnityEngine; using System.Collections;public class CameraControl ...
- unity3D 鼠标点击游戏物体碰撞 (射线)
先把与射线发生碰撞的游戏物体的Layer层改成MapCube 添加脚本
- unity3d 鼠标点击事件处理 处理鼠标点击
1.物体zengjbox collider碰撞器 2.代码 using UnityEngine; using System.Collections;public class MemoryCard : ...
- 控制角色点击屏幕可以前后左右移动及缓慢转身
using System.Collections; using System.Collections.Generic; using UnityEngine; public class jsyidong ...
最新文章
- xcode5 delete provisioning profile
- 复习webpack4之Code Splitting
- WinSCP断线,WinSCP总是断线,断线重连过程又需要卡很长时间解决办法
- sc7cb27180 士兰微_供应 SILAN/士兰微 SC7A30E SC7A30 LGA10-3A 加速度计/三轴磁传感器
- 【普通の随笔】3.26
- 解决webpack4版本在打包时候出现Cannot read property ‘bindings‘ of null 或 Cannot find module ‘@babel/core‘问题
- VB 游戏外挂操作类
- ROR no such file to load -- sqlite3 错误解决方法
- Github Star 4.6K,3.5M超超轻量中英文OCR模型开源,火了!
- STM32CUBEF4 实现USB 虚拟串口
- ubuntu 开启dhcp服务并配置
- 局域网内抢带宽的工具 破解版 【PSP流量限制软件】
- linux基础(四)——任务调度cron和anacron
- ubuntu下配置nginx支持phpt(unix:/var/run/php5-fpm.sock failed (2: No such file or directory) )
- 简单学习SIPp使用手册
- guid主分区表损坏如何处理_【硬盘分区表错误】硬盘分区表错误原因_硬盘分区表损坏...
- CROSSFORMER: A VERSATILE VISION TRANSFORMER BASED ON CROSS-SCALE ATTENTION
- lcd显示器测试软件,tLCDtest(液晶屏幕测试软件)
- 真正的端到端超像素网络——Superpixel Segmentation with Fully Convolutional Networks(CVPR2020)
- 机器学习中的特异性和敏感性