笔记13 输入
键鼠输入
任何按键按下
一直监听anyKey(每帧运行一次。很少用)
//返回很多次。很少用
if (Input.anyKey)
{
Debug.Log("anyKey");
}
监听1次anyKeyDown(按键按下运行一次。偶尔用)
//监听1次。偶尔用
if (Input.anyKeyDown)
{
Debug.Log("anyKeyDown");
}
示意图
监听按键(用的特别多)
KeyCode是个枚举,把所有的按键当成一个值。例如:Space空格、Alpha1数字1、Alpha12数字2。
如果不写枚举,直接在括号里双引号某个按键也是可以的。例如:按键a,写为:“a”
按下空格监听一次
//表示:按下空格监听一次。
if (Input.GetKeyDown(KeyCode.Space))
{
Debug.Log("按下空格");
}
按下空格,一直监听
//按下空格,一直监听
if (Input.GetKey(KeyCode.Space))
{
Debug.Log("按键中……");
}
擡起空格,调用一次
//擡起按键,调用
if (Input.GetKeyUp(KeyCode.Space))
{
Debug.Log("擡起空格");
}
鼠标
鼠标:0左键、1右键、2中建(滚轮)
点击了左键
//点击了左键
if (Input.GetMouseButtonDown(0)) ;
{
Debug.Log("点击了左键");
}
按左键中
//按左键中
if (Input.GetMouseButton(0)) ;
{
Debug.Log("按左键中……");
}
擡起了左键
//擡起了左键
if (Input.GetMouseButtonUp(0)) ;
{
Debug.Log("擡起了左键");
}
实例:连续技
//连续技。例如连续按:下S、右D、拳U,出一个技能。
public class InputTest : MonoBehaviour
{
//释放技能
//KeyCode是枚举,给它写个数组,叫技能skill。
private KeyCode[] skill = { KeyCode.S, KeyCode.D, KeyCode.U };
//按键时间。此处,限定1秒之内按完这三个键
private float skillTime = 1;
//计时器。计算当前过了多长时间了
private float timer = 0;
//按的键。目前按了哪几个键。用了List(动态数组),就说明是时刻添加我们按的键
private List<KeyCode> InputBuff;
// Use this for initialization在初始化时使用此选项
void Start ()
{
//初始化
InputBuff = new List<KeyCode>();
}
// Update is called once per frame每帧更新一次
void Update ()
{
//计算计时器的时间。
/*Time.deltaTime;是每帧的时间,那么timer表示把所有帧的时间都加起来,
即从游戏开始到现在的时间(游戏运行时间)。*/
timer += Time.deltaTime;
if (Input.GetKeyDown(KeyCode.S))
{
Debug.Log("开始输入了");
timer = 0;
//清空按键
InputBuff.Clear();
//添加按键
InputBuff.Add(KeyCode.S);
}
if(Input.GetKeyDown(KeyCode.D))
{
InputBuff.Add(KeyCode.D);
}
if (Input.GetKeyDown(KeyCode.U))
{
InputBuff.Add(KeyCode.U);
}
//时间要小于1秒,按键要至少等于规定的三个按键
if(timer < skillTime && InputBuff.Count >= skill.Length)
{
//用布尔值临时保存一下:能否放技能
bool isSkill = false;
//for循环
for (int i = 0; i < skill.Length; i++)
{
if(InputBuff[i] == skill[i])
{
isSkill = true;
}else
{
isSkill = false;
break; //跳出循环
}
}
//如果布尔值为真
if (isSkill)
{
//放出技能
Debug.Log("下右拳!");
//清空计时器
timer = 0;
//清空按键
InputBuff.Clear();
}
}
}
}
真正的格斗游戏,一般不会要求一个总时间说1秒之内按那三个键,
而会规定每个按键多长时间,例如S0.2秒,D0.2秒。
手机触摸输入
与按键不同的是手机可以同时有两个点、甚至三个点触摸。默认的是单点触摸
public class touchTest : MonoBehaviour {
// Use this for initialization
void Start () {
//开启多点触摸
Input.multiTouchEnabled = true;
}
// Update is called once per frame
void Update () {
//判断单点触摸。touchCount触摸数量
if (Input.touchCount == 1)
{
//打印出触摸位置。你按下的点事保存在touches这个数组里的
Debug.Log(Input.touches[0].position);
//触摸位置
switch(Input.touches[0].phase)
{
//它的值是枚举值(共5个),直接用case,注意后面是冒号!
//开始触摸,调用一次
case TouchPhase.Began:
break;
//触摸中,并却移动
case TouchPhase.Moved:
break;
//触摸结束
case TouchPhase.Ended:
break;
//触摸取消(其他突发事件导致的)
case TouchPhase.Canceled:
break;
//触摸中不移动
case TouchPhase.Stationary:
break;
}
}
}
}
//判断多点触摸。例如两点触摸
if(Input.touchCount == 2)
{
}
了解虚拟轴
水平轴
void Update ()
{
/*水平轴。返回值:负轴-1、0、正轴1。而且这个返回值是过渡的,
比如现在是0,按了→或者d之后不是立马变成1,而是0.1、0.2……逐渐到1。到1就到头了。*/
//horizontal这个名字随便起,Horizontal这个要和unity里一样。
float horizontal = Input.GetAxis("Horizontal");
Debug.Log(horizontal);
}
虚拟键
//虚拟按键
if (Input.GetButtonDown("Firel"))
{
Debug.Log("开火");
}
监听鼠标移动
//监听鼠标移动
float mouseX = Input.GetAxis("Mouse X");
Debug.Log(mouseX);
相机
清除标识、深度
渲染、视图、视野、目标纹理
目标纹理之小地图的制作方法
耳朵组件