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中键

只有按下的这一瞬间 进入一次
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));
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值