MobileMobile | Continue
       
Nibiru VR Development Other Tools VR开发案例——幻形控制器《武器大师》 ...

VR开发案例——幻形控制器《武器大师》

Mark Post time 2016-12-5 17:35 | Show all posts |!read_mode! [Copy URL]
0 1033
VR应用开发案例
       《武器大师》是一款结合外设幻形控制器的VR应用,应用中可以根据幻形控制器360°旋转控制武器。武器类型有:手雷,冷兵器,枪。应用中会随机生成枪靶、水果,可以使用枪,手雷,冷兵器对其进行攻击。帮助VR开发者运用幻形控制器开发VR应用。
第二章开发流程
1 导入ControllerUnitySDK.unitypackage


导入插件包ControllerSDKUnity.unitypackage到unity工程。




2 设置枪的位置


枪的父物体上挂上rotate脚本 如上图:WeaponParent为父物体
rotate.cs 如下
using UnityEngine;
using System.Collections;

[RequireComponent(typeof(NibiruDevice))]
public class rotate : MonoBehaviour
{

    NibiruDevice te;
   
    public Vector3 m_v3Temp = Vector3.zero;
    void Awake()
    {
        te = this.GetComponent<NibiruDevice>();
    }

    void FixedUpdate()
    {
#if !UNITY_EDITOR
        //按下Start键
        if (te.ST == 0)
        {
            Reset();
        }
        else
        {
            //赋值 te.q为幻形控制器传过来的四元数信息
            transform.rotation = te.q;
            //加上欧拉角偏移量
            transform.eulerAngles = transform.eulerAngles + m_v3Temp;
        }
#endif
    }

    //重置
    public void Reset()
    {
        //重置旋转位置
        transform.localRotation = new Quaternion(0, 0, 0, 1);
        //记录当前欧拉角信息
        m_v3Temp = transform.eulerAngles;
    }
}

如上图为:Gun00


3 设置枪的攻击

if (m_cNibiruDevice.R2 == 0){
m_cCurrWeapon.Attack();
}

注:cNibiruDevice为幻形控制器的R2键,当R2值为0时代表R2键被按下
并在Attack方法里写入开枪所需要的动画、音效、特效的播放。


4 切换武器
//向上换
            if (m_cNibiruDevice.IsStickUp() && m_cNibiruDevice.q.eulerAngles.x > 180 && m_cNibiruDevice.q.eulerAngles.x <300 && !isUp)
            {
                isUp = true;
                if (m_eWeaponCategories == WeaponCategories.ColdWeapon)
                {
                    m_eWeaponCategories = WeaponCategories.Gun;
                    //创建武器
                    CreateWeapon(GetWeaponInfoByCategories(m_eWeaponCategories));
                }
                else
                {
                    m_eWeaponCategories = WeaponCategories.ColdWeapon;
                    //创建武器
                    CreateWeapon(GetWeaponInfoByCategories(m_eWeaponCategories));
                }
            }
            else if (!m_cNibiruDevice.IsStickUp()) {
                isUp = false;
            }

            //向下换枪
            if (m_cNibiruDevice.IsStickDown() && m_cNibiruDevice.q.eulerAngles.x < 180 && m_cNibiruDevice.q.eulerAngles.x > 60 && !isDown)
            {
                isDown = true;
                if (m_eWeaponCategories == WeaponCategories.ThrowWeapon)
                {
                    m_eWeaponCategories = WeaponCategories.Gun;
                    //创建武器
                    CreateWeapon(GetWeaponInfoByCategories(m_eWeaponCategories));
                }
                else
                {
                    m_eWeaponCategories = WeaponCategories.ThrowWeapon;
                    //创建武器
                    CreateWeapon(GetWeaponInfoByCategories(m_eWeaponCategories));
                }
            }
            else if(!m_cNibiruDevice.IsStickDown())
            {
                isDown = false;
            }
注:CreateWeapon()方法中是生成武器
//创建武器
    public void CreateWeapon(WeaponInfo weaponInfo) {
        DestroyChild(m_cNibiruDevice.transform);
        GameObject useWeaponPrefabs = Resources.Load<GameObject>(string.Concat("UseWeapon/", weaponInfo.m_strWeaponUseModel));
        GameObject objWeapon = GameObject.Instantiate<GameObject>(useWeaponPrefabs);
        objWeapon.transform.parent = m_cNibiruDevice.transform;
        objWeapon.transform.localPosition = new Vector3(0, 0, weaponInfo.m_dwWeaponUseOffset);
        objWeapon.transform.localRotation = new Quaternion(0, 0, 0, 1);
        objWeapon.transform.localScale = Vector3.one;
        m_cCurrWeapon = objWeapon.GetComponent<Weapon>();
        m_cCurrWeapon.weaponInfo = weaponInfo;
}
Reply

Use magic Report

You have to log in before you can reply Login | Register

Points Rules

!fastreply! Top !return_list!