笔记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);

相机

清除标识、深度

在这里插入图片描述

渲染、视图、视野、目标纹理

在这里插入图片描述

目标纹理之小地图的制作方法

在这里插入图片描述

耳朵组件

在这里插入图片描述
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章