Question by
Orokon · Jan 12, 2018 at 11:12 PM ·
gameobjectnetworkingmaterialspawning
Spawn instantiated object with material on client
I guess im not understanding the object spawning right.
I am building a cardgame. At the Start() of a gameobjects script im calling a function that generates the cards if isServer is true (so cards will be generated on the server and handled there).
private void Start()
{
resourceCardConfigurations = new List<ResourceCardConfiguration>() {
woodCardConfiguration,
wildCardConfiguration,
cobblestoneCardConfiguration,
ironCardConfiguration,
goldCardConfiguration,
diamondCardConfiguration,
creeperCardConfiguration,
TNTCardConfiguration
};
resourceCards = new List<GameObject>();
if (isServer) {
AddCardsToGame(resourceCardConfigurations);
resourceCardPiles.enabled = true;
}
}
Then I want to provide the Generated Cards to the Clients:
public void AddCardsToGame(List<ResourceCardConfiguration> resourceCardConfigurations)
{
Debug.Log("Generating cards");
foreach (ResourceCardConfiguration resourceCardConfiguration in resourceCardConfigurations) {
int value = 1;
foreach (int amount in resourceCardConfiguration.amounts) {
for (int i = 0; i < amount; i++) {
GameObject instance = Instantiate(cardPrefab);
ResourceCard resourceCard = instance.GetComponent<ResourceCard>();
resourceCard.amount = value;
resourceCard.type = resourceCardConfiguration.resourceType;
instance.name = resourceCardConfiguration.resourceType.ToString() + value.ToString() + "Card";
instance.GetComponent<Renderer>().sharedMaterial = resourceCardConfiguration.material;
instance.GetComponentInChildren<Text>().text = value.ToString();
resourceCards.Add(instance);
NetworkServer.Spawn(instance);
}
value++;
}
}
}
So I instantiate a card from the prefab and give it its material and value and call NetworkServer.Spawn() to instantiate the card on the clients. There is the problem. The cards are visible on the client in the right position, but they have the material of the prefab and also the value is always 0 eventhough it is a syncvar:
public class ResourceCard: NetworkBehaviour {
[SyncVar]
public int amount = 1;
public ResourceType type;
}
How can I get the cards to be instantiated on the clients with material and value.
Comment