Search Unity

  1. We are migrating the Unity Forums to Unity Discussions. On July 12, the Unity Forums will become read-only.

    Please, do not make any changes to your username or email addresses at id.unity.com during this transition time.

    It's still possible to reply to existing private message conversations during the migration, but any new replies you post will be missing after the main migration is complete. We'll do our best to migrate these messages in a follow-up step.

    On July 15, Unity Discussions will become read-only until July 18, when the new design and the migrated forum contents will go live.


    Read our full announcement for more information and let us know if you have any questions.

Access and change variable

Discussion in 'Scripting' started by Afrokid001, Aug 25, 2013.

  1. Afrokid001

    Afrokid001

    Joined:
    Jun 3, 2010
    Posts:
    89
    Hi.

    I am making a Tic Tac Toe game, The issue I am having is I am wanting two players. 0 and 1. I have a "master script" that has the variable Player.

    I am wanting my boxes to know who's turn it is by asking the master script. The trouble is I cannot get them to interact with each other? What am I missing?

    I have 9 boxes arranged in 3 lines of 3.

    My scripts are:

    Code (csharp):
    1. static var Player = 0;
    Code (csharp):
    1.  
    2. var Cross : Material;
    3. var Naught : Material;
    4. var Blank : Material;
    5. var object : GameObject;
    6. var clicked = 0;
    7. var TTTBoard : GameObject;
    8. var Turn = TTTBoard.GetComponent(Board).Player;
    9.  
    10. function OnMouseEnter ()
    11. {
    12.     if (Turn == 1)
    13.     {
    14.         if (clicked == 0)
    15.         {
    16.             object.renderer.material = Cross;
    17.             GetComponent(MeshRenderer).enabled = true;
    18.         }
    19.         if (clicked == 1)
    20.         {
    21.         }
    22.     }
    23.     if (Turn == 0)
    24.     {
    25.         if (clicked == 0)
    26.         {
    27.             object.renderer.material = Naught;
    28.             GetComponent(MeshRenderer).enabled = true;
    29.         }
    30.         if (clicked == 1)
    31.         {
    32.         }
    33.     }
    34. }
    35.  
    36. function OnMouseExit ()
    37. {  
    38.     if (clicked == 0)
    39.     {
    40.         object.renderer.material = Blank;
    41.         GetComponent(MeshRenderer).enabled = false;
    42.     }
    43.     if (clicked == 1)
    44.     {
    45.     }
    46. }
    47.  
    48.  
    49. function OnMouseDown ()
    50. {
    51.     if (Turn == 1)
    52.     {
    53.         object.renderer.material = Cross;
    54.         GetComponent(MeshRenderer).enabled = true;
    55.         clicked = 1;
    56.         object.GetComponent( "ChangeBoxMaterial" ).enabled = false;
    57.         Turn = 0;
    58.     }
    59.     if (Turn == 0)
    60.     {
    61.         object.renderer.material = Naught;
    62.         GetComponent(MeshRenderer).enabled = true;
    63.         clicked = 1;
    64.         object.GetComponent( "ChangeBoxMaterial" ).enabled = false;
    65.         Turn = 1;
    66.     }
    67. }
     
  2. SlyRipper

    SlyRipper

    Joined:
    Jun 19, 2012
    Posts:
    251
    try making it public so other scripts are allowed to access it:
    Code (csharp):
    1. public static var Player = 0;
    you can then simply access this variable in other scripts with:
    Code (csharp):
    1. scriptname.variable = value;
    2. // for you it might be:
    3. masterscript.Player = 1;
     
  3. Afrokid001

    Afrokid001

    Joined:
    Jun 3, 2010
    Posts:
    89
    The material now changes depending on the player but when I click player = 1 instantly goes back to player = 0?


    Ok. I have realized that when I call the
    Code (csharp):
    1.  object.GetComponent( "ChangeBoxMaterial" ).enabled = false;
    it cancels the variable change. Is there a code I can use to make it stick when the code that changes it has been disabled?
     
    Last edited: Aug 25, 2013
  4. HelloKity1231

    HelloKity1231

    Joined:
    Nov 25, 2012
    Posts:
    121
    About Turn

    Create an enum with players and start a coroutine that will wait for action.
    On Update() function you can manage who has turn.

    A small example(maby is totally worng, i never tried to make something like this)
    TTTManager - http://pastebin.com/wFynSsZv
    TTTBox - http://pastebin.com/Y1Hdj2yf

    you can know who's turn by checking
    Code (csharp):
    1.  
    2. if (TTTManager.TTTTurn == TTTManager.Turn.???) { /* do */ }
    3.  
     
    Last edited: Aug 25, 2013