FrameVR示例V0913(Yanlz+VRTK+Oculus+)

时间:2025-01-28 15:38:40

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

 

//网线接口的基础功能,与那个做对接,那个触碰发生的变化

public class NetPortBase : MonoBehaviour{

    //模型编号

    public enum EnumModelBumber{

        NetPortA, NetPortB, NetPortC, NetPortD

    }

 

    public EnumModelBumber EnumModel;

 

    //触碰震动反馈

    public bool TouchShake = true;

 

    //触碰音效反馈

    public bool TouchSound = true;

 

    //位置重置

    public void MsPosReset(){

        MsLightEffect(false);

        switch(EnumModel){

            case EnumModelBumber.NetPortA:

                transform.parent = null;

                transform.localPosition = new Vector3(15.6f, 3.41f, 1.8285f);

                break;

            case EnumModelBumber.NetPortB:

                transform.parent = null;

                transform.localPosition = new Vector3(15.6f, 3.41f, 1.925f);

                break;

            case EnumModelBumber.NetPortC:

                transform.parent = null;

                transform.localPosition = new Vector3(15.6f, 3.41f, 1.7488f);

                break;

            case EnumModeBumber.NetPortD:

                transform.parent = null;

                transform.localPosition = new Vector3(15.6f, 3.41f, 1.6407f);

                break;

            default:

                break;

        }

 

        StartCoroutine(YiedReset());

    }

 

    IEnumerator YiedReset(){

        MsCancelBox(true);

        MsCancelRig(false);

        yield return new WaitForSeconds(0.5f);

 

        MsCancelBox(false);

        MsCancelRig(true);

    }

 

    private void OnTriggerEnter(Collider other){

        switch(EnumModel){

            case EnumModelBumber.NetPortA:

                MsEnterA(other);

                break;

            case EnumModelBumber.NetPortB:

                MsEnterB(other);

                break;

            case EnumModeBumber.NetPortC:

                MsEnterC(other);

                break;

            case EnumModelBumber.NetPortD:

                MsEnterD(other);

                break;

            default:

                break;

        }

    }

 

    private bool touchSpace = true;

    IEnumerator MsTouchSpace(){

        touchSpace = false;

        yield return new WaitForSeconds(1.0f);

        touchSpace = true;

    }

 

    private void MsEnterA(Collider other){

    }

 

    private void MsEnterB(Collider other){

    }

 

    private void MsEnterC(Collider other){

    }

 

    private void MsEnterD(Collider other){

    }

 

    private void OnTriggerStay(Collider other){

        switch(EnumModel){

            case EnumModelBumber.NetPortA:

                MsStayA(other);

                break;

            case EnumModelBumber.NetPortB:

                MsStayB(other);

                break;

            case EnumModelBumber.NetPortC:

                MsStayC(other);

                break;

            case EnumModeBumber.NetPortD:

                MsStayD(other);

                break;

            default:

                break;

        }

    }

 

    private void MsStayA(Collider other){

        //手柄触发

        if(other.name.IndexOf(b_r) > -1){

            if(MyConst.RIndexTrigger){

                transform.parent = other.transform;

                transform.localPosition = new Vector3(-0.019f, -0.054f, 0.045f);

                transform.localEulerAngles = new Vector3(-51f, 38.3f, 78.4f);

                NetPort.MsInstance.MsNetAGrab();

                MsLightEffect(false);

            }

        }

 

        //交换器A网口

        if(other.name.Equals(NetPortAA)){

            transform.parent = null;

            transform.parent = other.transform;

            transform.localEulerAngles = Vector3.zero;

            transform.localPosition = new Vector3(-0.00011f, 0f, -0.00447f);

            MsCancelBox(false);

            MsCancelRig(true);

            MsCancelAll();

            NetPort.MsInstance.MsNetAMarry();

        }

    }    //立钻哥哥:private void MsStayA(Collider other){}

 

    private void MsStayB(Collider other){

        //手柄触发

        if(other.name.IndexOf(b_r) > -1){

            if(MyConst.RIndexTrigger){

                MsCancelRig(true);

                transform.parent = other.transform;

                transform.localPosition = new Vector3(-0.019f, -0.054f, 0.045f);

                NetPort.MsInstance.MsNetBGrab();

                MsLightEffect(false);

            }

        }

 

        //机箱网口

        if(other.name.Equals(NetPortBA)){

            transform.parent = null;

            transform.parent = other.transform;

            transform.localEulerAngles = new Vector3(0, 0, -90);

            transform.localPosition = new Vector3(-0.00011f, 0f, -0.00284f);

            MsCancelBox(false);

            MsCancelRig(true);

            MsCancelAll();

            NetPort.MsInstance.MsNetBMarry();

        }

    }    //立钻哥哥:private void MsStayB(Collider other){}

 

    private void MsStayC(Collider other){

        ... ...    // 立钻哥哥:代码类似,不再拓展

    }

 

    private void MsStayD(Collider other){

        ... ...    // 立钻哥哥:代码类似,不再拓展

    }

 

    private void OnTriggerExit(Collider other){

        switch(EnumModel){

            case EnumModelBumber.NetPortA:

                MsExitA(other);

                break;

            case EnumModelBumber.NetPortB:

                MsExitB(other);

                break;

            case EnumModelBumber.NetPortC:

                MsExitC(other);

                break;

            case EnumModelBumber.NetPortD:

                MsExitD(other);

                break;

            default:

                break;

        }

    }    //立钻哥哥:private void OnTriggerExit(Collider other){}

 

    private void MsExitA(Collider collider){

    }

 

    private void MsExitB(Collider collider){

    }

 

    private void MsExitC(Collider collider){

    }

 

    private void MsExitD(Collider collider){

    }

 

    //呼吸特效

    public void MsLightEffect(bool off){

        if(!MyConst.FirstEnter){

            off = false;

        }

 

        for(int i = 0;  i < transform.GetChild(0).childCount;  i++){

              transform.GetChild(0).GetChild(i).GetComponent<MeshRenderer>().enabled = off;

        }

    }    //立钻哥哥:public void MsLightEffect(bool off){}

 

     //触碰音效

    public AudioClip TouchClip;

 

    //触碰音效播放

    public void MsPlayTouchClip(AudioClip clip){

        if(!TouchSound){

            return;

        }

 

        AudioSource source;

 

        if(transform.GetComponent<AudioSource>() != null){

            source = transform.GetComponent<AudioSource>();

        }else{

            source = gameObject.AddComponent<AudioSource>();

        }

 

        source.playOnAwake = false;

        source.clip = clip;

        source.Play();

    }

 

    //触碰震动

    public void MsTouchShake(){

        if(!TouchShake){

            return;

        }

 

        VRInput.MsInstance.RightShock();

    }

 

    //刚体效果

    public void MsCancelRig(bool off){

        transform.GetComponent<Rigidbody>().isKinematic = off;

    }

 

    //碰撞器

    public void MsCancelBox(bool off){

        transform.GetComponent<BoxCollider>().enabled = off;

    }

 

    //不可选状态

    public void MsCancelAll(){

        MsLightEffect(false);

        MsCancelBox(false);

        MsCancelRig(true);

    }

 

    //可选状态

    public void MsOnCancelAll(){

        switch(MyConst.EnumMode){

            case MyConst.EnumExaminMode.Study:

                MsLightEffect(true);

                break;

            case MyConst.EnumExaminMode.Practice:

                break;

            case MyConst.EnumExaminMode.Examin:

                break;

            default:

                break;

        }

 

        MsCancelRig(false);

        MsCancelBox(true);

    }    //立钻哥哥:public void MsOnCancelAll(){}

 

}    //立钻哥哥:public class NetPortBase:MonoBehaviour{}