1.输入相关Input
注意:输入相关内容肯定是写在Update中的
1.鼠标在屏幕位置
屏幕坐标的原点 是在 屏幕的左下角 往右是x轴正方向 往上是y轴正方向
返回值是 Vector3 但是只有 x和y有值 z一直是0 是因为屏幕本来就是2D的 不存在z轴
print(Input.mousePosition);
2.检测鼠标输入
鼠标按下相关检测 对于我们来说
比如:1.可以做 发射子弹
2.可以控制摄像机 转动
1.鼠标按下一瞬间 进入 0左键 1右键 2中键
只有按下的这一瞬间 进入一次
if (Input.GetMouseButtonDown(0))
{
print("鼠标左键按下了");
}
2.鼠标抬起一瞬间 进入
if (Input.GetMouseButtonUp(0))
{
print("鼠标左键抬起了");
}
3.鼠标长按按下抬起都会进入
当按住按键不放时 会一直进入 这个判断
if (Input.GetMouseButton(1))
{
print("右键按下");
}
4.中键滚动
返回值的 y -1往下滚 0没有滚 1往上滚
它的返回值 是Vector的值 我们鼠标中键滚动 会改变其中的y值
print(Input.mouseScrollDelta);
3.检测键盘输入
比如说 按一个键释放一个技能或者切换武器 等等的操作
1.键盘按下
if (Input.GetKeyDown(KeyCode.W))
{
print("W键按下");
}
传入字符串的重载
这里传入的 字符串 不能是大写的 不然会报错
if (Input.GetKeyDown("q"))
{
print("Q键按下");
}
2.键盘抬起
if (Input.GetKeyUp(KeyCode.W))
{
print("W键抬起");
}
3.键盘长按
if (Input.GetKey(KeyCode.W))
{
print("长按W");
}
4.检测默认轴输入
我们学习鼠标 键盘输入,主要是用来控制玩家 比如 旋转 位移等等,所以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 不会有中间值
5.其他
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);
2.屏幕相关Screen
1.静态属性
1.常用
当前屏幕分辨率
Resolution r = Screen.currentResolution;
print("当前屏幕分辨率的宽" + r.width + "高" + r.height);
屏幕窗口当前宽高
这里得到的 是当前 窗口的 宽高 不是设备分辨率的宽高
一般写代码 是要用窗口的宽高 做计算时 就用他们
print(Screen.width);
print(Screen.height);
屏幕休眠模式
Screen.sleepTimeout = SleepTimeout.NeverSleep;
2.不常用
运行时是否全屏模式
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;
2.静态方法
设置分辨率 一般移动设备不使用
参数三:是否全屏
Screen.SetResolution(1920, 1080, false);
3.Camera
1.重要静态成员
1.获取摄像机
如果用之前的知识 来获取摄像机
主摄像机的获取
print(Camera.main.name);
获取摄像机的数量
print(Camera.allCamerasCount);
得到所有摄像机
Camera[] allCamrea = Camera.allCameras;
print(allCamrea.Length);
2.渲染相关委托
摄像机剔除前处理的委托函数
Camera.onPreCull += (c) =>
{
};
摄像机 渲染前 处理的委托
Camera.onPreRender += (c) =>
{
};
摄像机 渲染后 处理的委托
Camera.onPostRender += (c) =>
{
};
2.重要成员
1.界面上的参数 都可以在Camera中获取到
比如 下面这句代码 就是得到主摄像机对象 上的深度 进行设置
Camera.main.depth = 10;
2.世界坐标转屏幕坐标
转换过后 x和y对应的就是屏幕坐标 z对应的 是 这个3D物体 离我们的摄像机有多远
我们会用这个来做的功能 最多的 就是头顶血条相关的功能
Vector3 v=Camera.main.WorldToScreenPoint(this.transform.position);
print(v);
3.屏幕坐标转世界坐标
之所以改变z轴 是因为 如果不改 z默认为0
转换过去的世界坐标系的点 永远都是一个点 可以理解为 视口 相交的焦点
如果改变了z 那么转换过去的 世界坐标的点 就是相对于 摄像机前方多少单位的横截面上的世界坐标点
Vector3 v = Input.mousePosition;
v.z = 10;
obj.position = Camera.main.ScreenToWorldPoint(v);
//print(Camera.main.ScreenToWorldPoint(v));