Все хорошо работает между клиентами, пока я не добавить этот скрипт к геймобжектам: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.
Это была ошибка: «Debug.Log (« myNetID is null »!! См. Выше для корректного оператора печати. Не понимайте, как и почему myNetID не инициализируется при добавлении скрипта? – PeterK
I протестирован, чтобы переместить скрипт в иерархию GameObject, и ошибка исчезла.Я этого не понимаю? Я протестировал на другом GameObject и получил ту же ошибку, которая исчезла, когда я переместил скрипт в иерархии. Я озадачен. – PeterK
myNetID имеет значение null, что означает, что с момента неудачи вашего childGameObject.GetComponent(). Проверьте свой игровой объект childGameObject в своей сцене и убедитесь, что он подключен к нему компонентом NetworkIdentity. –
Programmer