• Unity中使用摇杆控制


    Unity中使用摇杆控制


    本文章由cartzhang编写,转载请注明出处。 所有权利保留。
    文章链接:http://blog.csdn.net/cartzhang/article/details/50957100
    作者:cartzhang

    一、说起摇杆

    XBox的摇杆控制器,不知道何种原因,它拒绝在我电脑上工作。
    别人给安装驱动,他们都好好的,在这里就是不识别。

    只找到了一个数动的就和着使用。
    为啥要研究摇杆啊?
    因为这边在VR开发中,每次使用VR设置启动的时间较长,又因为有各种硬件,有枪
    头盔等一批硬件控制和按钮,所以就想使用摇杆按键来在测试时候代替。

    下面就是在Unity中使用摇杆的一些代码。

    二、键值

    摇杆的键值,在网上搜的:

    按钮绘制:按钮灵敏度(Button Sensitivity)为1000;
    A = button 0
    B = joystick button 1
    X = joystick button 2
    Y = joystick button 3
    LB = joystick button 4
    RB = joystick button 5
    Back = joystick button 6
    Start = joystick button 7
    Left Analogue Press = joystick button 8
    Right Analogue Press = joystick button 9
    坐标轴绘制:模拟坐标轴灵敏度(Analog Axis sensitivity)为1,量化后可以为1000Left Analog Horizontal = X Axis
    Left Analog Vertical = Y Axis
    Triggers = 3rd Axis (Left: -1 - 0, Right: 0 - 1) _ (Left Trigger Axis: 9th, Right Trigger Axis: 10th (Both axis are 0-1))
    Right Analog Horizontal = 5th axis
    Right Analog Vertical = 4th axis
    D-Pad Horizontal = 6th Axis
    D-Pad Vertical = 7th Axis
    

    做为程序,怎么使用代码获取呢?
    简单:

    using UnityEngine;
    using System.Collections;
    
    public class GetKeyValue : MonoBehaviour {
    
        public float speed = 10.0F;
        public float rotationSpeed = 100.0F;
    
        void Update()
        {
            detectPressedKeyOrButton();
        }
    
         public void detectPressedKeyOrButton()
        {
            foreach (KeyCode kcode in System.Enum.GetValues(typeof(KeyCode)))
            {
                if (Input.GetKeyDown(kcode))
                    Debug.Log("KeyCode down: " + kcode);
            }
    
        }
    }
    

    把此代码挂载到任意对象上,然后按下按键看看console中的打印,就知道对应的键值了。

    三、控制对象

    使用摇杆来控制对象,因为这边在VR开发中,每次使用VR设置启动的时间较长,又因为有各种硬件,有枪
    头盔等一批硬件控制和按钮,所以就想使用摇杆按键来在测试时候代替。解放不够用的双手,之前的测试一个人不能完成,需要旋转头盔,需要按下按键,需要鼠标点击,真是需要个多的手啊!!就是这样!!

    一个摇杆控制旋转和移动。
    这里面,摇杆向前推,控制对象就向前移动,而左右就是控制左右旋转了。有点不符合常理,但是大家若有用就稍微修改下吧

    using UnityEngine;
    using System.Collections;
    
    public class StickCameraControl : MonoBehaviour {
    
        public float speed = 10.0F;
        public float rotationSpeed = 100.0F;
    
        void Update()
        {
            float translation = Input.GetAxis("Vertical") * speed;
            float rotation = Input.GetAxis("Horizontal") * rotationSpeed;
    
            if (Mathf.Abs(translation) <= 0.1*speed)
            {
                translation = 0;
                rotation *= Time.deltaTime;
                transform.Rotate(0, rotation, 0);
            }
            else
            {
                translation *= Time.deltaTime;
                transform.position +=Camera.main.transform.forward * translation;
            }
    
    
        }
    }
    

    用来控制枪的旋转和开火的代码。
    枪不能自己移动的,只可以旋转。所以代码就如下:

    using UnityEngine;
    using System.Collections;
    
    public class StickGunContorl : MonoBehaviour {
    
        public float speed = 10.0F;
        public float rotationSpeed = 100.0F;
        public KeyCode []FireButton;
    
        void Update()
        {
            SetFire();
            SetRotate();
        }
    
        void SetFire()
        {
            if (Input.GetKeyDown(KeyCode.JoystickButton4) || Input.GetKeyDown(KeyCode.JoystickButton5)
                || Input.GetKeyDown(KeyCode.Joystick1Button4) || Input.GetKeyDown(KeyCode.Joystick1Button5))
            {
                Debug.Log(Input.mousePosition);
            }
        }
    
        void SetRotate()
        {
            //float translation = Input.GetAxis("RightV") * speed;
            float rotation = Input.GetAxis("RightH") * rotationSpeed;
            Debug.Log("gun" + rotation);
            rotation *= Time.deltaTime;
            transform.Rotate(0, rotation, 0);
        }
    }
    

    代码超级简单。注释没有!!!
    要是直接复制代码,运行会报错。原因在于你没有RightH这个东动
    怎么来的呢?看这里,看这里……

    定义输入Input

    这在里定义的Input,然后才可以在代码中正确调用的。

    四、参考

    http://tieba.baidu.com/p/3668735969

    ——–THE——————END———————–

    若有问题,请随时联系!!
    非常感谢

    等待夏天

  • 相关阅读:
    JAVA NIO 结合多线程
    ios即时通讯客户端开发之-mac上安装MySQL
    使用第三方库AFNetworking时遇到的问题
    用CocoaPods做iOS程序的依赖管理(转载)
    IOS8 设置TableView Separatorinset 分割线从边框顶端开始
    (转)UIViewController中各方法调用顺序及功能详解
    iOS中遍历数组的几种方法
    取消tableView上面多出来20个像素
    UIView动画中的一些坑
    ios build时,Undefined symbols for architecture xxx问题的总结(转)
  • 原文地址:https://www.cnblogs.com/qitian1/p/6461916.html
Copyright © 2020-2023  润新知