-3
私はマルチプレイヤーで動作するサバイバルゲームのような構築システムを作ろうとしています。クライアントでユニティfuctionが動作しない
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
public class CreationSystem : NetworkBehaviour {
public static GameObject SelectedObeject;
bool Preview;
GameObject X;
Material normal;
[SerializeField]
Material previewMaterial;
void Update(){
Cmd_Creation();
}
[Command]
void Cmd_Creation() {
if(Preview == false && MainMenu.GoPreview && SelectedObeject != null){
RaycastHit rh;
if(Physics.Raycast(transform.GetChild(0).position,transform.GetChild(0).forward,out rh,60)){
X = (GameObject)Instantiate (SelectedObeject, rh.point, SelectedObeject.transform.rotation);
normal = X.GetComponent<Renderer>().material;
X.GetComponent<Renderer>().material = previewMaterial;
X.GetComponent<Collider>().enabled = false;
if(X.transform.childCount > 0){
for(int i=0; i<X.transform.childCount;i++){
X.transform.GetChild(i).GetComponent<Renderer>().material = previewMaterial;
X.transform.GetChild(i).GetComponent<Collider>().enabled = false;
}
}
NetworkServer.Spawn (X);
Preview = true;
}
}
if(Preview){
RaycastHit rh;
if(Physics.Raycast(transform.GetChild(0).position,transform.GetChild(0).forward,out rh,60)){
X.transform.position = rh.point;
}
if(Input.GetKeyDown(KeyCode.Mouse0)){
MainMenu.GoPreview = false;
X.GetComponent<Renderer>().material = normal;
X.GetComponent<Collider>().enabled = true;
Preview = false;
if(X.transform.childCount > 0){
for(int i=0; i<X.transform.childCount;i++){
X.transform.GetChild(i).GetComponent<Renderer>().material = normal;
X.transform.GetChild(i).GetComponent<Collider>().enabled = true;
}
}
}
}
}
それはこのように動作するようにした:ここでは、コードであるプレイヤーは、メニュー内のオブジェクト、変数「SelectedObeject」は、選択したオブジェクトに変更された方法を選択します。オブジェクトを選択すると、プレビューが開始され、プレーヤーが左マウスボタンをクリックすると、プレビューが終了し、オブジェクトが「作成済み」になります。
ホストは問題なく構築できます。しかし、クライアントは関数 "Cmd_Creation()"を呼び出していません。