Unity中使用摇杆控制

48 篇文章 2 订阅
33 篇文章 26 订阅

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———————–

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

等待夏天

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值