返回首页DA系统C#IDE文件同步服务屏保 今天是: 2026-05-05    "立夏"  夏季的第一个节气,表示盛夏时节的正式开始

搜索
热搜: linux 技术
Hi~登录注册
查看: 4433|回复: 0

[原创] 【原创】InputManager类讲解及摄像机根据鼠标移动旋转案例

[复制链接]
发表于 2021-5-31 15:20:08 | 显示全部楼层 |阅读模式
本帖最后由 da11 于 2021-5-31 15:52 编辑

        //玩家希望可以自定义按键提出
        //虚拟按钮概念

        /* 什么是InputManager
         * · 即输入管理器  在Unity中,根据菜单的 Edit --> Project Settings --> Input 即可调用输入管理器界面
         * · 使用脚本通过虚拟轴名称获取自定义键的输入。
         * · 玩家可以在游戏启动时根据个人喜好对虚拟轴进行修改。
         * · InputManager面板实际作用:就是建立虚拟按钮和真实按键的关联。
         *
         * 打开InputManager面板有18个系统内置的虚拟轴项,每个虚拟轴项最多绑定4个真实按键,
         * 如想超过4个真实按键,可以新建一个同名的虚拟轴项,然后绑定另外的真实按键。
         *
         * 虚拟轴名称(代码找的就是这个虚拟轴名称)、正向按钮描述信息、负向按钮描述信息、↓↓↓
         * 绑定的两个真实正向按钮(第2和第4位置)和两个真实负向按钮(第1和第3位置)、↓↓↓
         * 按键复位速度、按键按下过渡灵敏度


         *
         * 鼠标要选择获取源是只是鼠标





         *
         *
         * 代码访问获取虚拟轴
         * 调用GetButton是分不出实际按键里面,按的是的正向按钮还是负向按钮,要区分请使用GetAxis方法
         * · bool judge = Input.GetButton("虚拟轴名");
         * · bool judge = Input.GetButtonDown("虚拟轴名");
         * · bool judge = Input.GetButtonUp("虚拟轴名");
         *
         * · float Num = Input.GetAxis("虚拟轴名");     //不按返回0,按正向按钮返回 0到1之间过渡的数值,最终到达1,按负向按钮返回 0到-1之间过渡的数值,最终到达-1
         * · float Num = Input.GetAxisRaw("虚拟轴名");  //不按返回0,按正向按钮返回1,按负向按钮返回-1



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册成为修仙之旅的少年~

x
 楼主| 发表于 2021-5-31 15:24:40 | 显示全部楼层
本帖最后由 da11 于 2021-5-31 15:27 编辑

//InputManager练习1--相机根据鼠标所移动方向旋转
//InputManger.cs
//挂在相机中

//特别注意,摄像机左右移动时,要相对于世界坐标移动(Rotate方法第四个形参加上Space.World(根据世界坐标)),如果是相对于自身坐标移动,就会出现Z轴也移动的情况!!
//左右旋转移动,Vector3坐标使用的是Y轴!!
//上下旋转移动,Vector3坐标使用的是X轴!!

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class InputManger : MonoBehaviour
{
    private Transform CameraTransform;   //声明相机类字段

    private float CameraX;               //声明获取虚拟鼠标轴的X方向字段

    private float CameraY;               //声明获取虚拟鼠标轴的Y方向字段

    public float CameraRotateSpeed=100;  //声明镜头旋转速度,并赋值初始值100

    private void Start()
    {
        //获取相机类引用
        CameraTransform = this.transform;
    }

    private void Update()
    {
        //获取虚拟鼠标轴的X方向
        CameraX = Input.GetAxis("Mouse X");

        //获取虚拟鼠标轴的Y方向
        CameraY = Input.GetAxis("Mouse Y");

        //优化代码行,检测鼠标没有移动时,不执行以下方法,可以节省资源。
        if (CameraX !=0 || CameraY != 0)
        {
            CameraRotateFF(CameraX, CameraY);
        }

    }

    /// <summary>
    /// 相机旋转方法
    /// </summary>
    /// <param name="X">虚拟鼠标轴的X方向</param>
    /// <param name="Y">虚拟鼠标轴的Y方向</param>
    private void CameraRotateFF(float X,float Y)
    {
        //InputManager练习1--相机根据鼠标所移动方向旋转

        //左右旋转移动
        //特别注意,摄像机左右移动时,要相对于世界坐标移动(Rotate方法第四个形参加上Space.World(根据世界坐标)),如果是相对于自身坐标移动,就会出现Z轴也移动的情况!!
        //根据Input.GetAxis("Mouse X")获取到的虚拟轴项数值,赋值给Rotate旋转
        //左右旋转移动,Vector3坐标使用的是Y轴!!
        CameraTransform.Rotate(0, X * Time.deltaTime * CameraRotateSpeed, 0, Space.World);

        //上下旋转移动
        //上下旋转移动只需要按照自身旋转即可
        //上下旋转移动,Vector3坐标使用的是X轴!! 这里需要在X轴前加上负号-
        CameraTransform.Rotate(-Y * Time.deltaTime * CameraRotateSpeed, 0, 0);
        print("X:     " + X + "      Y:     " + Y);
    }
}




回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-31 15:30:40 | 显示全部楼层
案例动图演示:(动图较大,请耐心等待加载!谢谢


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册成为修仙之旅的少年~

x
回复 支持 反对

使用道具 举报

游客
回复
*滑块验证:

DA论坛飞机票来了~
快速回复 返回顶部 返回列表