Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by 12boulla · Dec 27, 2015 at 04:51 PM · androidmultiplayergoogle play gamesseed

Using Random.seed to sync random generation in multiplayer (android GPGS)

Hi, I am having issues using a random seed to randomly generate a game that is the same on both clients in a Google Play Games Services Real Time multiplayer room. There are cubes that rotate around a circle. At a point along the rotation, they hit a trigger which changes their distance away from the circle individually:

alt text

The code that does it is here:

 using UnityEngine;
 using System.Collections;
 using System.Collections.Generic;
 
 public class EnemyAi : MonoBehaviour {
 
     public GameObject Earth,coin;
     Vector3 startPos;
     public float randMax;
     bool isVisible;
     public float z;
     public List<Transform> spawnPosCoin;
     public bool multiplay;
     public int seed;
 
     // Use this for initialization
     void Start () {
         startPos = transform.localPosition;
 
         Vector3 diff = Earth.transform.position - transform.position;
         diff.Normalize ();
         
         float rot_z = Mathf.Atan2 (diff.y, diff.x) * Mathf.Rad2Deg;
         transform.rotation = Quaternion.AngleAxis(rot_z, Vector3.forward);
 
         Randomize (true);
         z = Earth.transform.eulerAngles.z;
     }
     
     // Update is called once per frame
     void Update () {
         particleSystem.startRotation = (z - transform.eulerAngles.z) * Mathf.Deg2Rad;
     }
 
     public void Randomize(bool start)
     {
         transform.localPosition = startPos;
         transform.Translate(Vector2.right * Random.Range(0,randMax));
         GetComponent<SpriteRenderer> ().color = new Color (Random.value, Random.value, Random.value, 1.0f);
         GetComponent<ParticleSystem> ().startColor = GetComponent<SpriteRenderer> ().color;
         if(!start)
         {
             //animation.Play ("enemyFade");
         }
     }
 
     public void MultiplayerRandomize()
     {
         Random.seed = seed;
     }
 
     void OnTriggerEnter2D(Collider2D col)
     {
         if(col.tag == "Randomize")
         {
             Randomize(false);
             //coin stuff
             int coinChance = Random.Range(0,14);
             if(coinChance == 2)
             {
                 GameObject spawnedCoin = Instantiate(coin,spawnPosCoin.ToArray()[Random.Range(0,spawnPosCoin.Count)].position, Quaternion.identity) as GameObject;
                 spawnedCoin.transform.parent = GameObject.FindGameObjectWithTag("CoinSpin").transform;
                 spawnedCoin.GetComponent<Coin>().Earth = Earth;
             }
         }
     }
 }
 

When a player joins the room, it sends a message to each other player with its System.Environment.TickCountwhich is then added to the other players' tick counts creating the same seed for each player. It works to start with, when the game starts, MultiplayerRandomize() and Randomize() are called and each cube's distance away from the planet is the same on all clients (tested). But when they hit the trigger and Randomize() is called again, they are different on both devices. I don't know why this is because they both work to start with and the seed is never changed/set twice.

Anybody got any ideas as to why it doesnt work?

Any help is greatly appreciated, thanks.

help.png (18.8 kB)
Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

0 Replies

· Add your reply
  • Sort: 

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

49 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

How to make randomly generated floats the same across multiplayer? (GPGS) 1 Answer

Any good/detailed Google Play Games Real Time Multiplayer setup tutorial for android? 6 Answers

GPGS - How To Cancel Matchmaking Properly? 1 Answer

GPGS - Start the match with only even numbers of players 0 Answers

How to set Master Server for Local Multiplayer 0 Answers


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges