Unity3D技术之Input按键系统详解
Unity3D 快捷键大全
Unity3D 快捷键大全(U3D)一、变换工具6个快捷键Q--Hand(手形)工具可以平移整个Scene视图快捷键W--Translate(移动)工具移动所选择的游戏对象快捷键E--Rotate(旋转)工具按任意角度旋转游戏对象快捷键R--Scale(缩放)工具缩放选中的游戏对象快捷键T--横切面工具可以沿着横截面缩放,沿着横截面的中心点旋转快捷键Z--Center工具改变游戏对象的轴心点快捷键X--Local工具改变物体的坐标二、播放控件3个Ctrl+P--播放按钮播放/运行,对游戏场景进行预览Ctrl+Shift+P--暂停按钮暂停/中断,停止预览Ctrl+Alt+P--逐帧播放按钮单帧进行预览以上一、二为工具栏的快捷键三、File(文件)菜单快捷键6个Ctrl+N--New Scene 新建场景Ctrl+O--Open Scene 打开场景Ctrl+S--Save Scene 保存场景Ctrl+Shift+S--Save Scene as 场景另存为Ctrl+Shift+B--Build Setings 发布设置Ctrl+B--Build & Run 发布并运行四、Edit(编辑)菜单11个(在Mac机中,用command键替换Ctrl,以下出现的Ctrl均同)Ctrl+Z--Undo Selection Change 撤销上一步操作Ctrl+Y--Redo 反撤销(mac机为command+Shift+Z)Ctrl+X--Cut 剪切Ctrl+C--Copy 复制Ctrl+V--Paste 粘贴Ctrl+D--Duplicate 复制并粘贴Shift+Del--Delete 删除(mac机位command+Del)快捷键F--Frame Selected 居中并最大化当前选中的物体Ctrl+F--Find 搜索,按照名称查找物体Shift+F--Lock view to Selected 锁定搜索到的物体Ctrl+A--Select All 选择全部五、Assets菜单快捷键1个Ctrl+R--Refresh 刷新场景六、GameObject菜单快捷键5个Ctrl+Shift+N--Create Empty 创建一个空的游戏对象Alt+Shift+N--Create Empty Child 创建一个空的子物体Ctrl+Alt+F--Move to New 移动游戏对象到视图的中心点Ctrl+Shift+F--Align With ViewAlt+Shift+A--Toggle Active Stave七、Component菜单快捷键Ctrl+Shift+A--add 添加组件八、切换视图快捷键12个Ctrl+Tab切换--next Windows 下个窗口Ctrl+Shift+Tab切换--Previous Windows 上个窗口Ctrl+1切换--Scene视图Ctrl+2切换--Game视图Ctrl+3切换--Inspector视图Ctrl+4切换--Hierarchy视图Ctrl+5切换--Project视图Ctrl+6切换--视图Ctrl+7切换--Profiler视图Ctrl+9切换--Asset Store Unity资源商店Ctrl+0切换--Asset Server 资源服务器Ctrl+Shift+C切换--Console 控制台以上三~八为菜单栏快捷键九:操作Scene视图的快捷键Alt+鼠标左键--旋转视图Alt+鼠标右键--放大缩小视图Alt+鼠标中键--移动视图鼠标右键+w/s/a/d--向上/下/左/右飞行浏览视图鼠标右键+w/s/a/d+Shift--向上/下/左/右快速飞行浏览视图。
Unity 的输入系统
1. Unity 的输入系统1.1 虚拟轴的输入检测Unity默认定义了15个虚拟轴。
可以通过Edit -> Project Settings -> Input 打开InputManager 来查看定义好的虚拟轴(1) 虚拟轴的属性Size之后的一些属性,例如:Horizontal,Vertical。
顾名思义这是水平方向和前后方向上的定义(针对于轴向在X轴上)。
点击Horizontal旁边的三角形,可以看到其中定义了许多内容。
例如:Name表示的是这个虚拟轴的名称,Negative Button表示的是水平位置上负方向的按钮(向左),Positive Button表示的是水平位置上正方向的按钮(向右)。
下两个带Alt的选项是备选方案。
Gravity代表的是按钮恢复到正常值的恢复速度,值越大越快。
Dead表示当对应按钮的数值小于此处定义的数值时,都认为按钮已经复位。
Axis 项定义虚拟轴的方向,可以使X轴Y轴或者其他多位控件的轴。
(2) 调用Input.GetAxis方法来获取虚拟轴的当前状态值虚拟轴中负方向和正方向的数值范围时-1到1之间。
例如:GetAxis("Horizontal"); 这时候如果按住left按钮,此函数会返回-1 ,松开之后恢复到0。
一样的如果按住Right按钮,此时函数会返回1。
因此可以认为在-1到0之间是按了虚拟轴的负方向,在等于0时是什么都没有按,在0到1之间是按了虚拟轴的正方向。
因此可以把这个值作为transform或者rotation的值,来控制物体的移动和旋转方向,也可以控制物体的移动速度随按键力度的变化等。
1.2 鼠标输入检测对于鼠标的检测。
主要的是Input 类中的GetMouseButton / GetMouseButtonDown / GetMouseButtonUp,入参为0/1/2,分别对应鼠标左键/右键/中键盘。
返回值为bool,表示该键是否处于该状态。
unity3D学习知识点总结
1.unity简介和安装(x)2.unity基础操作unity窗口界面介绍1.Scene场景编辑窗口(Q、W、E、R、T/按住鼠标右键—旋转视角、按住鼠标右键Q、E、W、S、A、D)2.Game游戏运行窗口(运行按钮,暂停按钮,下一帧画面)3.Hierar chy 场景物体列表窗口(三角符号表示物体间的父子关系)4.Projec t 项目资源列表窗口(与文件夹对应,mete文件,移动尽量在u nity中移动而不是在文件夹中移动,可能报错)5.Inspec tor 属性编辑列表窗口(选中Hier archy物体,出现物体相关属性)6.Console 控制台输出窗口7.其他常用窗口:Layers(层)2by3(显示模式)unity菜单界面介绍1.file 文件菜单2.edit 编辑菜单3.Assets资源菜单4.Gameobject物体资源菜单pon ent 组件菜单6.Window窗口菜单7.Help 帮助菜单Scene与场景漫游1.Scene窗口各项工具Q、W、E、R按住鼠标右键Q、W、E、RPivot物体自己的中心/center所有物体加权之后的中心Global 世界坐标/local自身坐标Textur ed Wite/render Paths显示2D/3D2.快捷键与视角的移动Hierar chy与场景搭建1.Gameobject:基本组件gameobject—>create other2.Gameob ject:灯光组件3.Gameobject:物体组件4.Gameobject:其他组件5.Hierar chy层级关系与应用6.场景搭建案例Projec t与资源管理Inspec tor与游戏组件3.C#语言基础C#的值类型C#的引用类型C#的类型转换C#的逻辑语句C#的集合类型C#的面向对象特性封装、继承、多态Unity协程:和线程的区别:没有异步同步的概念,每一帧都执行(有内容的情况);协程的作用:1)延时(等待)一段时间执行代码;2)等某个操作完成之后再执行后面的代码。
unity input输入控制的主要方法及其用法
unity input输入控制的主要方法及其用法
Unity中输入控制的主要方法包括按键输入、触摸输入和鼠标输入。
按键输入是最常用的输入方法,可以通过GetKey、GetKeyDown 和GetKeyUp等API获取按键状态。
GetKey获取按键持续状态,GetKeyDown获取按键按下瞬间状态,GetKeyUp获取按键松开瞬间状态。
触摸输入主要用于移动设备上,可以通过Input.touchCount和Input.GetTouch等API获取触摸状态和位置。
鼠标输入主要用于PC 端游戏,可以通过Input.mousePosition和Input.GetMouseButton 等API获取鼠标状态和位置。
在使用输入控制时,需要注意区分不同平台的输入方式,以及控制不同实体的输入,例如角色、UI等。
- 1 -。
Unity3D中UGUI事件系统中文含义
OnBeginDrag(PointerEventData eventData);开始拖拽OnCancel(BaseEventData eventData);取消按钮被按下时(与InputManager里的Cancel按键相对应,PC上默认的是Esc键),前提条件是物体被选中//应该选中物体后,Esc键被按下时调用OnDeselect(BaseEventData eventData);物体从选中到取消选中是调用OnDrag(PointerEventData eventData);拖拽中OnDrop(PointerEventData eventData);拖拽结束(拖拽结束后的位置(即鼠标位置)如果有物体,则那个物体调用)OnEndDrag(PointerEventData eventData);拖拽结束OnInitializePotentialDrag(PointerEventData eventData);拖拽时的舒适化,在按下时会调用OnMove(AxisEventData eventData);物体移动时(与InputManager里的Horizontal和Vertica按键相对应),前提条件式物体被选中//应该选中物体后,上下左右键调用OnPointerClick(PointerEventData eventData);在同一物体上按下并释放OnPointerDown(PointerEventData eventData);OnPointerEnter(PointerEventData eventData);指针进去OnPointerExit(PointerEventData eventData);指针退出OnPointerUp(PointerEventData eventData);指针按下OnScroll(PointerEventData eventData);指针释放OnSelect(BaseEventData eventData);物体被选中时调用OnSubmit(BaseEventData eventData);提交按钮被按下时(与InputManager里的Submit按键对应,PC上默认的是Enter键),前提条件是物体被选中//应该选中物体后,Enter键按下时调用OnUpdateSelected(BaseEventData eventData);被选中的物体每帧调用。
Unity3D游戏开发之四种坐标系
Unity3D游戏开发之四种坐标系unity3d 四种坐标系1, World Space(世界坐标):我们在场景中添加物体(如:Cube),他们都是以世界坐标显示在场景中的。
transform.position可以获得该位置坐标。
2, Screen Space(屏幕坐标):以像素来定义的,以屏幕的左下角为(0,0)点,右上角为(Screen.width,Screen.height),Z的位置是以相机的世界单位来衡量的。
注:鼠标位置坐标属于屏幕坐标,Input.mousePosition可以获得该位置坐标,手指触摸屏幕也为屏幕坐标,Input.GetTouch(0).position可以获得单个手指触摸屏幕坐标。
4, 绘制GUI界面的坐标系:这个坐标系与屏幕坐标系相似,不同的是该坐标系以屏幕的左上角为(0,0)点,右下角为(Screen.width,Screen.height)。
世界坐标→屏幕坐标:camera.WorldToScreenPoint(transform.position);这样可以将世界坐标转换为屏幕坐标。
其中camera为场景中的camera对象。
屏幕坐标→视口坐标:camera.ScreenToViewportPoint(Input.GetTouch(0).position);这样可以将屏幕坐标转换为视口坐标。
其中camera为场景中的camera对象。
视口坐标→屏幕坐标:camera.ViewportToScreenPoint();视口坐标→世界坐标:camera.ViewportToWorldPoint();案例1——在鼠标点击的位置上绘制一张图片出来(关于绘制GUI界面坐标系与屏幕坐标系之间的关系)。
ing UnityEngine;ing System.Collections;3.public class test : MonoBehaviour {4. //图片5. public Texture img;6. //储存鼠标的位置坐标7. private Vector2 pos;8. void OnGUI()9. {10. //鼠标左击,获取当前鼠标的位置11. if (Input.GetMouseButton(0))12. {13. pos = Input.mousePosition;14. }15. //绘制图片16. GUI.DrawTexture(new Rect(pos.x,Screen.height - pos.y,100,100), img);17. }18.}案例2if去掉吧!ing UnityEngine;ing System.Collections;3.public class test: MonoBehaviour {4. //场景的相机,拖放进来5. public Camera camera;6. //场景的物体7. private GameObject obj;8. void Start()9. {10. //初始化11. obj = GameObject.Find("Plane");12. }13. void Update ()14. {15. //有触摸16. if (Input.touchCount > 0)17. {18. print("世界坐标" + obj.transform.position);19. print("屏幕坐标" + Input.GetTouch(0).position);20. print("世界坐标→屏幕坐标" +camera.WorldToScreenPoint(obj.transform.position));21. print("屏幕坐标→视口坐标" +camera.ScreenToViewportPoint(Input.GetTouch(0).position));22. print("世界坐标→视口坐标" +camera.WorldToViewportPoint(obj.transform.position));23. }24. }25.}。
关于Unity中的Input输入事件
关于Unity中的Input输⼊事件截获⿏标,键盘的消息监听事件我们都是在Update⾥⾯监听的。
Unity的虚拟轴打开:Edit-->Project Settings-->Input,打开的各个Name就是双引号⾥⾯要填的,记不住就打开查,也可以⾃⼰定义⼀些按键。
⼀、Input的主要变量1: mousePosition: 当前⿏标的像素坐标;2: anyKey/anyKeyDown: 当前是否有按键按住;3: inputString: 本次update时间间隔内输⼊的字符串;4: acceleration: 重⼒加速度传感器的值,加速度的⽅向;5: touches: 返回当前所有触摸对象的列表Touch[],触摸屏可以⽀持多根⼿指轨迹;⼆、Input的主要⽅法1: GetAxis/GetAxisRaw: 返回表⽰虚拟轴的值:2: GetButton/GetButtonDown/GetButtonUp 虚拟按钮3: GetKey/GetKeyDown/GetKeyUp 按下制定按钮;4: GetMouseButtonGetMouseButtonDwonGetMouseButtonUp5: GetTouch(index) 返回当前触控Touch对象;6: 打开InputManager: 配置虚拟轴;三、Input使⽤实例1.创建⼀个Canvas2.对Canvas进⾏初始化3.创建⼀个Image的UI节点作为Canvas的⼦节点,名字叫bg,拖进背景图⽚到这个节点中。
4.创建⼀个叫Game_scene的脚本,挂载到Canvas下⾯5.Game_scene脚本内容:void Update () {// 以屏幕的左下脚为原点;// Debug.Log(Input.mousePosition); // 当前⿏标的位置;// 如果⼀个按键⼀直按住,那么每帧都会返回True,只到弹起;// 键盘,⿏标的key/*if (Input.anyKey) {Debug.Log(Input.anyKey);}*/// 检测按键按下,但是,⼀旦按下以后,后⾯就不触发了。
unity调用键盘的方法
unity调用键盘的方法
在Unity中调用键盘的方法通常涉及到处理用户输入。
Unity 提供了一种称为Input的类来处理用户输入。
你可以使用
Input.GetKey()、Input.GetKeyDown()、Input.GetKeyUp()等方法来检测键盘输入。
这些方法可以让你检测用户是否按下了某个键,或者是否释放了某个键。
例如,你可以使用Input.GetKeyDown(KeyCode.Space)来检测用户是否按下了空格键。
如果用户按下了空格键,你可以在代码中执行相应的操作,比如让角色跳跃或者发射子弹。
除了检测特定按键的输入外,你还可以使用
Input.inputString来获取用户在键盘上输入的字符串。
这对于需要用户输入文本的游戏或应用程序非常有用。
另外,Unity还提供了Event System来处理UI元素的交互,包括键盘输入。
你可以在UI元素上添加Event Trigger组件,并设置相应的事件处理函数来响应键盘输入。
除了以上提到的方法,你还可以通过编写自定义的脚本来处理
键盘输入。
比如,你可以在Update()方法中检测用户输入,并根据按键的状态执行相应的逻辑。
总之,Unity提供了多种方法来调用键盘的输入,你可以根据具体的需求选择合适的方法来处理键盘输入。
希望这些信息能够对你有所帮助。
input键值 和 hid协议
input键值和 hid协议
Input键值是指在使用HID(Human Interface Device)协议传
输数据时,键盘输入对应的键值。
HID是一种标准的通信协议,用于描述计算机与人类输入设备(如键盘、鼠标、游戏控制器等)之间的数据传输格式。
HID协议定义了一系列标准的键值码,包括通用键值码(Generic Desktop Page)和特定键值码(Specific Usage Page)。
通用键值码是对键盘上的各个按键进行编码,如字母、数字、符号等;特定键值码是用于描述特定的功能键,如音量调节、多媒体控制等。
在HID协议中,键值以十六进制表示,并且通常以8位的格
式进行传输。
根据HID协议规定的数据格式,当用户在键盘
上按下某个按键时,键盘会将对应的键值码发送给计算机,计算机通过解析接收到的键值码来识别用户的输入操作。
通过HID协议,键盘可以与计算机进行实时的数据交互,使
得用户的键盘输入能够被计算机及时处理和响应。
同时,HID
协议还支持对键盘的状态进行查询和控制,实现一些特殊功能键的应用,如大写锁定、滚动锁定等。
Unity3D教程:控制输入系统 – Input 类实例讲解
Unity3D教程:控制输入系统– Input 类实例讲解Posted on 2013年02月02日 by U3d / Unity3D 基础教程/被围观 404 次获取键盘某一(这里是空格键)按键状态(bool):Input.GetKeyDown(KeyCode.Space) 这是最不通用的写法,不推荐。
获取虚拟按键(这里是Jump)按键状态(bool):Input.GetButton("Jump") 推荐用这种写法,用户可以设置按键Jump为空格键(默认就是空格)。
获取遥感(或iphone感应)垂直轴力度(是一个0-1之间的float):Input.GetAxis("Vertical“)推荐写法,键盘的话默认按w或者up会瞬间提到1,要是遥感的话可以控制一个度,再乘以力的方向向量的话,就可以控制汽车之类的加速了。
如果你直接写成键盘的w或者d,那就没办法控制力度了。
获取遥感(或iphone感应)水平轴力度(同上):Input.GetAxis("Horizontal")。
获取鼠标中键状态:Input.GetAxis("Mouse ScrollWheel")。
注:有些遥感可能水平方向会转超过1或者小于0的值出来(例如汽车遥感),为了避免错误的计算(乘以负数的话向量的方向可是会相反的),可以配合数学函数Mathf.Clamp01()来固定他的值在0和1之间。
例如:motor = Mathf.Clamp01(Input.GetAxis("Vertical")); //设置汽车引擎力度为垂直方向力度(学习的目的是增长知识,提高能力,相信一分耕耘一分收获,努力就一定可以获得应有的回报)。
unity按键按下和抬起分别处发的方法
unity按键按下和抬起分别处发的方法1. 序言Unity作为当前最为流行的游戏开发工具之一,其强大的功能和易于上手的特点备受游戏开发者的青睐。
特别是在其输入事件部分,Unity提供了多种不同的接口支持开发者实现游戏中不同的用户交互操作。
其中,按键按下和抬起事件是我们在游戏开发中经常需要使用到的两个事件。
本文将详细介绍Unity中如何实现按键按下和抬起事件的监听,以及如何通过这些事件来实现游戏中的用户交互操作。
2. 按键按下事件2.1 GetKeyDown()Unity中提供了GetKeyDown()函数用于监听按键按下事件。
该函数需要传入一个KeyCode类型的参数,表示需要监听的按键。
当被监听的按键被按下时,该函数将返回一个true值,否则返回false。
``` C#void Update(){if (Input.GetKeyDown(KeyCode.Space))Debug.Log("Space pressed");}}```上述示例代码中,我们在Update()函数中使用GetKeyDown()函数监听了空格键的按下事件。
当空格键被按下时,该函数将输出一条日志信息。
2.2 GetKey()GetKeyDown()函数只能监听按键按下的瞬间,如果需要在按键一直被按住的情况下进行操作,则需要使用GetKey()函数。
``` C#void Update(){if (Input.GetKey(KeyCode.Space)){Debug.Log("Space is being held down");}```上述示例代码中,我们在Update()函数中使用GetKey()函数监听了空格键一直被按住的状态。
当空格键被按住时,该函数将输出一条日志信息。
3. 按键抬起事件3.1 GetKeyUp()除了按键按下事件之外,我们在游戏开发中还需要监听按键抬起事件。
Unity中提供了GetKeyUp()函数用于监听按键抬起事件。
Unity3D自带例子AngryBots的分析
研究一下Unity3d自带的AngryBots项目,了解基本的游戏运行机制:1. 人物的动作控制逻辑***Player对象***[外形]Player对象里有一个对象具有Skinned Mesh Renderer组件,该组件使用的Mesh名为main_player_lorez。
类似的还有表达武器的,名为main_weapon001的GameObject。
[操作]: (InputManager)**移动**定义:移动在InputManager里添加了2种操作方式:水平移动,名为 Horizontal垂直移动,名为 Vertical并设置了一些属性,比如对应的按键,加速度,类型等等。
在脚本(PlayerMoveController.js)里,通过Input.GetAxis("Horizontal") 和Input.GetAxis("Vertical")获得玩家的按键状态转化成的运动方向。
并储存在MovementMotor.js脚本定义的movementDirection变量里。
实现:Player添加了RigidBody组件,该组件提供了按物理规律改变GameObject的Transform的能力。
在FreeMovementMotor.js脚本里,定义了一些参数,用于和movementDirection一起,计算出作用于RigidBody对象上的力(Force)。
角色就开始向指定方向移动了。
**面向(facingDirection)**直接使用Input.mousePosition作为屏幕坐标,用角色所在位置定义一个平面,求得射线焦点,将该角色所在位置到该点的方向作为面向。
并储存在MovementMotor.js脚本定义的facingDirection变量里。
[动作播放]:Player Animation(Script)(PlayerAnimation.js)var moveAnimations : MoveAnimation[]; 因为是public变量,所以可以在inspector中直接修改,例子中定义了6个动作 run_forward/run_backward/run_right/run_left 和 idle/turn 。
Unity3D获取当前键盘按键及Unity3D鼠标、键盘的基本操作
Unity3D获取当前键盘按键及Unity3D⿏标、键盘的基本操作获取当前键盘按键,代码如下:using UnityEngine;using System.Collections;public class GetCurrentKey : MonoBehaviour {KeyCode currentKey;void Start (){currentKey = KeyCode.Space;}void OnGUI(){if (Input.anyKeyDown){Event e = Event.current;if (e.isKey){currentKey = e.keyCode;Debug.Log("Current Key is : " + currentKey.ToString());}}}}下⾯给⼤家介绍Unity3D⿏标、键盘的基本操作键盘:GetKey 当通过名称指定的按键被⽤户按住时返回trueGetKeyDown 当⽤户按下指定名称的按键时的那⼀帧返回true。
GetKeyUp 在⽤户释放给定名字的按键的那⼀帧返回true。
GetAxis(“Horizontal")和GetAxis(“Verical”) ⽤⽅向键或WASD键来模拟-1到1的平滑输⼊键盘判断:If(Input.GetKeyDown(KeyCode.A)){//KeyCode表⽰包含键盘所有键print(“按下A键”); } If(Input.GetKeyUp(KeyCode.D)){//当按D键松开时print(“松开D键”); } If(Input.GetAxis(“Horizontal")){//当按下⽔平键时print(“按下⽔平键”); } If(Input.GetKeyUp("Verical“)){当按下垂直键时print(“按下垂直键”); }⿏标:GetButton 根据按钮名称返回true当对应的虚拟按钮被按住时。
godot inputevent处理机制 -回复
godot inputevent处理机制-回复Godot引擎是一款开源游戏引擎,具有丰富的工具和功能,可用于开发2D和3D游戏。
在Godot中,InputEvent处理机制是一种用于处理玩家输入的机制,它包括键盘、鼠标和触摸事件等。
本文将以“Godot InputEvent处理机制”为主题,详细介绍这一机制的工作原理和使用方法。
一. 概述在开始讲解Godot的InputEvent处理机制之前,先简单介绍一下Godot的工作原理。
在Godot中,整个游戏循环由一个称为Main Loop (主循环)的过程驱动。
这个主循环不断地循环执行,从而实现游戏的更新和绘制。
在每一次循环中,都会处理用户的输入,通过InputEvent处理机制,将用户输入的信息传递给游戏对象进行处理。
二. 事件类型在Godot中,有几种常见的InputEvent事件类型,如键盘事件、鼠标事件和触摸事件等。
其中,键盘事件包括按键按下、按键释放和文本输入等;鼠标事件包括鼠标按下、鼠标释放和鼠标移动等;触摸事件包括触摸开始、触摸结束和触摸移动等。
不同的事件类型对应不同的事件处理函数。
三. InputEvent系统在Godot中,InputEvent系统是一个非常重要的系统,负责处理所有的输入事件。
这个系统有一个称为InputEventReceiver(输入事件接收器)的机制。
在一个场景中,可以将一个游戏对象的节点设置为输入事件接收器,从而接收并处理输入事件。
每当有输入事件发生时,InputEvent 系统会自动将事件对象传递给相应的接收器,并调用相应的处理函数进行处理。
1. 连接信号在Godot中,可以通过连接信号的方式来处理输入事件。
对于一个输入事件接收器,可以使用connect方法来连接一个信号和相应的处理函数。
例如,对于一个按钮节点,可以连接它的"pressed"信号和一个处理函数,这样当按钮被按下时,相应的处理函数将被调用。
Unity3DInputManager详解
Unity3DInputManager详解⾸先说⼀下 Input 类,这个类很常⽤,API ⼤家基本都知道,这⾥记录⼏个使⽤频率没那么⾼的 APIInput.acceleration:重⼒加速度传感器的值,加速度的⽅向,适⽤于移动平台。
Input.multiTouchEnabled:是否启⽤多点触控,适⽤于移动平台。
Input.inputString:本次Update时间间隔内(当前这⼀帧内)输⼊的字符串。
Input.GetAxis():获取虚拟轴的值,并且具有平滑过渡,返回值会从0增长到1,具有⼀定的时间。
Input.GetAxisRaw():获取虚拟轴的值,没有平滑过渡,返回值直接为1或者-1。
Input.ResetInputAxes():重置所有输⼊。
所有的虚拟轴和按钮的值变为0。
说到虚拟轴,就必须说到 InputManager(Edit -> Project Settings -> Input),下⾯介绍⼀下 InputManager 参数的含义:先上⼀张图Name:【轴的名称】可以在脚本编程中直接引⽤他。
⽐如:Input.GetAxis(“Horizontal”)Descriptive Name:【轴的正向按键描述】Descriptive Negative Name:【轴的反向按键描述】Nagative Button:【负向按钮】该按钮会给轴发送⼀个负值Positive Button:【正向按钮】该按钮会给轴发送⼀个正值Alt Negative Button:【备选负向按钮】Alt Positive Button:【备选正向按钮】Gravity:【重⼒】输⼊复位的速度,仅⽤于按键/⿏标。
Dead:【⼀个阈值】任何⼩于该值的输⼊值(不论正负值)都会被视为0,⽤于摇杆。
Sensitivity:【灵敏度】对于键盘输⼊,该值越⼤则响应时间越快,该值越⼩则越平滑。
对于⿏标输⼊,设置该值会对⿏标的实际移动距离按⽐例缩放。
Unity3D手机中Input类touch详解Unity3D教程手册
Unity3D手机中Input类touch详解Unity3D教程手册Unity3D手机中Input类touch详解:1.Input.touchCount 触摸随之增长,一秒50次增量。
2.Input.GetTouch(0).phase==TouchPhase.Moved 手指滑动中最后一帧滑动的状态是运动的。
3.TouchPhase 触摸的几个状态。
4.Touch.deltaPosition 增量位置(Input.GetTouch(0).deltaPosition)最后一帧滑动的值,只返回xy 轴坐标,也可用vector3(z轴为0),所以一般用vector2接收。
static var aa:int;function Update () {if(Input.touchCount>0){print(Input.touchCount);}}function OnGUI(){bel(Rect(34,34,34,34),"sdff");}touchCount指的是触摸帧的数量。
要注意的是:touch事件只能在模拟器或者真机上运行(已测试通过),大约一秒钟touch不放。
touchCount+50次左右。
2.Input.touches 触摸列表。
// Prints number of fingers touchingthe screen//输出触摸在屏幕上的手指数量function Update () {var fingerCount = 0;for (var touch : Touch in Input.touches){if (touch.phase != TouchPhase.Ended&& touch.phase != TouchPhase.Canceled)fingerCount++;}if (fingerCount > 0)print ("User has " + fingerCount + "finger(s) touching the screen");}3.让cube随着touch 移动代码:static var count:int; //定义touchCount数var particle_:GameObject;//定义存放cube对象var touchposition:Vector3; //存储移动三维坐标值function Update () {if(Input.touchCount>0){count+=Input.touchCount;}if((Input.touchCount>0&&Input.GetT ouch(0).phase==Touch Phase.Moved)) //[color=Red]如果点击手指touch了并且手指touch的状态为移动的[/color]{touchposition=Input.GetT ouch(0).deltaPosition; //[color=Re d]获取手指touch最后一帧移动的xy轴距离[/color]particle_.transform.Translate(touchposition.x*0.01,touchposi tion.y*0.01,0);//[color=Red]移动这个距离[/color]}}function OnGUI(){bel(Rect(10,10,100,30),"cishu:"+count.ToString()); bel(Rect(10,50,100,30),touchposition.ToString()); }。
Unity解决Input和cinemachine同时使用时的控制问题
以CinemachineFreeLook为例,可以看到,在X Axis和 Y Axis中,依赖里Input Axis Name,而这里的默认值是旧的输入系统,我们需要把这两个值覆盖为新的输入系 统。
而官方为我们提供解决方法,添加组件Cinemachine Input Provider
在Input Aciton中添加一个Action用于处理鼠标操作,Action的Control Type 选择Vector2。
在 绑 定 按 键 时 , 使 用 鼠 标 /指 针 的 Delta作 为 变 动 值 来 处 理 。 保存action后,去选择配置XY Axi图片就不行服务端说boundary前后出现了双引号但是按网上说的去双引号还是不成功
Unity解决 Input和 cinemachine同时使用时的控制问题
Unity 里Cinemachine中的Virtual Camera和Free Look Camera两种虚拟相机中依赖了旧的输入系统,这就导致使用新的Input System时会报错
Unity3D学习笔记(二十二):ScrollView和事件接口
Unity3D学习笔记(⼆⼗⼆):ScrollView和事件接⼝昨天问题InputField光标被遮挡问题:背景图⽚输⼊层级⾼于光标的层级,把光标弄成⼦物体,⼦物体层级⾼⾃制的滑动框,选项怎么对齐,把Template的Pivot.y改为1分辨率的区别:16:9和1920x108016:9,屏幕像素按⽐例缩放,⽂本会变模糊1920x1080,屏幕像素是固定的Canvas Group:控制⼀组UI的某些属性(所有⼦物体的UI组件的属性)Alpha:改变所有⼦物体的透明通道,0不显⽰,1显⽰Interactable:改变所有⼦物体的交互状态,可交互,不可交互Blocks Raycasts:改变所有⼦物体的射线检测,接受射线检测,不接受射线检测Ignore Parent Group:是否忽略⽗物体的Canvas Group的影响登录界⾯的淡⼊淡出效果Panel组件(少⽤)作⽤:背景图或⽗物体ScrollView组件(拖动框)Content:可拖动的物体,改变image的⽗物体Content的坐标Horizontal、Vertical:是否可以⽔平、垂直拖动Movement Type:移动类型----Elastic:回弹原位,会⾃动回到对齐的位置--------Elasticity回弹系数,值越⼤回弹越慢----Unrestricted:⾃由拖动,⽆限制,拖到哪就是哪----Clamped:有限制的,拖动物体的拖动框最多能跟视窗对齐,⽗物体边缘限制在视窗边缘Inertia:惯性----Deceleration Rate:惯性的衰减系数,0相当于没有惯性,1Scroll Sensitivity:⿏标滚轮的滚动系数Viewport:视窗,如果未指定,则视窗默认为ScrollRect的范围Horizontal ScrollBar:⽔平滚动条----Visibility:显⽰⽅式--------Permanent:永久显⽰--------Auto Hide:⾃动隐藏--------Auto Hide And Expand Viewport:⾃动隐藏并且扩展视窗Vertical ScrollBar:垂直滚动条Mask遮罩:图⽚圆形显⽰遮罩依赖于Image图⽚形状,必须与Image⼀起使⽤,否则⽆效Show Mask Graphic:是否显⽰遮罩的图⽚Viewport⾥的遮罩⾃制拖动框综合练习-拖动框Hrizontal Layout Group:⽔平⾃动布局组件(对⾃⼰的⼦物体)Padding:距离四个边缘的间距,距离四个变量的距离Spacing:各个元素之间的间距Child Alignment:⼦物体的对齐⽅式Child Control Size:----Width:是否强⾏扩⼤⼦物体的宽度,来填补额外的可⽤空间----Height:是否强⾏扩⼤⼦物体的⾼度,来填补额外的可⽤空间----勾选后,⼦物体的宽⾼会变成不可编辑Child Force Expand:是否强⾏扩⼤物体间的横向间隔,来填补额外的可⽤空间Movement Type - Clamped:需要在Content的长度⽐Viewport⼤的情况下才可以拖动可以使⽤⾃动扩容组件,给Content动态添加长度Content Size Fitter(⾃动扩容组件)Horizontal Fit:⽔平⾃动扩容----Unconstralned:不需要⾃动扩容----Min Size:最⼩值----Preferred Size:最合适的值(常⽤)⼀般情况下,需要和⾃动布局组件或Text组件⼀起使⽤⾃动扩容后,宽⾼变为不可修改名称显⽰代码操作using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.UI;public class SelectUI : MonoBehaviour {public Text nameText;public string playerName;private Toggle toggle;// Use this for initializationvoid Start () {toggle = GetComponent<Toggle>();toggle.onValueChanged.AddListener(OnValueChanged);}// Update is called once per framevoid Update () {}void OnValueChanged(bool isOn){Debug.Log("OnValueChanged");nameText.text = isOn ? playerName : "";}}UGUI事件接⼝命名空间:using UnityEngine.EventSystems;继承了UGUI事件接⼝的类,挂载物体上,只要⼦物体或⾃⼰本⾝能接受射线检测,接⼝就是可以执⾏的。
Unity移动端触摸屏操作
Unity移动端触摸屏操作Unity 触屏操作当将Unity游戏运⾏到IOS或Android设备上时,桌⾯系统的⿏标左键可以⾃动变为⼿机屏幕上的触屏操作,但如多点触屏等操作却是⽆法利⽤⿏标操作进⾏的。
Unity的Input类中不仅包含桌⾯系统的各种输⼊功能,也包含了针对移动设备触屏操作的各种功能,下⾯介绍⼀下Input 类在触碰操作上的使⽤。
⾸先介绍⼀下Input.touches结构,这是⼀个触摸数组,每个记录代表着⼿指在屏幕上的触碰状态。
每个⼿指触控都是通过Input.touches来描述的:fingerId触摸的唯⼀索引position触摸屏幕的位置deltatime从最后状态到⽬前状态所经过的时间tapCount点击数。
Andorid设备不对点击计数,这个⽅法总是返回1deltaPosition⾃最后⼀帧所改变的屏幕位置phase相位,也即屏幕操作状态其中phase(状态)有以下这⼏种:Began⼿指刚刚触摸屏幕Moved⼿指在屏幕上移动Stationary⼿指触摸屏幕,但⾃最后⼀阵没有移动Ended⼿指离开屏幕Canceled系统取消触控跟踪,原因如把设备放在脸上或同时超过5个触摸点下⾯通过⼀段代码来进⾏移动设备触摸操作的实现:using UnityEngine;using System.Collections;public class AndroidTouch : MonoBehaviour {private int isforward;//标记摄像机的移动⽅向//记录两个⼿指的旧位置private Vector2 oposition1=new Vector2();private Vector2 oposition2=new Vector2();Vector2 m_screenPos = new Vector2(); //记录⼿指触碰的位置//⽤于判断是否放⼤bool isEnlarge(Vector2 oP1, Vector2 oP2, Vector2 nP1, Vector2 nP2){//函数传⼊上⼀次触摸两点的位置与本次触摸两点的位置计算出⽤户的⼿势float leng1 = Mathf.Sqrt((oP1.x - oP2.x) * (oP1.x - oP2.x) + (oP1.y - oP2.y) * (oP1.y - oP2.y));float leng2 = Mathf.Sqrt((nP1.x - nP2.x) * (nP1.x - nP2.x) + (nP1.y - nP2.y) * (nP1.y - nP2.y));if (leng1 < leng2){//放⼤⼿势return true;}else{//缩⼩⼿势return false;}}void Start(){Input.multiTouchEnabled = true;//开启多点触碰}void Update(){if (Input.touchCount <= 0)return;if (Input.touchCount == 1) //单点触碰移动摄像机{if (Input.touches[0].phase == TouchPhase.Began)m_screenPos = Input.touches[0].position; //记录⼿指刚触碰的位置if (Input.touches[0].phase == TouchPhase.Moved) //⼿指在屏幕上移动,移动摄像机{transform.Translate(new Vector3( Input.touches[0].deltaPosition.x * Time.deltaTime, Input.touches[0].deltaPosition.y * Time.deltaTime, 0));}}else if (Input.touchCount > 1)//多点触碰{//记录两个⼿指的位置Vector2 nposition1 = new Vector2();Vector2 nposition2 = new Vector2();//记录⼿指的每帧移动距离Vector2 deltaDis1 = new Vector2();Vector2 deltaDis2 = new Vector2();for (int i = 0; i < 2; i++){Touch touch = Input.touches[i];if (touch.phase == TouchPhase.Ended)break;if (touch.phase == TouchPhase.Moved) //⼿指在移动{if (i == 0){nposition1 = touch.position;deltaDis1 = touch.deltaPosition;}else{nposition2 = touch.position;deltaDis2 = touch.deltaPosition;if (isEnlarge(oposition1, oposition2, nposition1, nposition2)) //判断⼿势伸缩从⽽进⾏摄像机前后移动参数缩放效果isforward = 1;elseisforward = -1;}//记录旧的触摸位置oposition1 = nposition1;oposition2 = nposition2;}//移动摄像机Camera.main.transform.Translate(isforward*Vector3.forward * Time.deltaTime*(Mathf.Abs(deltaDis2.x+deltaDis1.x)+Mathf.Abs(deltaDis1.y+deltaDis2.y))); }}}}将这个脚本绑定在主摄像机上,发现单触摸操作可上下左右移动摄像机,双触摸操作可以缩放。
UnityInputSystem教程
UnityInputSystem教程针对版本2018.4 LTS与Input System 0.2.1。
Unity看起来有两套负责处理⽤户输⼊的系统,⼀套是Input Manager,另外⼀套是⼀直在维护与开发的Input System,现在的版本是1.0。
但是如果倘若跟我⼀样需要修改⽼的Unity⼯程,很有可能还是⽤了⽼版本的Input System。
本⽂给Unity初学者展⽰如何使⽤Input System处理外部按键输⼊,进⽽处理游戏逻辑。
⾸先点击编辑器菜单Window下Package Manager,确认Input System已经安装。
这⾥使⽤的是⽼版本的0.2.1,从Unity⽹站上直接下载即可。
接下来解释如何定义按键。
当使⽤了Input System之后,在Project⼯程⽬录内的某个⽂件夹内点击⿏标右键,可以看到我们可以创建⼀个Input System。
⽽后输⼊⼀个名字,我们的⼀个输⼊系统就创建好了。
这⾥需要解释⼀下,⼀个游戏可以有多个输⼊系统。
每⼀个输⼊系统只是定义了ActionMap和按键的映射,和游戏本⾝逻辑⽆关,所以许多时候,如果游戏存在多个不同的场景,那么显然为了区分起见可以创建多个输⼊系统,这样游戏逻辑处理起来会简单,以及更有条理⼀些。
继续⼯作。
在Inspector⾯板内,点击Edit asset,就开始定义ActionMap和按键的映射。
这⾥我们定义了⼀个WarriorConfig和MagicanConfig,分别对应了战⼠和魔法师的动作,这⾥对于战⼠,我们对应了两种攻击⽅式,普通攻击和快速攻击,按键是f和s。
然后⼀定要点Save Asset,这样这个Unity Asset就存储了这⼀套规则。
点击Generate C# Class之后,填好⽣成的C#⽂件路径和类名,点击Apply,这样其C#⽂件就⽣成了。
下⾯开始为游戏对象添加Script,假如场景⾥有个⼗字⼸Crossbow的脚本⽂件,当我们要处理按键与⼗字⼸动作的关系的时候,需要先定义好对应Input System的成员变量。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Unity3D技术之Input按键系统详解
默认输入轴:
Horizontal 和 Vertical被映射到w, a, s, d键和方向键
Fire1, Fire2, Fire3被分别映射到Ctrl,Option(Alt)和Command键
Mouse X 和 Mouse Y被映射到鼠标移动增量
Window Shake X 和 Window Shake Y 被映射到窗口的移动
添加新的输入轴
添加新的虚拟轴,选择菜单Edit->Project Settings->Input :
名称(Name):名称用于从脚本使用这个轴
描述名称(Descriptive Name):正值名称显示于配置对话框的输入标签,用于独立版。
描述负名称(Descriptive Negative Name):负值名称显示于配置对话框的输入标签,用于独立版。
文章出处【狗刨学习网】
负按钮(Negative Button):该按钮用于在负方向移动轴(如:左)
正按钮(Positive Button):该按钮用于在正方向移动轴(如:右)
备选负按钮(Alt Negative Button):备选按钮用于在负方向移动轴(如:a)
备选正按钮(Alt Positive Button):备选按钮用于在正方向移动轴(如:d)
重力(Gravity):当没有按钮被按下,在单位每秒速度,轴下降到0。
死亡(Dead):模拟的死区大小。
设定范围内所有模拟设备的值为0。
灵敏度(Sensitivity):在单位每秒速度,轴将移向目标值。
这近用于数码设备。
捕捉(Snap):如果启用,当按下相反方向的按钮,该轴值将重设为0。
反向(Invert):如果启用,负按钮将提供一个正值,反之亦然。
类型(Type):控制轴的输入设备类型
轴(Axis):连接设备的轴将控制这个轴(因为上面正负按钮设置的是左右,所以这里要选X轴)
操作杆(Joy Num)连接操纵杆将控制这个轴
多点触控
触控列表(Input.touches):返回上一帧所有触控状态的对象列表(Touch[]:单个触摸状态)。
触控状态(TouchPhase):(例子:if(touch.phase != TouchPhase.Began))
Began:手指已触摸屏幕。
Moved:手指在屏幕上移动。
Stationary:手指触摸屏幕,但并没有移动。
Ended:手指从屏幕上移开。
这是一个触摸的最后状态。
Canceled:系统取消跟踪触摸,如用户把屏幕放到他脸上或超过五个接触同时发生。
这是一个触摸的最后状态。
设备面朝方向
Input.deviceOrientation : (例子:if (Input.deviceOrientation == DeviceOrientation.FaceDown))
Unknown:设备的方向不能被确定。
Portrait:设备在纵向模式,设备直立并home按钮在底部。
PortraitUpsideDown:设备在纵向模式,但颠倒一下,设备直立并home按钮在顶部。
LandscapeLeft:设备在横向模式,设备直立并home按钮在右边。
LandscapeRight:设备在横向模式,设备直立并home按钮在左边。
FaceUp:设备保持与地面平行,屏幕的面向上。
FaceDown:设备保持与地面平行,屏幕的面向下。
加速传感器
Input.acceleration :竖直拿着设备(home按钮在底部),X轴指向右,Y轴指向上,Z轴指向前。
加速度传感器数值可能被颠簸影响。
应用低通过过滤器可以是它平滑,摆脱干扰。
GPS地理位置定位
Unity通过iPhoneSettings.StartLocationServiceUpdates()方法开始定位服务的更新。
最后通过stLocation可以收回位置坐标变量。
API: static void StartLocationServiceUpdates ( float desiredAccuracyInMeters = 10f,float updateDistanceInMeters = 10f)
参数1:desiredAccuracyInMeters - 理想服务精确度(单位是米)。
使用更高的值
像500通常不需要打开GPS芯片从而保持电池电量,像5-10的值可以被用来得到最好的精确度。
默认值是10米。
参数2:updateDistanceInMeters - 最小的距离(单位是米)的一种服务在横向移动之前必须更新stLocation属性。
像500意味着更少的开销。
默认的是10米。