2016-10-28 50 views
7

Bir normal karakter denetleyicisi kullanıcısı ve VR kullanıcısı'un katılabileceği bir çok oyunculu oyun geliştiriyorum. Yani bir kullanıcı iki mod oyun bir kullanıcı katılarak, Normal ve VR Modu katılabilir.VR Oynatıcı denetleyicisi, karakter denetleyicisine göstermiyor

I am able to manage these modes and user can participate with any mode fakat sorun 'dir Normal Oynatıcı (charcter denetleyicisi), bu denetleyici karakter denetleyicisinin yanına kapalı hale geldikçe, VR denetleyicisini (HTC vive Denetleyicileri) görüntüleyemiyor.VR oynatıcının normal yürütücü tarafında, VR oynatıcısının yaptıklarını nasıl göstereceğim.

(I çalıştık ne) bir nesne yapmak ve VR regülatörü ile ilgili olarak konumunu ve dönme imitiate çalışılmıştır ancak normal oyuncu tarafında (kapalı kaynak (VR denetleyicileri) taklit gibidir çalışmıyorsa, ancak VR modunda çalışmak) ve onların konumları değişmiyor. Vr denetleyicisini diğer kullanıcılara nasıl gösterebilirim

+0

Merhaba, ben de bu problemi yaşadım. Bu biraz zor. Yaptığım şey Awake'teki SteamVR_TrackedObject'i yok etmek ve ardından kontrol ünitesini GameObject etkin olarak ayarlamaktı. Hangi ağ sistemini kullanıyorsunuz? Bunu bir cevap olarak göndermedim çünkü sizden daha fazla bilgiye ihtiyacım var. Ama ben HTC vive – luizcarlosfx

+0

@luizcarlosfx kullanarak ben çok oyunculu oyun yaptım birlik kendi unet ağ sistemi kullanıyorum –

+0

Konumları senkronize etmek için bir NetworkTransform kullanın. İstemcide SteamVR_TrackedObject öğesini yok edin ve denetleyicinizin oyun nesnesinin etkin olduğundan emin olun. Başlangıçta aktif olarak ayarlıyorum. – luizcarlosfx

cevap

5

Bu sorunu üç dört gün çalıştıktan sonra bu adımları kullanarak çözmeyi başarabildim.

  1. Network Identity ve network transform

  2. ile Başkanı (basit küp) için bir GameObject olun: Bu adım mevcut başka hiçbir kapsamlı bir rehber olduğu gibi gelecekte kullanıcıların bu soruna takılıp kalmamak aşağıda verilmiştir
  3. biri Gameo olun dönüşümü Ağ Kimlik ve ağ ile (sağ) Kontrolör (basit küp) için bir GameObject olun ağ denetleyicisi için (basit küp) (ağ) ve ağ dönüşümü

  4. Yukarıdaki tüm gameobject'lerin prefabriklerini yapın.

  5. Network Manager (kayıtlı Spawnable prefabrike listesi) içine her üç prefabrik ekle

  6. benim vr oynatıcıya (detaylar için yorumları görün) ve ilgili prefabrik atamak komut aşağıda eklendi sahnenin

  7. gelen prefabrik üç silip gameobjects

    public class VRPlayerCtrl : NetworkTransform { 
    
    //source gameobjects head, left and right controller object of htc vive prefab 
    
    public GameObject rightContSource; 
    
    public GameObject leftContSource; 
    
    public GameObject headObjSource; 
    
    
    //prefabs to assign head, left controller, and right controller 
    public GameObject vrHeadObjPrefab; 
    public GameObject vrLeftCtrlPrefab; 
    public GameObject vrRightCtrlPrefab; 
    
    GameObject vrHeadObj; 
    GameObject vrLeftCtrl; 
    GameObject vrRightCtrl; 
    
    void Start() 
    { 
    
        Debug.Log("Start of the vr player"); 
    
        if (isLocalPlayer) 
        { 
         //instantiate prefabs 
         CmdInstantiteHeadAndController(); 
         //disabled conroller meshes at VR player side so it cannont be view by him 
         vrLeftCtrl.GetComponent<MeshRenderer>().enabled = false; 
         vrRightCtrl.GetComponent<MeshRenderer>().enabled = false; 
        } 
    } 
    
    //Instantiate on start head and vr controller object so that it can be view by normal players 
    void CmdInstantiteHeadAndController() 
    { 
        Debug.Log("instantiateing the controller and head object"); 
        vrHeadObj = (GameObject)Instantiate(vrHeadObjPrefab); 
        vrLeftCtrl = (GameObject)Instantiate(vrLeftCtrlPrefab); 
        vrRightCtrl = (GameObject)Instantiate(vrRightCtrlPrefab); 
    
        // spawn the bullet on the clients 
        NetworkServer.Spawn(vrHeadObj); 
        NetworkServer.Spawn(vrLeftCtrl); 
        NetworkServer.Spawn(vrRightCtrl); 
    } 
    
    void Update() 
    { 
        if (!isLocalPlayer) 
        { 
         return; 
        } 
    
        //sync pos on network 
        CmdControllerPositionSync(); 
    } 
    //sync position on VR controller objects so that VR player movemnts/action can be viewd by normal user 
    [Command] 
    public void CmdControllerPositionSync() 
    { 
    
        vrHeadObj.transform.localRotation = headObjSource.transform.localRotation; 
        vrHeadObj.transform.position = headObjSource.transform.position; 
        vrLeftCtrl.transform.localRotation = leftContSource.transform.localRotation; 
        vrRightCtrl.transform.localRotation = rightContSource.transform.localRotation; 
        vrLeftCtrl.transform.localPosition = leftContSource.transform.position; 
        vrRightCtrl.transform.localPosition = rightContSource.transform.position; 
    } 
    
    } 
    

tebrikler yaptın!