• Unity入门06——Unity重要组件和API(3)


    1.输入相关Input

    注意:输入相关内容肯定是写在Update中的 

    1.鼠标在屏幕位置

    屏幕坐标的原点 是在 屏幕的左下角 往右是x轴正方向 往上是y轴正方向

    返回值是 Vector3 但是只有 x和y有值 z一直是0 是因为屏幕本来就是2D的 不存在z轴

    print(Input.mousePosition);

    2.检测鼠标输入 

    鼠标按下相关检测 对于我们来说

    比如:1.可以做 发射子弹

               2.可以控制摄像机 转动 

    1.鼠标按下一瞬间 进入    0左键 1右键 2中键

    1. 只有按下的这一瞬间 进入一次
    2. if (Input.GetMouseButtonDown(0))
    3. {
    4. print("鼠标左键按下了");
    5. }

    2.鼠标抬起一瞬间 进入

    1. if (Input.GetMouseButtonUp(0))
    2. {
    3. print("鼠标左键抬起了");
    4. }

    3.鼠标长按按下抬起都会进入

    1. 当按住按键不放时 会一直进入 这个判断
    2. if (Input.GetMouseButton(1))
    3. {
    4. print("右键按下");
    5. }

    4.中键滚动

    1. 返回值的 y -1往下滚 0没有滚 1往上滚
    2. 它的返回值 是Vector的值 我们鼠标中键滚动 会改变其中的y值
    3. print(Input.mouseScrollDelta);

    3.检测键盘输入 

    比如说 按一个键释放一个技能或者切换武器 等等的操作 

    1.键盘按下

    1. if (Input.GetKeyDown(KeyCode.W))
    2. {
    3. print("W键按下");
    4. }
    1. 传入字符串的重载
    2. 这里传入的 字符串 不能是大写的 不然会报错
    3. if (Input.GetKeyDown("q"))
    4. {
    5. print("Q键按下");
    6. }

    2.键盘抬起

    1. if (Input.GetKeyUp(KeyCode.W))
    2. {
    3. print("W键抬起");
    4. }

    3.键盘长按  

    1. if (Input.GetKey(KeyCode.W))
    2. {
    3. print("长按W");
    4. }

     4.检测默认轴输入

    我们学习鼠标 键盘输入,主要是用来控制玩家 比如 旋转 位移等等,所以Unity提供了 更方便的方法 来帮助我们控制 对象的 位移和旋转

    1. 1.键盘AD按下时 返回 -11之间的变换
    2. 得到这个值 就是我们的 左右方向 我们可以通过它来控制 对象左右移动 或者左右旋转
    3. print(Input.GetAxis("Horizontal"));
    4. 2.键盘SW按下时 返回 -11之间的变换
    5. 得到这个值 就是我们的 上下方向 我们可以通过它来控制 对象上下移动 或者上下旋转
    6. print(Input.GetAxis("Vertical"));
    7. 3.鼠标横向移动时 返回 -11之间的变换
    8. print(Input.GetAxis("Mouse X"));
    9. 4.鼠标纵向移动时 返回 -11之间的变换
    10. print(Input.GetAxis("Mouse Y"));
    11. 我们默认的 GetAxis方法 是有渐变的 会从 -11之间 渐变 会出现小数
    12. GetAxisRaw方法 和 GetAxis 使用方式相同
    13. 只不过 它的返回值 只会是 -1 0 1 不会有中间值

    5.其他

    1. 1.是否有任意键或鼠标长按
    2. if (Input.anyKey)
    3. {
    4. print("有一个键 长按");
    5. }
    6. 2.是否有任意键或鼠标按下
    7. if (Input.anyKeyDown)
    8. {
    9. print("有一个键 按下");
    10. //这一帧的键盘输入
    11. print(Input.inputString);
    12. }
    13. 3.手柄输入相关
    14. //得到连接的手柄的所有按钮名字
    15. string[] strs = Input.GetJoystickNames();
    16. 4.某一个手柄键按下
    17. if (Input.GetButtonDown("Jump"))
    18. {
    19. }
    20. 5.某一个手柄键抬起
    21. if (Input.GetButtonUp("Jump"))
    22. {
    23. }
    24. 6.某一个手柄键长按
    25. if (Input.GetButton("Jump"))
    26. {
    27. }
    28. 7.移动设备触摸相关
    29. if (Input.touchCount > 0)
    30. {
    31. Touch t1 = Input.touches[0];
    32. //位置
    33. print(t1.position);
    34. //相对上次位置的变化
    35. print(t1.deltaPosition);
    36. }
    37. 8.是否启用多点触控
    38. Input.multiTouchEnabled = false;
    39. 9.陀螺仪(重力感应)
    40. 是否开启陀螺仪 必须开启 才能正常使用
    41. Input.gyro.enabled = true;
    42. 10.重力加速度向量
    43. print(Input.gyro.gravity);
    44. 11.旋转速度
    45. print(Input.gyro.rotationRate);
    46. 12.陀螺仪 当前的旋转四元数
    47. 比如 用这个角度信息 来控制 场景上的一个3D物体受到重力影响
    48. 手机怎么动 它怎么动
    49. print(Input.gyro.attitude);

     2.屏幕相关Screen

    1.静态属性

    1.常用 

    1. 当前屏幕分辨率
    2. Resolution r = Screen.currentResolution;
    3. print("当前屏幕分辨率的宽" + r.width + "高" + r.height);
    4. 屏幕窗口当前宽高
    5. 这里得到的 是当前 窗口的 宽高 不是设备分辨率的宽高
    6. 一般写代码 是要用窗口的宽高 做计算时 就用他们
    7. print(Screen.width);
    8. print(Screen.height);
    9. 屏幕休眠模式
    10. Screen.sleepTimeout = SleepTimeout.NeverSleep;

    2.不常用

    1. 运行时是否全屏模式
    2. Screen.fullScreen = true;
    3. 窗口模式
    4. 1.独占全屏 Screen.fullScreenMode = FullScreenMode.ExclusiveFullScreen;
    5. 2.全屏窗口 Screen.fullScreenMode = FullScreenMode.FullScreenWindow;
    6. 3.最大化窗口 Screen.fullScreenMode = FullScreenMode.MaximizedWindow;
    7. 4.窗口模式 Screen.fullScreenMode = FullScreenMode.Windowed;
    8. 移动设备屏幕转向相关
    9. 1.允许自动旋转为左横向 Home键在左
    10. Screen.autorotateToLandscapeLeft = true;
    11. 2.允许自动旋转为右横向 Home键在右
    12. Screen.autorotateToLandscapeRight = true;
    13. 3.允许自动旋转为纵向 Home键在下
    14. Screen.autorotateToPortrait = true;
    15. 4.允许自动旋转为纵向倒着看 Home键在上
    16. Screen.autorotateToPortraitUpsideDown = true;
    17. 指定屏幕显示方向
    18. Screen.orientation = ScreenOrientation.Landscape;

    2.静态方法

    1. 设置分辨率 一般移动设备不使用
    2. 参数三:是否全屏
    3. Screen.SetResolution(1920, 1080, false);

    3.Camera 

    1.重要静态成员

    1.获取摄像机

    1. 如果用之前的知识 来获取摄像机
    2. 主摄像机的获取
    3. print(Camera.main.name);
    4. 获取摄像机的数量
    5. print(Camera.allCamerasCount);
    6. 得到所有摄像机
    7. Camera[] allCamrea = Camera.allCameras;
    8. print(allCamrea.Length);

    2.渲染相关委托

    1. 摄像机剔除前处理的委托函数
    2. Camera.onPreCull += (c) =>
    3. {
    4. };
    5. 摄像机 渲染前 处理的委托
    6. Camera.onPreRender += (c) =>
    7. {
    8. };
    9. 摄像机 渲染后 处理的委托
    10. Camera.onPostRender += (c) =>
    11. {
    12. };

    2.重要成员

    1.界面上的参数 都可以在Camera中获取到 

    比如 下面这句代码 就是得到主摄像机对象 上的深度 进行设置

    Camera.main.depth = 10;

    2.世界坐标转屏幕坐标

    1. 转换过后 x和y对应的就是屏幕坐标 z对应的 是 这个3D物体 离我们的摄像机有多远
    2. 我们会用这个来做的功能 最多的 就是头顶血条相关的功能
    3. Vector3 v=Camera.main.WorldToScreenPoint(this.transform.position);
    4. print(v);

    3.屏幕坐标转世界坐标 

    1. 之所以改变z轴 是因为 如果不改 z默认为0
    2. 转换过去的世界坐标系的点 永远都是一个点 可以理解为 视口 相交的焦点
    3. 如果改变了z 那么转换过去的 世界坐标的点 就是相对于 摄像机前方多少单位的横截面上的世界坐标点
    4. Vector3 v = Input.mousePosition;
    5. v.z = 10;
    6. obj.position = Camera.main.ScreenToWorldPoint(v);
    7. //print(Camera.main.ScreenToWorldPoint(v));
  • 相关阅读:
    Abnova丨 MaxPab 小鼠源多克隆抗体解决方案
    算力,承载AI无限可能
    【愚公系列】2022年08月 微信小程序-纵向和横向选项卡功能实现
    C#扩展函数&Unity子对象组件的定向获取
    缩短cin时间
    PRIDE PPP-AR II 软件在 Ubuntu 20.04.5 LTS使用随笔
    YOLOv3目标检测全过程记录
    云计算盛宴即将揭幕,re:Invent创新方向提前剧透
    Linux学习笔记5-GPIO(3)
    前端插件库之vue3使用vue3-cropper上传头像(裁剪图片、上传)
  • 原文地址:https://blog.csdn.net/weixin_45274937/article/details/126707838