2016-03-06 3 views
0

Все хорошо работает между клиентами, пока я не добавить этот скрипт к геймобжектам:Unity3d Unet Добавление сценарий к результатам геймобжектов в Networkidentity исчезает

using UnityEngine; 
using System.Collections; 
using UnityEngine.Networking; 

public class TestScript : NetworkBehaviour { 

} 

Я первоначально имел код в скрипте, чтобы синхронизировать вращение GameObject но во время тестирования я удалил весь код для тестирования.

я получаю следующее сообщение об ошибке, когда добавляется сценарий:

NullReferenceException: ссылка на объект не указывает на экземпляр объекта Pointer.On_Drag (.Gesture жест) (на активы/Script/Указатель. cs: 247) EasyTouch.RaiseEvent (EventName evnt, .Gesture gesture) (в Assets/EasyTouchBundle/EasyTouch/Plugins/EasyTouch.cs: 1389) EasyTouch.CreateGesture (Int32 touchIndex, сообщение EventName, пальцы пальца, прокрутка SwipeDirection, Single swipeLength, Vector2 swipeVector) (в Assets/EasyTouchBundle/EasyTouch/Plugins/EasyTouch.cs: 818)

Это ТОЛЬКО, когда я добавляю скрипт, что это происходит!

Вот соответствующие функции:

public void On_Drag(Gesture gesture) { 
    if (!isLocalPlayer) 
     return; 


    if (singleTouch) { 

     if (firstRun) { 

      firstRun = false; 

      linecast_GameObject_HashSet.Clear(); 
      linecast_GameObject_HashSet = DoLinecast(); 
      linecast_GameObject_List = new List<GameObject> (linecast_GameObject_HashSet); 

      if (linecast_GameObject_List.Count > 0) { 
       selected_GameObject = linecast_GameObject_List [0]; 
       if (selected_GameObject == null) 
        print ("NULL"); 

       childGameObject = GameObject.FindWithTag (linecast_GameObject_List [0].tag); 
       childGameObject.transform.parent = myTransform.transform; 
       print ("childGameObject: " + childGameObject.tag); 
       // Assign Network Authority 
       NetworkIdentity myNetID = childGameObject.GetComponent<NetworkIdentity>(); 
>>  ERROR print ("GO2: " + childGameObject.tag + " // myNetID: " + myNetID.netId); 


       CmdAssignNetworkAuthority (myNetID.netId); 


      } 
     } 

    } 

    gesture.pickedObject.transform.position = Camera.main.ScreenToWorldPoint (new Vector3 (gesture.position.x, gesture.position.y, 1f)); 

} 

Ошибка на этой строке кода:

print ("GO2: " + childGameObject.tag + " // myNetID: " + myNetID.netId); 

Когда это сделать это все работает:

print ("GO2: " + childGameObject.tag); 

На основании этого я полагайте, что это то, что так или иначе влияет на Networkidentity.

Вот функция Linecast, упомянутых в приведенном выше коде:

HashSet<GameObject> DoLinecast() { 
    GameObject linecast_GameObject; 
    HashSet<GameObject> rayHashSet = new HashSet<GameObject>(); 

    LayerMask theLayer; 
    theLayer = (1 << LayerMask.NameToLayer("Fruit")); //set the layer to be clickable 
    Vector2 clickedPos = Camera.main.ScreenToWorldPoint(Input.mousePosition); 

    //Get current worldspace position of mouse cursor 
    RaycastHit2D[] hits = Physics2D.LinecastAll(clickedPos,clickedPos,theLayer); 

    foreach (RaycastHit2D ray in hits) { 
     linecast_GameObject = GameObject.Find(ray.collider.name); 
     rayHashSet.Add (linecast_GameObject); 
    } 

    return rayHashSet; 
} 

Кроме того, я использую Easytouch.

ответ

1

Вы упомянули, что print ("GO2: " + childGameObject.tag); работает, но print("GO2: " + childGameObject.tag + myNetID: " + myNetID.netId); НЕ работает.

Либо myNetID имеет значение null, либо netId равно null, что означает, что один или два из них не инициализированы. Замените эту строку с кодом ниже, чтобы узнать, какой из них является:

if(myNetID==null){ 
Debug.Log("myNetID is null"); 
} 

if(myNetID.netId==null){ 
Debug.Log("myNetID.netId is null"); 
} 

Таким образом, вы можете выяснить, что делать дальше.

+0

Это была ошибка: «Debug.Log (« myNetID is null »!! См. Выше для корректного оператора печати. ​​Не понимайте, как и почему myNetID не инициализируется при добавлении скрипта? – PeterK

+0

I протестирован, чтобы переместить скрипт в иерархию GameObject, и ошибка исчезла.Я этого не понимаю? Я протестировал на другом GameObject и получил ту же ошибку, которая исчезла, когда я переместил скрипт в иерархии. Я озадачен. – PeterK

+0

myNetID имеет значение null, что означает, что с момента неудачи вашего childGameObject.GetComponent (). Проверьте свой игровой объект childGameObject в своей сцене и убедитесь, что он подключен к нему компонентом NetworkIdentity. – Programmer

Смежные вопросы