-
Unity3d鼠标点击屏幕来控制人物的走动
2015-01-16 14:21:29首先来说一下原理,当我们点击屏幕时,我们按照一定的方法,将屏幕上的二维坐标转化为三维坐标,然后我们从摄像机位置发射 一条经过该点的射线,则这条射线与大地平面的交点,就是我们的目标位置。那么确定了这个...今天呢,我们来一起实现一个在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"); } } }
将脚本绑定到角色上以后,我们就能看到下面的效果啦,哈哈:)这就是今天的内容啦,当然我们还需要解决的问题还有如何在控制人物走动的时候避免和其它物体发生碰撞,以及后续的优化问题,这些内容我们会在后面的文章中为大家解答,谢谢大家!喜欢我请记住我的名字
-
unity鼠标固定在屏幕中间_unity3D技术之屏幕内跟随鼠标移动
2020-12-24 19:46:07赋值给鼠标的Z;1usingUnityEngine;2usingSystem.Collections;34publicclassFollow:MonoBehaviour{5Vector3world;//物体要移动到的位置(世界坐标系)6floatmoveSpeed=0;//物体移动速度78voidUpdate(){9Vector3...赋值给鼠标的
Z
;
1
using
UnityEngine;
2
using
System.Collections;
3
4
public
class
Follow:
MonoBehaviour
{
5
Vector3
world;
//
物体要移动到的位置
(世界坐标系)
6
float
moveSpeed=
0
;
//
物体移动速度
7
8
void
Update(){
9
Vector3
targetposition=Camera.main.WorldToScreenPoint(
th
is
.transform.position);
//
将物体的世界坐标转
狗刨学习网
换为屏幕坐标
10
11
Vector3
mouseposition=Input.mousePosition;
//
鼠标在屏幕
上的位置坐标
12
13
if
(Input.GetMouseButton(
0
)){
14
mouseposition.z=targetposition.z;
15
16
//world=Camera.main.ScreenToWorldPoint(mous
e
position);//
这种情况下
会有穿透现象
17
18
world.x=Camera.main.ScreenToWorldPoint(mou
se
position).x;
19
world.z=Camera.main.ScreenToWorldPoint(mou
se
position).z;
20
world.y=
this
.transform.postion.y;
21
22
moveSpeed=
3
;
23
}
24
25
if
(
this
.transform.position==world){
//
如果物体移动到了鼠
标指定的位置
将移动速度设为
0
26
moveSpeed=
0
;
27
}
28
29
this
.transform.LookAt(world);
//
物体朝向鼠标对应的位置
(此时的位置为世界坐标系)
30
this
.transform.Translate(Vector3.forward*moveSpeed*Ti
me.deltaTime);
31
}
32
}
-
unity3d 屏幕坐标、鼠标位置、视口坐标和绘制GUI时使用的坐标
2017-09-02 09:05:12unity3d中的屏幕坐标系 是以 屏幕 左下角为(0,0)点 右上角为(Screen.Width,Screen.Height) 鼠标位置坐标与屏幕坐标系一致 视口坐标是以摄像机为准 以屏幕的左下角为(0,0)点 右上角为(1,1)点 绘制GUI界面...unity3d中的屏幕坐标系 是以 屏幕 左下角为(0,0)点 右上角为(Screen.Width,Screen.Height)
鼠标位置坐标与屏幕坐标系一致
视口坐标是以摄像机为准 以屏幕的左下角为(0,0)点 右上角为(1,1)点
绘制GUI界面时使用的坐标是以 屏幕 的左上角为(0,0)点 右下角为(Screen.width,Screen,Height)
经常会用到 某个物体的世界坐标到屏幕坐标的转化然后再屏幕上绘制出这个物体的代表性图片
是这样做的
1、Vector3 ScreenPos=Camera.WorldToScreenPoint(trans.Position);
2、GUIPos=new Vector3(ScreenPos.x,Screen.height-ScreenPos.y,0);
然后按照这个坐标绘制图片就可以了
//---------------------------
Monobehaviour.OnMouseEnter()等适用于3维场景里的collider,(使用射线查询)
Unity canvas UI上的按钮要实现拖拽等操作,最后继承IDragHandler等接口,重写OnDrag()等函数;
-
【Unity3D】Unity3D 实现屏幕坐标和3维空间坐标的转化
2018-01-03 14:49:44Input.mousePosition就是鼠标所在的位置的坐标函数Camera.main.ScreenToWorldPoint就是屏幕坐标转化三维空间的函数Camera.main.ScreenToWorldPoint把脚本挂载在主摄像机上 运行 就得到屏幕坐标映射在三维世界中的...Input.mousePosition就是鼠标所在的位置的坐标
函数Camera.main.ScreenToWorldPoint就是屏幕坐标转化三维空间的函数
Camera.main.ScreenToWorldPoint
把脚本挂载在主摄像机上
运行就得到屏幕坐标映射在三维世界中的坐标了
不过有一点是,转化之后z轴是-10
这个时候只要z轴+10就是屏幕映射到三维世界的正确坐标了Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition) + new Vector3(0, 0, 10);
-
unity3d鼠标2D控制方法
2014-01-27 10:37:47用到了unity3d非常好的协同机制实现鼠标2D统制,OnMouseDown事件表示鼠标已作了射线判断得到了对象。 拖拽时保持z轴不变,因为屏幕是xy二维的,空间是三维的。 IEnumerator OnMouseDown () { var ... -
unity3d 鼠标移动三维物体
2019-12-18 15:18:27从相机发射一条射线到屏幕的鼠标位置,通过射线检测要抓取得物体 2. 类 (1)Camera : 相机组件 (2)Ray : 射线 (3)Physics.Raycast : 射线反射,碰到三维物体,返回True (4)Input : 输入组件 3.实现代码 using... -
(转)Unity3D UGUI获取鼠标在屏幕的准确点击位置
2019-09-06 22:36:01https://www.cnblogs.com/yanghui0702/p/yanghui20180521.html -
unity3D鼠标点击获取地面坐标
2013-07-20 14:59:28写在前面:本人初学unity3D,仅仅是菜鸟的一点小心得,想记录下来,欢迎大神来指导,也欢迎其他初学者同学来交流,互相勉励,共同进步 unity中有关于鼠标位置的函数,Input.mousePosition。但不得不说,这个函数不... -
unity3d鼠标点击,获取世界坐标
2016-08-30 17:45:36unity中有关于鼠标位置的函数,Input.mousePosition。但不得不说,这个函数不到位,可以用一个print函数输出一下这个坐标会发现,只有X,Y值在改变,Z值没有发生变化,并且在屏幕的左下角固定为(0,0,0),查看文档后... -
Unity3D各种获取鼠标各种位置的小方法
2020-05-21 09:39:06Vector3 screenPosition;//将物体从世界坐标转换为屏幕坐标 Vector3 mousePositionOnScreen;//获取到点击屏幕的屏幕...//获取鼠标在相机中(世界中)的位置,转换为屏幕坐标; screenPosition = Camera.main.WorldToScr -
Unity3d 关于屏幕坐标到世界坐标的转换
2018-08-20 17:44:04很多时候,我们都需要屏幕坐标与世界空间坐标进行转换,比如鼠标的实时位置映射到世界坐标。那很多人就说了,不就是直接用Camera.main.ScreenToWorldPoint()方法就好了吗。嗯,没错,但我要讲的不止这些。 先想这样... -
【Unity3D】Unity3D 物体跟随鼠标移动
2018-01-03 14:53:04在Update中运行Vector3 mousePos=Camera.main.ScreenToWorldPoint(Input.mousePosition)+...这行代码的意思是屏幕坐标转化为三维坐标,然后z轴加10就是正确的位置了transform.position=mousePos;当前坐标跟随鼠标移动 -
Unity3D将屏幕坐标上的点转换为世界坐标中的点
2015-05-14 00:52:361、获取主摄像机的位置: private Vector3 _screenV; _screenV = _camera.WorldToScreenPoint (cube.transform.position);作用是获取屏幕坐标的z轴坐标 2、获取屏幕坐标/鼠标点击坐标,设置z轴坐标 if (Input.... -
[Unity3D]Unity3D游戏开发之史上最简单的鼠标点击控制人物走动实现
2014-04-11 18:58:24首先来说一下原理,当我们点击屏幕时,我们按照一定的方法,将屏幕上的二维坐标转化为三维坐标,然后我们从摄像机位置发射 一条经过该点的射线,则这条射线与大地平面的焦点,就是我们的目标位置。那么确定了这个... -
Unity 3D 如何获取鼠标移动事件
2018-05-24 21:06:52如何获取鼠标在屏幕上的移动和位置?如何获取鼠标的移动方向?如何获取真实鼠标的移动,不管光标有没有被屏幕限制住?如何获取鼠标的移动方向和距离,而不是对应屏幕上的坐标?如何能让鼠标控制一个物体连续的移动,... -
unity3D 实现物体(人物)移动到鼠标点击的位置
2018-06-08 11:11:291、通过输入鼠标右键获取光标在屏幕上的坐标信息,if(Input.GetMouseButtonDown(1)){ Vector3 mousePosition= Input.MousePosition;}//此处获得的是光标在屏幕上的相对坐标,不方便直接使用。2、将该光标转化为... -
Unity3D几个点击屏幕获执行相关操作的方法
2018-03-01 12:57:05Unity3D中,当鼠标点击屏幕执行相关操作的方法主要有以下几种,这里通过获取鼠标位置来比较,主要有Update,OnMouseDown函数中执行,添加或者重写EvenTrigger等方法。一、通过Update使用Input.... -
unity3d中利用协程实现鼠标拖动物体贴地移动
2018-04-13 09:42:20大致思路如下,从屏幕中鼠标的位置产生一条射线,计算该射线与地面的交点,然后是物体跟随该交点移动,即可实现鼠标拖动物体贴地移动。在unity3d的官方文档中,MonoBehaviour.OnMouseDown()可作为协程使用可以将... -
Unity基础篇:Unity使用鼠标拖动2D和3D物体。
2018-06-28 13:54:35/* 首先说一下,Input.mousePosition是鼠标所在像素平面内的坐标,需要根据自己的需求转变成世界坐标。 Description 描述 The current mouse position... 在屏幕坐标空间当前鼠标的位置(只读)。 The ... -
unity3D 点击物体 出现一个列表框 从鼠标的顶点出发
2020-08-21 14:41:11unity3D 点击物体 出现一个列表框 从鼠标的顶点出发 引用 根据鼠标点击的位置而改变弹出的信息框位置,弹出框不能超出电脑屏幕 鼠标再一次右击,弹出的信息框消失 -
Unity 鼠标点击位置转换成UI坐标绘制图片
2018-07-11 11:15:45unity3d中的屏幕坐标系 是以 屏幕 左下角为(0,0)点 右上角为(Screen.Width,Screen.Height)鼠标位置坐标与屏幕坐标系一致视口坐标是以摄像机为准 以屏幕的左下角为(0,0)点 右上角为(1,1)点绘制GUI界面时使用的... -
unity3D中使角色朝着鼠标的方向
2016-03-24 11:57:53思路:首先要获得鼠标的世界坐标(鼠标的位置坐标默认的是屏幕坐标),当鼠标点击时,角色朝着鼠标的方向移动;input.mousePosition获得的是鼠标的屏幕坐标;Vector3world; publicfloatspeed; voidUpdate() { if(Input... -
<Unity3D>Unity3D的四种坐标系
2016-08-30 23:48:25World Space(世界坐标):我们在场景中添加物体(如:Cube),他们都是以世界坐标显示在场景中的。transform.position可以获得该位置坐标。 Screen Space(屏幕坐标):以像素来定义的,以...注:鼠标位置坐标属 -
Unity3D的四种坐标系
2020-07-15 15:57:01Unity3D的四种坐标系 【Unity3D的四种坐标系】 1、World Space(世界坐标):我们在场景中添加物体(如:Cube),他们都是以世界坐标显示在场景中的。...注:鼠标位置坐标属于屏幕坐标,Input.mousePosition可... -
Unity3D的几种坐标系,以及屏幕解锁类似功能
2016-04-22 12:06:45World Space(世界坐标):我们在场景中添加物体(如:Cube),他们都是以世界坐标显示在场景中的。transform.position可以获得该位置坐标。 Screen Space(屏幕坐标,鼠标坐标):...注:鼠标位置坐标属于屏幕坐标 -
Unity3d 实现用LineRenderer画线 不依赖摄像机位置
2012-03-30 13:14:54Unity3d 实现用LineRenderer画线 不依赖摄像机位置 用LineRenderer画线难点: 鼠标坐标和屏幕坐标之间的转换 我是弄了很多天才弄好的 跟大家分享一下 using UnityEngine; using System.Collections; using...
-
ComAssistant.rar
-
maven打包错误:maven-surefire-plugin:2.21.0:test
-
mql_framework-main.zip
-
Linux 1:平均负载
-
PW2303-2.0.pdf
-
BK9520_Layout参考_RX.pdf
-
C++异步串口通信
-
2021-01-22
-
EffectCreator for Mac(抖音视频特效软件)
-
彻底卸载MySQL.txt
-
selenium IDE
-
设计模式之代理模式
-
转行做IT-第7章 数组
-
Shiro框架-spring shiro jwt redis实现登录功能
-
计算机网络基础
-
kn4j
-
易语言开发通达信DLL公式接口
-
erlang-23.2.1-1.el7.x86_64.rpm
-
转行做IT-第8章 类与对象、封装、构造方法
-
软件测试如何快速上手,了解KYM? 阿里总监是这样说的