1

私は長い間ゲームを作っており、今ではマルチプレイヤーを設定しています。問題は、すべてのクライアント上にオブジェクトを配置しようとすると、動作しないということです。エラーがスローされるか、オブジェクトがどこにも表示されません。私のスクリプトはJSにあります。ここでは、次のとおりです。UNET /マルチプレイヤーを使用してUnityにブロックを置くことができません

CmdSyncBlockで
import UnityEngine.Networking; 
public class minvantory extends NetworkBehaviour { 
    var blockLayer : LayerMask = 1; 
    var range : float = Mathf.Infinity; 
    var hit : RaycastHit; 
    var PIC : Texture; 
    var invantory : Texture; 
    var itemnumber : int = 1; 
    var block1 : GameObject; 
    var block2 : GameObject; 
    var block3 : GameObject; 
    var block4 : GameObject; 
    var block5 : GameObject; 
    var block6 : GameObject; 
    var block7 : GameObject; 
    var block8 : GameObject; 
    var block9 : GameObject; 
    var block10 : GameObject; 
    var block11 : GameObject; 
    var block12 : GameObject; 
    var block13 : GameObject; 
    var block14 : GameObject; 
    var block15 : GameObject; 
    var block16 : GameObject; 
    var block17 : GameObject; 
    var block18 : GameObject; 
    var block19 : GameObject; 
    @SyncVar 
    var block : GameObject; 
    var open : boolean; 
    var escopen: boolean; 
    var id : int = 0; 
    var blocks : int = 0; 
    var player : GameObject; 
    var networked=false; 
    var customSkin : GUISkin; 
    var easter : GameObject; 
    var missile: GameObject; 
    //var x : playerlook; 
    function Start(){ 
     if (!isLocalPlayer) 
       return; 
     blocks = PlayerPrefs.GetInt("blocks"); 
     //x = GameObject.Find("MainCamera").GetComponent(playerLook); 
     Screen.lockCursor=true; 
     Cursor.visible=true; 
    } 
    function Update() { 
     if (!isLocalPlayer) 
       return; 
     if(Input.GetKeyUp(KeyCode.E)&&!escopen) 
     { 
      if (open) 
       open = false; 
      else 
       open = true; 
      Screen.lockCursor=!open; 
      Debug.Log("Open: " + open); 
     } 
     if(Input.GetKeyUp(KeyCode.Escape)&&!open) 
     { 
      if (escopen) 
       escopen = false; 
      else 
       escopen = true; 
      Screen.lockCursor=!escopen; 
      Debug.Log("Escopen: " + escopen); 
     } 
     if ((Input.GetMouseButtonDown(1))||(Input.GetKeyUp(KeyCode.X))&&!open&&!escopen&&!getCopn()){ 
      Debug.Log("BUILD"); 
      CmdBuild(block, id); 
     } 
     if (Input.GetMouseButtonDown(0)&&!open&&!escopen&&!getCopn()) CmdErase(); 
    } 

    function OnGUI(){ 
     if (!isLocalPlayer) 
       return; 
     GUI.skin = customSkin; 
     //GUI.DrawTexture(Rect(Screen.width-5,Screen.height-5,5,5), PIC, ScaleMode.ScaleToFit, true, 1); 
     if(open){ 
      GUI.DrawTexture(Rect(0,50,350,500), invantory, ScaleMode.StretchToFill, true, 1); 
      var tblock : GameObject=block; 
      if (GUI.Button (Rect (10,80,120,20), "urainium")) { 
       id = 1; 
       tblock = block1; 
      } 
      if (GUI.Button (Rect (10,120,120,20), "nutrongun")) { 
       tblock = block2; 
       id = 2; 
      } 
      if (GUI.Button (Rect (10,160,120,20), "zaneite")) { 
       tblock = block3; 
       id = 3; 
      } 
      if (GUI.Button (Rect (10,200,120,20), "gravium")) { 
       tblock = block4; 
       id = 0; 
      } 
      if (GUI.Button (Rect (10,240,120,20), "asteroid")) { 
       tblock = block5; 
       id = 4; 
      } 
      if (GUI.Button (Rect (10,280,120,20), "gas")) { 
       tblock = block6; 
       id = 5; 
      } 
      if (GUI.Button (Rect (10,320,120,20), "steel")) { 
       tblock = block7; 
       id = 6; 
      } 
      if (GUI.Button (Rect (10,360,120,20), "rock")) { 
       tblock = block8; 
       id = 7; 
      } 
      if (GUI.Button (Rect (10,400,120,20), "dish")) { 
       tblock = block9; 
       id = 8; 
      } 
      if(GUI.Button(Rect(10,440,120,20), "rocket")){ 
       tblock = block11; 
       id = 9; 
      } 
      if(GUI.Button(Rect(10,480,120,20), "crate")){ 
       tblock = block10; 
       id = 10; 
      } 
      if(GUI.Button(Rect(140,80,120,20), "Y stabilizer")){ 
       tblock = block14; 
       id = 13; 
      }if(GUI.Button(Rect(140,120,120,20), "planet core")){ 
       tblock = block15; 
       id = 14; 
      } 
      if(GUI.Button(Rect(140,160,120,20), "Control")){ 
       tblock = block16; 
       id = 15; 
      } 
      if (GUI.Button (Rect (140,200,120,20), "lamp")) { 
       tblock = block17; 
       id = 16; 
      } 
      if (GUI.Button (Rect (140,240,120,20), "glass")) { 
       tblock = block18; 
       id = 17; 
      } 
      if (GUI.Button (Rect (140,280,120,20), "plasma explosive")) { 
       tblock = block19; 
       id = 18; 
      } 
      if(GUI.Button(Rect(140,320,120,20), "computer")){ 
       tblock = block12; 
       id = 11; 
      } 
      if(GUI.Button(Rect(140,360,120,20), "stabilizer")){ 
       tblock = block13; 
       id = 12; 
      } 
      if(GUI.Button(Rect(140,400,120,20), "Easterment")){ 
       tblock = easter; 
       id = 10000; 
      }if(GUI.Button(Rect(140,440,120,20), "ICBM Launcher")){ 
       tblock = missile; 
       id = 2030; 
      } 
      CmdSyncBlock(tblock); 
      //} 
     } 
     else if(escopen){ 
      GUI.DrawTexture(Rect(0,50,350,500), invantory, ScaleMode.StretchToFill, true, 1); 
      if (GUI.Button (Rect (10,60,280,40), "quit")) { 
       saveWorld(); 
       Application.LoadLevel("GUI"); 
      } 
      if (GUI.Button (Rect (10,110,280,40), "reset and quit")) { 
       PlayerPrefs.DeleteKey("saved"); 
       Application.LoadLevel("GUI"); 
      } 
      if (GUI.Button (Rect (10,160,280,40), "suicide")) { 
       GetComponent.<mplayer>().health=0; 
      } 
     }else 
      GUI.DrawTexture(Rect((Screen.width - PIC.width)/2, (Screen.height - PIC.height) /2, PIC.width, PIC.height), PIC); 
    } 
    @Command 
    function CmdSyncBlock(g: GameObject){ 
     block=g; 
    } 
    @Command 
    function CmdBuild(obj : GameObject, x : int){ 
     var h: boolean=HitBlock(); 
     Debug.Log(h); 
     if (h && hit.transform.tag != "Player"&&x!=2030) { 
      //Debug.Log(hit.transform.tag); 
      var blockobj : GameObject; 
      if(hit.transform.tag != "computer"&&hit.transform.tag!="thruster"){ 
       Debug.Log("Spawning..."); 
       blockobj = Instantiate(block, hit.transform.position+hit.normal, hit.transform.rotation); 
       NetworkServer.Spawn(blockobj); 
       blockobj.transform.rotation = hit.transform.rotation; 
       if(blockobj.GetComponent.<Rigidbody>() && hit.rigidbody){ 
        blockobj.GetComponent.<Rigidbody>().velocity=hit.rigidbody.velocity; 
        blockobj.GetComponent.<Rigidbody>().angularVelocity=hit.rigidbody.angularVelocity; 
       } 
       blockobj.gameObject.AddComponent.<NetworkTransform>(); 
       blockobj.gameObject.GetComponent.<NetworkTransform>().enabled=true; 
       Debug.Log("spawned."); 
      }else if(hit.transform.tag == "thruster"){ 
       hit.transform.GetComponent("thrusterControl").Toggle(); 
      }else if(hit.transform.tag == "computer"){ 
       hit.transform.GetComponent("computer").Toggle(); 
       Debug.Log("I <3 computers!"); 
      }else{ 
       Debug.Log("BUILD ERROR"); 
      } 

     } 
     if(x==2030){ 
      blockobj = Instantiate(missile, transform.position+transform.forward, transform.rotation); 
      NetworkServer.Spawn(blockobj); 
      blockobj.transform.rotation = transform.rotation; 
      blockobj.GetComponent.<ICBM>().follow=h; 
      if(blockobj.GetComponent.<Rigidbody>() && hit.rigidbody){ 
       blockobj.GetComponent.<Rigidbody>().velocity=hit.rigidbody.velocity; 
       blockobj.GetComponent.<Rigidbody>().angularVelocity=hit.rigidbody.angularVelocity; 
      } 
      blockobj.gameObject.AddComponent.<NetworkTransform>(); 
      blockobj.gameObject.GetComponent.<NetworkTransform>().enabled=true; 
      Debug.Log(h); 
      Debug.Log(hit); 
      if(!h) 
       return; 
      blockobj.GetComponent.<ICBM>().target=hit.transform.gameObject; 
      Debug.Log("FOLLOW!"); 
     } 
    } 
    @Command 
    function CmdErase() { 
     if (HitBlock() && hit.transform.tag != "Player" && hit.transform.tag != "do not destroy"){ 
      if(networked) 
       NetworkServer.Destroy(hit.transform.gameObject); 
      else 
       Destroy(hit.transform.gameObject); 
     } 
     //if (HitBlock() && hit.transform.tag == "damage"){ 
     // hit.damage.damage(1); 
     //} 

    } 
    function getCam(){ 
     var ts : Transform[] = transform.GetComponentsInChildren.<Transform>(); 
     for (var t : Transform in ts) 
      if (t.gameObject.name == "Main Camera") 
       return t.gameObject; 
    } 
    function HitBlock() : boolean { 
     return Physics.Raycast(getCam().transform.position, getCam().transform.forward, hit, range, blockLayer); 
    } 
    function getCopn(){ 
     for(i in FindObjectsOfType(typeof(computer))){ 
      if(i.open) 
       return true; 
      Debug.Log(i); 
      Debug.Log(i.open); 
     } 
     return false; 
    } 
    function saveWorld(){ 
     var allblocks : blockld[]; 
     allblocks = FindObjectsOfType(typeof(blockld)); 
     PlayerPrefs.SetInt("objects",allblocks.length); 
     var temp : GameObject; 
     PlayerPrefs.SetInt("saved",1); 
     GUI.Box(Rect(200,200,280,300),"saving, give me a sec..."); 
     //SceneView.RepaintAll(); 
     for(var i : int=0;i<allblocks.length;i++){ 
      temp=allblocks[i].gameObject; 
      PlayerPrefs.SetFloat(i.ToString()+"_x",temp.transform.position.x); 
      PlayerPrefs.SetFloat(i.ToString()+"_y",temp.transform.position.y); 
      PlayerPrefs.SetFloat(i.ToString()+"_z",temp.transform.position.z); 
      PlayerPrefs.SetFloat(i.ToString()+"_rx",temp.transform.rotation.x); 
      PlayerPrefs.SetFloat(i.ToString()+"_ry",temp.transform.rotation.y); 
      PlayerPrefs.SetFloat(i.ToString()+"_rz",temp.transform.rotation.z); 
      PlayerPrefs.SetFloat(i.ToString()+"_rw",temp.transform.rotation.w); 
      PlayerPrefs.SetInt(i.ToString()+"_ID", allblocks[i].id); 
      if(temp.GetComponent.<Rigidbody>()){ 
       PlayerPrefs.SetFloat(i.ToString()+"_vx",temp.GetComponent.<Rigidbody>().velocity.x); 
       PlayerPrefs.SetFloat(i.ToString()+"_vy",temp.GetComponent.<Rigidbody>().velocity.y); 
       PlayerPrefs.SetFloat(i.ToString()+"_vz",temp.GetComponent.<Rigidbody>().velocity.z); 
       PlayerPrefs.SetFloat(i.ToString()+"_ax",temp.GetComponent.<Rigidbody>().angularVelocity.x); 
       PlayerPrefs.SetFloat(i.ToString()+"_ay",temp.GetComponent.<Rigidbody>().angularVelocity.y); 
       PlayerPrefs.SetFloat(i.ToString()+"_az",temp.GetComponent.<Rigidbody>().angularVelocity.z); 
      } 
     } 
     var planet = GameObject.Find("planet0"); 
     PlayerPrefs.SetFloat("PX",player.transform.position.x); 
     PlayerPrefs.SetFloat("PY",player.transform.position.y); 
     PlayerPrefs.SetFloat("PZ",player.transform.position.z); 
     PlayerPrefs.SetFloat("VX",player.GetComponent.<Rigidbody>().velocity.x); 
     PlayerPrefs.SetFloat("VY",player.GetComponent.<Rigidbody>().velocity.y); 
     PlayerPrefs.SetFloat("VZ",player.GetComponent.<Rigidbody>().velocity.z); 
     PlayerPrefs.SetFloat("p0_x",planet.transform.position.x); 
     PlayerPrefs.SetFloat("p0_y",planet.transform.position.y); 
     PlayerPrefs.SetFloat("p0_z",planet.transform.position.z); 
     PlayerPrefs.SetFloat("p0_vx",planet.GetComponent.<Rigidbody>().velocity.x); 
     PlayerPrefs.SetFloat("p0_vy",planet.GetComponent.<Rigidbody>().velocity.y); 
     PlayerPrefs.SetFloat("p0_vz",planet.GetComponent.<Rigidbody>().velocity.z); 
     PlayerPrefs.SetFloat("p0_rx",player.transform.rotation.x); 
     PlayerPrefs.SetFloat("p0_ry",player.transform.rotation.y); 
     PlayerPrefs.SetFloat("p0_rz",player.transform.rotation.z); 
     PlayerPrefs.SetFloat("p0_rw",player.transform.rotation.w); 
     PlayerPrefs.SetFloat("p0_ax",player.GetComponent.<Rigidbody>().angularVelocity.x); 
     PlayerPrefs.SetFloat("p0_ay",player.GetComponent.<Rigidbody>().angularVelocity.y); 
     PlayerPrefs.SetFloat("p0_az",player.GetComponent.<Rigidbody>().angularVelocity.z); 
     planet = GameObject.Find("planet1"); 
     PlayerPrefs.SetFloat("p1_x",planet.transform.position.x); 
     PlayerPrefs.SetFloat("p1_y",planet.transform.position.y); 
     PlayerPrefs.SetFloat("p1_z",planet.transform.position.z); 
     PlayerPrefs.SetFloat("p1_vx",planet.GetComponent.<Rigidbody>().velocity.x); 
     PlayerPrefs.SetFloat("p1_vy",planet.GetComponent.<Rigidbody>().velocity.y); 
     PlayerPrefs.SetFloat("p1_vz",planet.GetComponent.<Rigidbody>().velocity.z); 
     PlayerPrefs.SetFloat("p1_rx",player.transform.rotation.x); 
     PlayerPrefs.SetFloat("p1_ry",player.transform.rotation.y); 
     PlayerPrefs.SetFloat("p1_rz",player.transform.rotation.z); 
     PlayerPrefs.SetFloat("p1_rw",player.transform.rotation.w); 
     PlayerPrefs.SetFloat("p1_ax",player.GetComponent.<Rigidbody>().angularVelocity.x); 
     PlayerPrefs.SetFloat("p1_ay",player.GetComponent.<Rigidbody>().angularVelocity.y); 
     PlayerPrefs.SetFloat("p1_az",player.GetComponent.<Rigidbody>().angularVelocity.z); 
     PlayerPrefs.Save(); 
    } 
} 

コードが実行されているとき、私はこのエラーを取得:

私がやっていること
Object reference not set to an instance of an object 

  • を追加しましたnetworkTransformsとNetworkIdentities

  • を登録済みスポンサードプリフラブ

これらのオブジェクトをすべてのクライアントでエラーなく正しく表示させるにはどうすればよいですか?

答えて

1

あなたのブロックプレアブにネットワーク識別スクリプトがあり、それをNetworkManagerの作成可能なプレハブとして登録する必要があります。

ユニティのデフォルトNetworkManagerを使用しない場合は、コードにプレハブを登録することもできます。 http://docs.unity3d.com/Manual/UNetSpawning.html

また、あなたがsyncvarゲームオブジェクトことはできません。詳細は

参照リンク。その代わりにIDとCmdBuildの内部を同期させ、同期IDに基づいて使用するブロックを定義してください。

+0

また、ゲームオブジェクトをsyncvarすることはできません。基本的な変数(または変数のリスト)のみ – LapisLazuli

+1

私はこれを行いましたが、将来のユーザーのためにあなたの答えを保持してください。それは非常に重要なポイントです。変数 "ブロック"が同期していないようです。それに言及して、私はあなたにチェックマークをつけます! –

関連する問題