Unity开发PICO G2程序时如何在电脑上调试Unity代码逻辑

一、头盔模式下的编辑器

配置好头盔组建后,点击运行按钮,你会发现你的编辑器Game窗口是这样的,你无法交互
请添加图片描述

二、修改后可以在编辑器运行模式下交互的样子

先看示例,2dUI 和3D 物体都可以交互,而且触发的的事件都可以通过OnPointerEnter/Exit/Down/BeginDrag/Drag/EndDrag接口来自定义业务逻辑
请添加图片描述

三、如何进行编辑器的环境设置(版本切换)

原理:自己写一个编辑器脚本,根据需求,启用或者停用相关组件来设置Unity的环境,使之匹配纯PC 或VR模式。

  • 发布模式:比如要发布VR版本的时候,设置成VR模式,然后发布
  • 调试模式:要在Unity Editor中调试逻辑时,直接设置成PC模式

在这里插入图片描述
在这里插入图片描述

  • 物体上脚本(组件)启用或者停用一览表
gameObject对象	    脚本/组件           	PC	VR	active	备注
====================================================================
Pvr_UnitySDK	    Pvr_UnitySDKManager 	0	1		
Event	            Pvr_InputModule	        0	1		
Event       	    InputWith3D	            0	1		
Event	            BaseInput	            1	0		    PC输入法
Event	            StandaloneInputModule	1	0		    PC输入法
HeadSetControl  	Pvr_UIPointer	        0	1		
[EyeMask]   	    Pvr_UnityEyeMask    	0	1		
Head	            Camera	                1	1		
Head	            Pvr_UnitySDKHeadTrack	0	1		
Head	            Pvr_UnitySDKEyeManager	0	1		
FPS         	    Pvr_UnitySDKFPS     	0	0		
LeftEye     	    Pvr_UnitySDKEye     	0	1		
RightEye	        Pvr_UnitySDKEye	        0	1		
BothEye	            Pvr_UnitySDKEye     	0	1		
ControllerManager	Pvr_ControllerManager	0	1		
ControllerManager	Pvr_Controller      	0	1		
PvrController0		                                hide	
PvrController1			                        	hide	
Canvas          	Pvr_UICanvas        	0	1		
Canvas          	GraphicRaycaster	    1	0

四、 主要脚本【ChangeEditorMode.cs】的代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Linq;
using UnityEngine.EventSystems;
using UnityEngine.UI;

/*

工作原理:根据版本类别,启用或者停用指定的脚本和物体

gameObject对象	    脚本/组件           	PC	VR	active	备注
====================================================================
Pvr_UnitySDK	    Pvr_UnitySDKManager 	0	1		
Event	            Pvr_InputModule	        0	1		
Event       	    InputWith3D	            0	1		
Event	            BaseInput	            1	0		    PC输入法
Event	            StandaloneInputModule	1	0		    PC输入法
HeadSetControl  	Pvr_UIPointer	        0	1		
[EyeMask]   	    Pvr_UnityEyeMask    	0	1		
Head	            Camera	                1	1		
Head	            Pvr_UnitySDKHeadTrack	0	1		
Head	            Pvr_UnitySDKEyeManager	0	1		
FPS         	    Pvr_UnitySDKFPS     	0	0		
LeftEye     	    Pvr_UnitySDKEye     	0	1		
RightEye	        Pvr_UnitySDKEye	        0	1		
BothEye	            Pvr_UnitySDKEye     	0	1		
ControllerManager	Pvr_ControllerManager	0	1		
ControllerManager	Pvr_Controller      	0	1		
PvrController0		                                hide	
PvrController1			                        	hide	
Canvas          	Pvr_UICanvas        	0	1		
Canvas          	GraphicRaycaster	    1	0

 */


/// <summary>
/// 设置编辑器的模式:PC版本或者VR版本
/// </summary>
public class ChangeEditorMode : MonoBehaviour
{
    
    
    /// <summary>
    /// pico的unity sdk
    /// </summary>
    [Header("pico VR头盔组件")]
    public GameObject picoSdk;

    /// <summary>
    /// 需要处理的画布列表
    /// </summary>
    [Header("需要处理的画布列表")]
    public List<Canvas> canvas;


    // Start is called before the first frame update
    void Start()
    {
    
    
        
    }

    // Update is called once per frame
    void Update()
    {
    
    
        
    }

#if UNITY_EDITOR
    [ContextMenu("设置成PC版本")]
#endif
    void PcEditor()
    {
    
    
        SetMode("pc");
    }

#if UNITY_EDITOR
    [ContextMenu("设置成VR版本")]
#endif
    void VrEditor()
    {
    
    
        SetMode("vr");
    }

    void SetMode(string mode)
    {
    
    
        if (mode != "pc" && mode != "vr") throw new System.Exception("错误的类型,只能是【pc】或者【vr】");

        bool vrOn = mode == "vr" ? true : false;
        bool pcOn = mode == "pc" ? true : false;

        var allParts = picoSdk.GetComponentsInChildren<Transform>(true).ToList();

        var Pvr_UnitySDK = allParts.Where(x => x.name == "Pvr_UnitySDK").First();
        Pvr_UnitySDK.GetComponent<Pvr_UnitySDKManager>().enabled = vrOn;

        var Event = allParts.Where(x => x.name == "Event").First();        
        Event.GetComponent<Pvr_InputModule>().enabled = vrOn;
        Event.GetComponent<InputWith3D>().enabled = vrOn;
        Event.GetComponent<BaseInput>().enabled = pcOn;
        Event.GetComponent<StandaloneInputModule>().enabled = pcOn;

        var HeadSetControl = allParts.Where(x => x.name == "HeadSetControl").First();      
        HeadSetControl.GetComponent<Pvr_UIPointer>().enabled = vrOn;

        var EyeMask = allParts.Where(x => x.name == "[EyeMask]").First();
        EyeMask.GetComponent<Pvr_UnityEyeMask>().enabled = vrOn;

        var Head = allParts.Where(x => x.name == "Head").First();
        Head.GetComponent<Camera>().enabled = true;
        Head.GetComponent<Pvr_UnitySDKHeadTrack>().enabled = vrOn;
        Head.GetComponent<Pvr_UnitySDKEyeManager>().enabled = vrOn;

        var FPS = allParts.Where(x => x.name == "FPS").First();
        FPS.GetComponent<Pvr_UnitySDKFPS>().enabled = false; 

        var LeftEye = allParts.Where(x => x.name == "LeftEye").First();
        LeftEye.GetComponent<Pvr_UnitySDKEye>().enabled = vrOn;

        var RightEye = allParts.Where(x => x.name == "RightEye").First();
        RightEye.GetComponent<Pvr_UnitySDKEye>().enabled = vrOn;

        var BothEye = allParts.Where(x => x.name == "BothEye").First();
        BothEye.GetComponent<Pvr_UnitySDKEye>().enabled = vrOn;

        var ControllerManager = allParts.Where(x => x.name == "ControllerManager").First();
        ControllerManager.GetComponent<Pvr_ControllerManager>().enabled = vrOn;
        ControllerManager.GetComponent<Pvr_Controller>().enabled = vrOn;

        var PvrController0 = allParts.Where(x => x.name == "PvrController0").First();
        PvrController0.gameObject.SetActive(vrOn);

        var PvrController1 = allParts.Where(x => x.name == "PvrController1").First();
        PvrController1.gameObject.SetActive(vrOn);

        canvas.ForEach(x=>
        {
    
    
            x.GetComponent<Pvr_UICanvas>().enabled = vrOn;
            x.GetComponent<GraphicRaycaster>().enabled = pcOn;
        });      
    }
}

五、总结

VR一体机要点:

  • 1、电脑上调试逻辑
  • 2、设备上调试效果
  • 3、官方不提供模拟器,那就自己撸一个

猜你喜欢

转载自blog.csdn.net/dzj2021/article/details/127536111