input.getaxis的作用 这函数是什么意思

Unity中触摸和鼠标操作的几个问题
Unity中触摸和鼠标操作的几个问题
[摘要:症结面1:
正在unity中touch事情同时也会触收GetMouseButton事情,偶然候大概会给您带去轻易,然则若是出无意识到那个题目的话,也极可能给您带去很大的贫苦。
在unity中touch事件同时也会触发GetMouseButton事件,有时候可能会给你带来方便,但是如果没有意识到这个问题的话,也很可能给你带来很大的麻烦。
触摸操作也可以使用Input.GetAxis(“Mouse X”)(或”Mouse Y”,下同,略去不写)来判断指尖移动的距离,虽然这点很方便,但是这样就带来了另外两个问题,见关键点3和4;
Input.GetAxis(“Mouse X”)取得的值与Input.GetTouch(0).deltaPosition的取值有一些细微但是很重要的差别:
如果使用鼠标操作,那么Input.GetAxis对鼠标移动的取值方式表现的很正常,因为不管是否点击,鼠标始终存在,鼠标位置始终能够正常获取,Input.GetAxis(“Mouse X”)原本是为鼠标设计的,取值方式是连续的;使用Input.GetTouch(0).deltaPosition无效,因为没有触摸操作;
如果使用触摸操作,再细分两种情形:
如果使用if(Input.GetMouseButton(0))来作为判断是否按下的条件:
那么使用Input.GetAxis来获取手指的移动就需要注意了,触摸的手指是可以离开屏幕的,一旦手指离开屏幕,GetAxis(“Mouse X”)就不知所措了,只好记住离开前的手指位置,下一次手指再接触的时候和这个位置对比(个人猜测GetAxis(“Mouse X”)是对比鼠标/触摸点位置的方法来取得的)。例如手指从屏幕的左边拿开,然后再触摸屏幕的右边,那么取得的x位置会是一个很大的正值。这就是个很大的问题,这个问题是GetMouseButton和GetAxis在使用手指触摸的情况下配合上的不默契产生的。但是使用Input.GetTouch(0).deltaPosition就不会有这种现象,个人猜测可能是因为deltaPosition是测量每一帧内的移动距离的方法吧。
如果使用 if(Input.touchCount&0&&Input.GetTouch(0).phase == TouchPhased.Moved)来做为判断是否按下的条件:
使用Input.GetAxis(“Mouse X”),没有任何问题;
使用deltaPosition同样没有任何问题,因为这就是为触摸操作而设计的。
实践中发现在直观感觉差不多的滑动过程(分别用鼠标拖动和手指拖动)中,Input.GetTouch(0).deltaPosition.x 的值总是比Input.GetAxis(“Mouse X”)取得的值要大很多,分析可能是手机屏幕dpi比较大的原因,因此在实践中为了获取直观感受差不多的旋转速度,要分别调试旋转加成系数。
不要使用一条代码判断两种情况,最好分开,做一个单选(可以使用Enum),要么鼠标操作,要么触摸操作,分别使用最合适的判断和函数,并分别调试旋转加成系数
在写一个惯性拖动旋转的脚本的时候,为在pc和Android平台上都能使用(即用鼠标和触摸都能控制),我使用了如下的判断语句:
if(Input.GetMouseButton(0) || (Input.touchCount&0 && Input.GetTouch(0).phase == TouchPhase.Moved)
来判断鼠标按下或者手指按下,并用Input.GetAxis(“Mouse X”)来获取拖动的值,期望能够一次判断两种情况,分别适应不同平台的操作。在pc上使用鼠标操作没有任何问题,但是在android上触摸操作时出现了问题。经过多次测试并查阅资料,发现原来触摸操作也可以触发Input.GetMouseButton(0)的事件,这就引发了前述 关键点3第二条第一项中的问题。
附:惯性旋转物体脚本:
using UnityE
using System.C
public enum ControlType{
mouseControl,
touchControl,
public class RotateTarget: MonoBehaviour
public ControlType controlT
public Transform rotT
public float rotSpeedS
private float currentSpeed = 0;
void Update()
if (controlType==ControlType.mouseControl)
if (Input.GetMouseButton(0))
currentSpeed = Mathf.Lerp(currentSpeed, Input.GetAxis("Mouse X") / Time.deltaTime,0.5f*Time.deltaTime);
currentSpeed = Mathf.Lerp(currentSpeed, 0, 0.5f*Time.deltaTime);
else if(controlType==ControlType.touchControl)
if (Input.touchCount & 0 && Input.GetTouch(0).phase == TouchPhase.Moved)
currentSpeed = Mathf.Lerp(currentSpeed, Input.GetAxis("Mouse X")/Time.deltaTime,0.5f*Time.deltaTime);
currentSpeed = Mathf.Lerp(currentSpeed, 0, 0.5f*Time.deltaTime);
rotTarget.Rotate(Vector3.down, Time.deltaTime * currentSpeed * rotSpeedScalar);
版权声明:请尊重原创内容,转载请注明来源及链接。
感谢关注 Ithao123精品文库频道,是专门为互联网人打造的学习交流平台,全面满足互联网人工作与学习需求,更多互联网资讯尽在 IThao123!
Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。
Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。
产品设计是互联网产品经理的核心能力,一个好的产品经理一定在产品设计方面有扎实的功底,本专题将从互联网产品设计的几个方面谈谈产品设计
随着国内互联网的发展,产品经理岗位需求大幅增加,在国内,从事产品工作的大部分岗位为产品经理,其实现实中,很多从事产品工作的岗位是不能称为产品经理,主要原因是对产品经理的职责不明确,那产品经理的职责有哪些,本专题将详细介绍产品经理的主要职责
IThao123周刊 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
u3d基础中文教程
下载积分:3000
内容提示:u3d基础中文教程,edius6中文基础教程,ios5基础教程 中文版,aecs4中文基础教程,imagej中文教程,spss19.0中文版教程,itunes教程中文版,sigmaplot中文教程,mastercam中文版教程,tableau 中文教程
文档格式:PDF|
浏览次数:29|
上传日期: 22:00:46|
文档星级:
该用户还上传了这些文档
u3d基础中文教程
官方公共微信Input.GetAxis 这函数是什么意思_百度知道
Input.GetAxis 这函数是什么意思
提问者采纳
FILTER 过滤器LEVEL 音量HIGHINPUT穿尝扁妒壮德憋泉铂沪 应该是高电平输入(就是CD功放接人)或者是高音输出LOWINPUT
低电平输入(CD或者DVD信号直接输入)或者低音输出GND
接地 REM 是遥控接收PUSE 拉出或者按POWER 电源
来自团队:
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁新人求解啊_unity3d吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:52,085贴子:
新人求解啊收藏
自己写的想要第一人称控制视角的小脚本,结果运行起来摄像机仰头到顶,根本没法用,有哪位大神能指点一下哪里错了吗using UnityEusing System.Cpublic class diyirencheng : MonoBehaviour {// Use this for initialization// Update is called once per framevoid Update () {float x = transform.localEulerAngles .y+Input.GetAxis (&Mouse X&)*10;float y = transform.localEulerAngles .x+Input.GetAxis (&Mouse Y&);y=Mathf.Clamp (y,-60f, 60f);transform.localEulerAngles= new Vector3(-y,x,0);}}
《盗墓笔记》十年之约,震撼揭秘真实地下世界
up,在线等大神施救,折腾三小时了
为啥没人....
第一人称不是有插件吗下下来研究嘛
为啥没人,大神在哪
求助,4行代码大神看看不会耽误时间的
unity里不是有个mouse look吗,看看不就明白了
乘上个Time.deltatime就好了 因为你用的欧拉角 看到头顶也就是90度 鼠标的输入是1的话 运行60帧1。5秒就到顶了
你是怎么写?我记得第一人称分两部分 摄像头一个,承载摄像头物体一个写两个Script,具体我也看代码的
我也是新手
有谁能解答吗
有谁能解答吗
using UnityEusing System.Cpublic class CameraControl : MonoBehaviour {
public GameO
public float time = 0.1f;
//方向灵敏度
//public float sensitivityX = 10F;
public float sensitivityY = 10F;
//上下最大视角(Y视角)
public float minimumY = -30f;
public float maximumY = 30f;
float rotationY = 0F;
// Use this for initialization
void Start()
camerapos = player.transform.FindChild(&CameraPos&);
// Update is called once per frame
void LateUpdate()
if (player&& Time.timeScale != 0)
transform.position = Vector3.Slerp(transform.position, camerapos.position, time);
transform.rotation = Quaternion.Slerp(transform.rotation, camerapos.rotation, time);
/*根据鼠标移动的快慢(增量), 获得相机左右旋转的角度(处理X)
float rotationX = transform.localEulerAngles.y + Input.GetAxis(&Mouse X&) * sensitivityX;*/
//根据鼠标移动的快慢(增量), 获得相机上下旋转的角度(处理Y)
rotationY += Input.GetAxis(&Mouse Y&) * sensitivityY;
//角度限制. rotationY小于min,返回min. 大于max,返回max. 否则返回value
rotationY = Mathf.Clamp(rotationY, minimumY, maximumY);
//总体设置一下相机角度
transform.localEulerAngles = new Vector3(-rotationY, transform.localEulerAngles.y, 0);
还有人吗,可以简洁明了指出错误吗
Input.GetAxis (&Mouse X&)这个函数你就没理解透
float y = -transform.localEulerAngles .x+Input.GetAxis (&Mouse Y&);
我给你解释一下吧..你代码下面写的是transform.localEulerAngles= new Vector3(-y,x,0);注意这个是-y,是负的如果你想你用的方式,你要写成float y = -transform.localEulerAngles .x+Input.GetAxis (&Mouse Y&);注意transform前面的负号当然你也可以写成float y = transform.localEulerAngles .x-Input.GetAxis (&Mouse Y&);注意正负号然后下面改成transform.localEulerAngles= new Vector3(y,x,0);
y要改成正号以上代码都要在去掉Mathf.Clamp()这个函数下进行,因为这样的写法会导致数值变动,你用-60,60这样的数值代入这个函数肯定结果不是你想要的.而用rotationY += Input.GetAxis(&Mouse Y&) 则可以用-60,60这样的数值代入,更直观.
主要是原因是这样的。当使用欧拉时候,运行时Unity会保证欧拉角一直处于[0,360]这个区间中的。所以你代码里所有的负数情况都会被加上360度。所以就会有这样的情况:1. 一开始的角度是(0,0,0),如果你的Input.GetAxis(&Mouse Y&) 是大于零的,也就是鼠标向上移动,比如说是12.执行transform.localEulerAngles= new Vector3(-y,x,0);这句后,角度为(-1,-,-)3.Unity会自动把localEulerAngles.x的值加上一个360来保证x的值在上述的区间中。然后本地的角度就变成了(359,0,0)。4 下一帧,你的Input.GetAxis(&Mouse Y&)不大可能会大于300,然后
float y = transform.localEulerAngles.x + Input.GetAxis(&Mouse Y&); // y = 358 或360
y = Mathf.Clamp(y, -60f, 60f); //y = 60综上所述,你的localEulerAngles.x的值就被锁到60了。
这个问题是不是好艰深啊
有谁能解释下这句是什么逻辑吗float rotationy += Input.GetAxis (&Mouse Y&);然后它又在最后的设置里给rotation加负号是什么意思,不是该给变化量加负吗,为啥结果又弄成负值,绕来绕去逻辑好怪
欧拉角不能为负,那原角色控制器怎么有最小值的限制啊
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或}

我要回帖

更多关于 input是什么意思 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信