注意:输入相关内容肯定是写在Update中的
屏幕坐标的原点 是在 屏幕的左下角 往右是x轴正方向 往上是y轴正方向
返回值是 Vector3 但是只有 x和y有值 z一直是0 是因为屏幕本来就是2D的 不存在z轴
print(Input.mousePosition);
鼠标按下相关检测 对于我们来说
比如:1.可以做 发射子弹
2.可以控制摄像机 转动
- 只有按下的这一瞬间 进入一次
- if (Input.GetMouseButtonDown(0))
- {
- print("鼠标左键按下了");
- }
- if (Input.GetMouseButtonUp(0))
- {
- print("鼠标左键抬起了");
-
- }
- 当按住按键不放时 会一直进入 这个判断
- if (Input.GetMouseButton(1))
- {
- print("右键按下");
- }
- 返回值的 y -1往下滚 0没有滚 1往上滚
- 它的返回值 是Vector的值 我们鼠标中键滚动 会改变其中的y值
- print(Input.mouseScrollDelta);
比如说 按一个键释放一个技能或者切换武器 等等的操作
- if (Input.GetKeyDown(KeyCode.W))
- {
- print("W键按下");
- }
- 传入字符串的重载
- 这里传入的 字符串 不能是大写的 不然会报错
- if (Input.GetKeyDown("q"))
- {
- print("Q键按下");
- }
- if (Input.GetKeyUp(KeyCode.W))
- {
- print("W键抬起");
- }
- if (Input.GetKey(KeyCode.W))
- {
- print("长按W");
- }
我们学习鼠标 键盘输入,主要是用来控制玩家 比如 旋转 位移等等,所以Unity提供了 更方便的方法 来帮助我们控制 对象的 位移和旋转
- 1.键盘AD按下时 返回 -1到1之间的变换
- 得到这个值 就是我们的 左右方向 我们可以通过它来控制 对象左右移动 或者左右旋转
- print(Input.GetAxis("Horizontal"));
-
- 2.键盘SW按下时 返回 -1到1之间的变换
- 得到这个值 就是我们的 上下方向 我们可以通过它来控制 对象上下移动 或者上下旋转
- print(Input.GetAxis("Vertical"));
-
- 3.鼠标横向移动时 返回 -1到1之间的变换
- print(Input.GetAxis("Mouse X"));
-
- 4.鼠标纵向移动时 返回 -1到1之间的变换
- print(Input.GetAxis("Mouse Y"));
-
- 我们默认的 GetAxis方法 是有渐变的 会从 -1到1之间 渐变 会出现小数
-
- GetAxisRaw方法 和 GetAxis 使用方式相同
- 只不过 它的返回值 只会是 -1 0 1 不会有中间值
- 1.是否有任意键或鼠标长按
- if (Input.anyKey)
- {
- print("有一个键 长按");
- }
-
- 2.是否有任意键或鼠标按下
- if (Input.anyKeyDown)
- {
- print("有一个键 按下");
- //这一帧的键盘输入
- print(Input.inputString);
- }
-
- 3.手柄输入相关
- //得到连接的手柄的所有按钮名字
- string[] strs = Input.GetJoystickNames();
-
- 4.某一个手柄键按下
- if (Input.GetButtonDown("Jump"))
- {
-
- }
-
- 5.某一个手柄键抬起
- if (Input.GetButtonUp("Jump"))
- {
-
- }
-
- 6.某一个手柄键长按
- if (Input.GetButton("Jump"))
- {
-
- }
-
- 7.移动设备触摸相关
- if (Input.touchCount > 0)
- {
- Touch t1 = Input.touches[0];
- //位置
- print(t1.position);
- //相对上次位置的变化
- print(t1.deltaPosition);
- }
-
- 8.是否启用多点触控
- Input.multiTouchEnabled = false;
-
- 9.陀螺仪(重力感应)
- 是否开启陀螺仪 必须开启 才能正常使用
- Input.gyro.enabled = true;
-
- 10.重力加速度向量
- print(Input.gyro.gravity);
-
- 11.旋转速度
- print(Input.gyro.rotationRate);
-
- 12.陀螺仪 当前的旋转四元数
- 比如 用这个角度信息 来控制 场景上的一个3D物体受到重力影响
- 手机怎么动 它怎么动
- print(Input.gyro.attitude);
- 当前屏幕分辨率
- Resolution r = Screen.currentResolution;
- print("当前屏幕分辨率的宽" + r.width + "高" + r.height);
-
- 屏幕窗口当前宽高
- 这里得到的 是当前 窗口的 宽高 不是设备分辨率的宽高
- 一般写代码 是要用窗口的宽高 做计算时 就用他们
- print(Screen.width);
- print(Screen.height);
-
- 屏幕休眠模式
- Screen.sleepTimeout = SleepTimeout.NeverSleep;
- 运行时是否全屏模式
- Screen.fullScreen = true;
-
- 窗口模式
- 1.独占全屏 Screen.fullScreenMode = FullScreenMode.ExclusiveFullScreen;
- 2.全屏窗口 Screen.fullScreenMode = FullScreenMode.FullScreenWindow;
- 3.最大化窗口 Screen.fullScreenMode = FullScreenMode.MaximizedWindow;
- 4.窗口模式 Screen.fullScreenMode = FullScreenMode.Windowed;
-
- 移动设备屏幕转向相关
- 1.允许自动旋转为左横向 Home键在左
- Screen.autorotateToLandscapeLeft = true;
-
- 2.允许自动旋转为右横向 Home键在右
- Screen.autorotateToLandscapeRight = true;
-
- 3.允许自动旋转为纵向 Home键在下
- Screen.autorotateToPortrait = true;
-
- 4.允许自动旋转为纵向倒着看 Home键在上
- Screen.autorotateToPortraitUpsideDown = true;
-
- 指定屏幕显示方向
- Screen.orientation = ScreenOrientation.Landscape;
- 设置分辨率 一般移动设备不使用
- 参数三:是否全屏
- Screen.SetResolution(1920, 1080, false);
- 如果用之前的知识 来获取摄像机
- 主摄像机的获取
- print(Camera.main.name);
-
- 获取摄像机的数量
- print(Camera.allCamerasCount);
-
- 得到所有摄像机
- Camera[] allCamrea = Camera.allCameras;
- print(allCamrea.Length);
- 摄像机剔除前处理的委托函数
- Camera.onPreCull += (c) =>
- {
-
- };
-
- 摄像机 渲染前 处理的委托
- Camera.onPreRender += (c) =>
- {
-
- };
-
- 摄像机 渲染后 处理的委托
- Camera.onPostRender += (c) =>
- {
-
- };
比如 下面这句代码 就是得到主摄像机对象 上的深度 进行设置
Camera.main.depth = 10;
- 转换过后 x和y对应的就是屏幕坐标 z对应的 是 这个3D物体 离我们的摄像机有多远
- 我们会用这个来做的功能 最多的 就是头顶血条相关的功能
- Vector3 v=Camera.main.WorldToScreenPoint(this.transform.position);
- print(v);
- 之所以改变z轴 是因为 如果不改 z默认为0
- 转换过去的世界坐标系的点 永远都是一个点 可以理解为 视口 相交的焦点
- 如果改变了z 那么转换过去的 世界坐标的点 就是相对于 摄像机前方多少单位的横截面上的世界坐标点
- Vector3 v = Input.mousePosition;
- v.z = 10;
- obj.position = Camera.main.ScreenToWorldPoint(v);
- //print(Camera.main.ScreenToWorldPoint(v));