I've taken a copy of Tris, and substituted loading my own game scene in Unity instead of Game, but when GameController starts which I've added to the topmost object in my scene, 'sfs' is null and IsInstantiated is false.
I'm using the Javascript server code and am using trace messages to help troubleshoot, but can't troubleshoot/undertand why the connection is persisent using the Tris Game scene, but is lost loading my own.
I'm thinking I may need to get a Java IDE and debug Java server code to see why the connection may be disappearing, or becoming inaccessible/releeased.
But hoping you can suggest some things to check before I go that longer route.
Thanks
Lose SFConnection on Scene Load
Re: Lose SFConnection on Scene Load
Hi,
you don't need a Java IDE to dig into the problem. The null object is on the client side, therefore you just need a bit of client debugging.
Before that I would also recommend to review the Tris game tutorial here:
http://docs2x.smartfoxserver.com/ExamplesUnity/tris
In particular the "Connection and Login" section where it is explained how a global connection object is maintained throughout the different scenes.
Hope it helps.
you don't need a Java IDE to dig into the problem. The null object is on the client side, therefore you just need a bit of client debugging.
Before that I would also recommend to review the Tris game tutorial here:
http://docs2x.smartfoxserver.com/ExamplesUnity/tris
In particular the "Connection and Login" section where it is explained how a global connection object is maintained throughout the different scenes.
Hope it helps.
Re: Lose SFConnection on Scene Load
In particular I think you need to make sure this code is present in your custom scene:
Anyways make sure to keep the tutorial I linked above as a reference to fix your current scene.
Thanks
Code: Select all
if (SmartFoxConnection.IsInitialized) {
sfs = SmartFoxConnection.Connection;
} else {
SceneManager.LoadScene("Login");
return;
}
Anyways make sure to keep the tutorial I linked above as a reference to fix your current scene.
Thanks
Re: Lose SFConnection on Scene Load
Thanks for your response. And sorry these are beginner-type questions.
I had indeed studied the Tris examples page, and have that code you shared in my code already, is was taken from the original Tris GameController code.
However, when stepping through the code execution, whenever I hit that IF statement, the SmartFoxConnection is NOT initialized (pardon, mistyped 'IsInstantiated' earlier) and falls through to the 'LoadScene(Login)' and sfs remains null.
All I have done so far in the code is to replace (in LoginController) the 'LoadScene("Game")' with 'LoadScene("ChessCam"). When using 'Game,' the connection remain useable, but when using "ChessCam" it is not.
In the ChessCam scene, all I have done so far is to add an object to the top (named 'SuperVisor') and added the existing GameController script component. BUT I also note when debugging that Unity seems to be first executing other code snippets in my game which are lower in the object hierarchy before it hits the GameController Awake() in the topmost object, as if already processing OnClick events from the game - if any of that sheds light - where I would have through the GameController should execute first.
I expect to have to revise GameController, but for now just want to ensure the connection remains active, and then will look at other changes to be made to that file to suit my game.
Are there any factors which are scene-dependent?
Anyway, had enclosed some server log details in my other post, but hope you may have some guess or things to check to aid in my troubleshooting.
Thanks
I had indeed studied the Tris examples page, and have that code you shared in my code already, is was taken from the original Tris GameController code.
However, when stepping through the code execution, whenever I hit that IF statement, the SmartFoxConnection is NOT initialized (pardon, mistyped 'IsInstantiated' earlier) and falls through to the 'LoadScene(Login)' and sfs remains null.
All I have done so far in the code is to replace (in LoginController) the 'LoadScene("Game")' with 'LoadScene("ChessCam"). When using 'Game,' the connection remain useable, but when using "ChessCam" it is not.
In the ChessCam scene, all I have done so far is to add an object to the top (named 'SuperVisor') and added the existing GameController script component. BUT I also note when debugging that Unity seems to be first executing other code snippets in my game which are lower in the object hierarchy before it hits the GameController Awake() in the topmost object, as if already processing OnClick events from the game - if any of that sheds light - where I would have through the GameController should execute first.
I expect to have to revise GameController, but for now just want to ensure the connection remains active, and then will look at other changes to be made to that file to suit my game.
Are there any factors which are scene-dependent?
Anyway, had enclosed some server log details in my other post, but hope you may have some guess or things to check to aid in my troubleshooting.
Thanks
Re: Lose SFConnection on Scene Load
From your description it seems you are not following the Tris example entirely.
In fact, after the login is performed, the Lobby scene is loaded. That's where players meet (in a dedicated Room), and create a game Room to play.
Anyway...
As my colleague Lapo pointed out, the Lobby and Game scenes access the SmartFoxConnection class when checking the IsInitialized property. If you check that class, that property is false if the sfs object (instance of SmartFox class) is null. So it seems that in your code you are not setting the SmartFoxConnection.Connection property, which holds a reference to sfs.
In our Tris example, SmartFoxConnection.Connection is set as soon the connection is established, in the OnConnection method of the LoginController class:
Maybe this is missing in your code?
In fact, after the login is performed, the Lobby scene is loaded. That's where players meet (in a dedicated Room), and create a game Room to play.
Anyway...
As my colleague Lapo pointed out, the Lobby and Game scenes access the SmartFoxConnection class when checking the IsInitialized property. If you check that class, that property is false if the sfs object (instance of SmartFox class) is null. So it seems that in your code you are not setting the SmartFoxConnection.Connection property, which holds a reference to sfs.
In our Tris example, SmartFoxConnection.Connection is set as soon the connection is established, in the OnConnection method of the LoginController class:
Code: Select all
// Save reference to SmartFox instance; it will be used in the other scenes
SmartFoxConnection.Connection = sfs;
Maybe this is missing in your code?
Paolo Bax
The SmartFoxServer Team
The SmartFoxServer Team
Re: Lose SFConnection on Scene Load
Thank you for your suggestions.
What I currently have is the Tris game environment exactly as from the examples folder, with the correct server extensions and correct Unity build settings.
If I load the "Game" scene in the LobbyController, I can access the connection when GameController Awakes.
But if I merely substitute my custom scene ("ChessCam" - is present in Build Settings) in the existing LoadScene where the room is joined, then 'when GameController starts, sfs' is null, and IsInitialized is false. So 'Game' works fine but loading my scene file affects the connection.
In all other regards, everything is exactly as in the example, including all code fragments you have mentioned earlier.
I am at a loss to troubleshoot what is occurring, but there seems to be something scene-dependent involved.
Thank you
What I currently have is the Tris game environment exactly as from the examples folder, with the correct server extensions and correct Unity build settings.
If I load the "Game" scene in the LobbyController, I can access the connection when GameController Awakes.
But if I merely substitute my custom scene ("ChessCam" - is present in Build Settings) in the existing LoadScene where the room is joined, then 'when GameController starts, sfs' is null, and IsInitialized is false. So 'Game' works fine but loading my scene file affects the connection.
In all other regards, everything is exactly as in the example, including all code fragments you have mentioned earlier.
I am at a loss to troubleshoot what is occurring, but there seems to be something scene-dependent involved.
Thank you
Last edited by dforma on 26 Jul 2019, 02:29, edited 1 time in total.
Re: Lose SFConnection on Scene Load
Does your scene contain a Controller object to which the GameController script is assigned?
Paolo Bax
The SmartFoxServer Team
The SmartFoxServer Team
Re: Lose SFConnection on Scene Load
I just did a simple test and everything works as expected:
- added a new "Test" scene to the Tris project
- inside the new scene, created an empty GameObject, called "Controller"
- assigned a new script to the Controller object, called "TestScript"
- added the following code to the script:
- changed the LobbyController.OnRoomJoin listener to make it load the Test scene
When the modified project is executed (with the Test scene opened in the Editor), the else branch of the code is executed and the Login scene is loaded. After the login and after clicking the "Start new game" button, the -OK- SFS CONNECTION INITIALIZED is printed as expected.
So my guess is that there's something wrong in your scene, or you changed something else. Maybe you can start again from scratch following the steps above.
- added a new "Test" scene to the Tris project
- inside the new scene, created an empty GameObject, called "Controller"
- assigned a new script to the Controller object, called "TestScript"
- added the following code to the script:
Code: Select all
void Awake()
{
Application.runInBackground = true;
if (SmartFoxConnection.IsInitialized) {
Debug.Log("-OK- SFS CONNECTION INITIALIZED");
}
else {
Debug.Log("-KO- SFS CONNECTION NOT INITIALIZED");
SceneManager.LoadScene("Login");
}
}
- changed the LobbyController.OnRoomJoin listener to make it load the Test scene
When the modified project is executed (with the Test scene opened in the Editor), the else branch of the code is executed and the Login scene is loaded. After the login and after clicking the "Start new game" button, the -OK- SFS CONNECTION INITIALIZED is printed as expected.
So my guess is that there's something wrong in your scene, or you changed something else. Maybe you can start again from scratch following the steps above.
Paolo Bax
The SmartFoxServer Team
The SmartFoxServer Team
Re: Lose SFConnection on Scene Load
I'm certain that your test works correctly, and that there is something unusual in my scene which is the cause. I just wish I could better troubleshoot or capture what is occurring. I was just hoping you'd seen something like this before, but I will report if I find anything out.
I will just have to start with a working controller and try to reconstruct my game scene around that. If anything to try or check to further diagnose occurs to you, that would be much appreciated.
Thanks
I will just have to start with a working controller and try to reconstruct my game scene around that. If anything to try or check to further diagnose occurs to you, that would be much appreciated.
Thanks
Who is online
Users browsing this forum: No registered users and 102 guests