Unity输入与控制

主要概念:

  1.虚拟轴

  2.输入预先设置

示例:

通过键盘控制物体移动

 1 private float speed = 10.0F;    //速度
 2
 3     private float rotaSpeed = 100.0F;   //旋转速度
 4
 5     // Update is called once per frame
 6     void Update () {
 7
 8         //获取垂直方向的虚拟轴,控制w,s
 9         float translation = Input.GetAxis("Vertical") * speed;
10
11         //获取水平方向的虚拟轴,控制a,d
12         float rotation = Input.GetAxis("Horizontal") * rotaSpeed;
13
14         //根据时差进行变幻
15         translation *= Time.deltaTime;
16         rotation *= Time.deltaTime;
17
18         //进行变换
19         transform.Translate(0, 0, translation);
20         transform.Rotate(0,rotation,0);
21     }

主要注意 : 要使用

rotation *= Time.deltaTime;

等语句来获得与刷新的帧率无关的移动效果(平滑性)

3.键盘检测

GetKey和GetButton

GetKey两种方式:

if (Input.GetKey(KeyCode.UpArrow))
        {
            print("get up");
        }
if (Input.GetKey(“up”))
        {
            print("get up");
        }

GetButton的方式:

if(Input.GetButton("Fire1")){
            print("pressed Fire1");
        }

可知GetButton获取的是虚拟轴的名称

可用于检测单一键盘事件的发生;譬如射击

4.鼠标事件

检测单击事件:

if (Input.GetMouseButtonDown(0))
        {
            print("按下了左键");
        }

0-左键,1-右键,2-中键

检测长按事件:

if (Input.GetMouseButton(0))
        {
            print("按下了左键");
        }

检测按键释放:

if (Input.GetMouseButtonUp(0))
        {
            print("放开了左键");
        }

在GUI系统中可以按照如下进行双击检测

void OnGUI()
    {
        Event e = Event.current;
        if (e.isMouse && (e.clickCount == 2))
        {
            Debug.Log("双击了鼠标");
        }
    }

,使用的主要是GUI的事件机制。

OK.

时间: 2024-08-01 07:58:47

Unity输入与控制的相关文章

【Unity 3D】学习笔记四十六:输入与控制——键盘事件

在游戏中,玩家控制主角移动,按键攻击,选择行走.都需要在程序中监听玩家的输入.unity为开发者提供了input库,来支持键盘事件,鼠标事件以及触摸事件.本文主要回顾键盘事件,以后会逐文复习鼠标以及触摸事件. 键盘事件 一般的PC键盘有104个不同的按键,在程序中通过监听这些按键事件,从而进一步执行逻辑操作.如:射击游戏中,W表示前进,S表示后退,A表示左移,D表示右移. 按下事件 在脚本中,用input.GetKeyDown( )方法将按键值作为参数,监听此按键是否被按下.按下返回true,否

Unity 编辑器下控制粒子播放跟随位移

在之前的文章<Unity 编辑器下控制播放粒子>讲到在Unity编辑器的Scene视图进行控制播放粒子ParticleSystem,但是当这个粒子是挂载在人物身体部位的时候,会有可能出现不跟随位移的情况.查找原因,发现是 Resimulate 被勾选中了,这个选项是指当粒子参数改变时,立即更新粒子效果.要让粒子也能跟随移动,必须将这个选项取消掉. 可以简单的在编辑器下,取消掉这个选项,如下: 但是,对于其他人员可能不知道这个原因,手动设置不够智能,需要进一步在代码中主动控制.操纵这个选项,需要

[Unity菜鸟] Character控制移动

1. 给角色加角色控制器组件,然后用以下代码可以控制角色移动和跳跃 float speed = 6.0f; float jumpSpeed = 8.0f; float gravity = 20.0f; private Vector3 moveDirection = Vector3.zero; void Start() { // gameObject.rigidbody = false; } void Update() { CharacterController controller = GetC

C语言中输入输出格式控制

1.C语言中,非零值为真,真用1表示:零值为假,假用0表示. 2.转义字符参考: \a 蜂鸣,响铃 \b 回退:向后退一格 \f 换页 \n 换行 \r 回车,光标到本行行首 \t 水平制表 \v 垂直制表 \\ 反斜杠 \' 单引号 \" 双引号 \? 问号 \ddd 三位八进制 \0 空字符(NULL),什么都不做 \xhh 二位十六进制 说明: 1)\v垂直制表和\f换页符对屏幕没有任何影响,但会影响打印机执行响应操作. 2),\n其实应该叫回车换行.换行只是换一行,不改变光标的横坐标:回

Unity 编辑器下控制播放粒子

在Unity编辑器的Scene视图进行控制播放粒子ParticleSystem,可以借助方法Simulate,具体可以参照以下例子: 创建一个空对象ParticleAll,在这个对象下添加一个粒子(要添加多个粒子的话,添加到这个粒子之下),此时选中粒子,可以看到Scene视图预览播放粒子效果.附上新脚本EditParticleSystem,此为空脚本,如下: C# Code 1 2 3 4 5 6 using UnityEngine; public class EditParticleSyste

Unity 编辑器下控制播放Animator

在Unity编辑器的Scene视图进行控制播放Animator,可以借助方法StartPlayback.StopPlayback.StartRecording和StopRecording,具体可以参照以下例子: 创建一个带Controller的Animator对象,可以看到此时人物呈现T型姿势.附上新脚本EditAnimator,此为空脚本,如下: C# Code 1 2 3 4 5 6 using UnityEngine; public class EditAnimator : MonoBeh

一些输入的控制(待优化)

今天刷题时遇到的 首先是输入: 对于这种中间有多个空格的输入,只保存其中的有效部分,可以这么做: 1 while(cin>>b) 2 { 3 if(b!=' ') 4 a[i][e++] = b; 5 if(e==m) 6 break; 7 } 通过控制输入的个数来结束 输入字符串时,有时需要接收多余的换行符,可以这么做: int main() { int t; cin>>t; string tmp; getline(cin,tmp); while(t--) { string a;

iOS 中文输入长度控制

当使用拼音输入法时,该委托方法中的最后一个参数string接受的是输入的字母,而不是选择的汉字,造成的结果是,当想输入文字“我在编程”,输入拼音“wozaibiancheng”,每输入一个字母便会进入委托方法,统计的字符长度是字母的长度,实际上汉字还未超过限制长度,但是字母的长度超过了导致无法继续输入. 中文控制输入长度的方法如下: 1.注册notification [[NSNotificationCenter defaultCenter]addObserver:self selector:@s

自定义控件--史上最简单!EditText多行输入并控制最大输入字符,显示剩余输入字符

转载请注明出处,谢谢~~ 昨天我在网上查看一些关于EditText的控制输入字符的问题.总结了一下有这么几种: 1.通过监听器TextWatcher监听字符数,然后通过弹出窗口阻断输入. 2.通过给EditText设置InputFilter.LengthFilter,来实现最大输入字符,阻断输入. 3.通过TextWather实现控制最大输入. 然后我看了看他们的实现,然后的然后,我放弃了.我不喜欢这种方式,并不是这种方式不可以.因为他们或有限制,或代码麻烦,我崇尚自由(我在装X,发现了没,哈哈