Prototype GameManager for game written in Unity, C#
up vote
0
down vote
favorite
I am self taught, so consistently seeking ways to code better, and more efficiently. If anyone has the time, please advise me on what can be done better with explanations as to why the old method is considered inefficient, and why the new method proves to be better. Also, where I can implement more self explanatory code.
using System;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.SceneManagement;
namespace Mans.Prototype.Lumberjack {
[System.Serializable]
public class GameManager : MonoBehaviour {
Variables and Properties:
public static GameManager instance { get; private set; } //singleton
private static Timer _timer;
[SerializeField] private GameObject _logPrefab;
[SerializeField] private float _seconds;
public Timer timer {
get { return _timer; }
set { _timer = value; }
}
public static GameObject logPrefab {
get { return instance._logPrefab; }
}
Methods:
private void Awake() {
instance = this;
timer = new Timer( _seconds );
InitializeScenes();
}
private void Start() {
ObjectManager.Initialize();
UIManager.ToggleUIElement( "InGame" );
SceneManager.SetActiveScene( SceneManager.GetSceneByName( "Level" ) );
}
private void Update() {
if ( Input.GetKey( KeyCode.Return ) ) {
Scene temp = SceneManager.GetSceneByName( "Level" );
SceneManager.UnloadSceneAsync( temp );
SceneManager.LoadScene( temp.buildIndex, LoadSceneMode.Additive );
}
}
private void FixedUpdate() {
if ( timer.seconds < 1f && ObjectManager.instance.treeCount > 0 ) {
PlayerManager.instance.player.GetComponent<Animator>().enabled = false;
UIManager.ToggleUIElement( "InGame", false );
UIManager.ToggleUIElement( "GameOver", true );
return;
} else if ( timer.seconds > 0f && ObjectManager.instance.treeCount <= 0 ) {
return;
}
InputManager.instance.HandleInput();
--_timer;
}
private void InitializeScenes() {
//Preload starting scenes
LoadScene( "Scenes/UI" );
LoadScene( "Scenes/Level 1/Level" );
LoadScene( "Scenes/Player" );
}
public static void LoadScene( string path ) {
//Loads a scene. Created so other scripts can manipulate the levels without having to include relevant namespaces each time.
SceneManager.LoadScene( path, LoadSceneMode.Additive );
}
public static void MoveObjectToScene( GameObject @object, string name ) {
//moves from current active scene to scene of choice, usually the level scene.
SceneManager.MoveGameObjectToScene( @object, SceneManager.GetSceneByName( name ) );
}
}
}
Unsure if I have elaborated enough, if not, say so and I will update with more explanations where necessary. No specific goal, other than to improve the readability and efficiency of the code.
c# object-oriented game design-patterns unity3d
New contributor
add a comment |
up vote
0
down vote
favorite
I am self taught, so consistently seeking ways to code better, and more efficiently. If anyone has the time, please advise me on what can be done better with explanations as to why the old method is considered inefficient, and why the new method proves to be better. Also, where I can implement more self explanatory code.
using System;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.SceneManagement;
namespace Mans.Prototype.Lumberjack {
[System.Serializable]
public class GameManager : MonoBehaviour {
Variables and Properties:
public static GameManager instance { get; private set; } //singleton
private static Timer _timer;
[SerializeField] private GameObject _logPrefab;
[SerializeField] private float _seconds;
public Timer timer {
get { return _timer; }
set { _timer = value; }
}
public static GameObject logPrefab {
get { return instance._logPrefab; }
}
Methods:
private void Awake() {
instance = this;
timer = new Timer( _seconds );
InitializeScenes();
}
private void Start() {
ObjectManager.Initialize();
UIManager.ToggleUIElement( "InGame" );
SceneManager.SetActiveScene( SceneManager.GetSceneByName( "Level" ) );
}
private void Update() {
if ( Input.GetKey( KeyCode.Return ) ) {
Scene temp = SceneManager.GetSceneByName( "Level" );
SceneManager.UnloadSceneAsync( temp );
SceneManager.LoadScene( temp.buildIndex, LoadSceneMode.Additive );
}
}
private void FixedUpdate() {
if ( timer.seconds < 1f && ObjectManager.instance.treeCount > 0 ) {
PlayerManager.instance.player.GetComponent<Animator>().enabled = false;
UIManager.ToggleUIElement( "InGame", false );
UIManager.ToggleUIElement( "GameOver", true );
return;
} else if ( timer.seconds > 0f && ObjectManager.instance.treeCount <= 0 ) {
return;
}
InputManager.instance.HandleInput();
--_timer;
}
private void InitializeScenes() {
//Preload starting scenes
LoadScene( "Scenes/UI" );
LoadScene( "Scenes/Level 1/Level" );
LoadScene( "Scenes/Player" );
}
public static void LoadScene( string path ) {
//Loads a scene. Created so other scripts can manipulate the levels without having to include relevant namespaces each time.
SceneManager.LoadScene( path, LoadSceneMode.Additive );
}
public static void MoveObjectToScene( GameObject @object, string name ) {
//moves from current active scene to scene of choice, usually the level scene.
SceneManager.MoveGameObjectToScene( @object, SceneManager.GetSceneByName( name ) );
}
}
}
Unsure if I have elaborated enough, if not, say so and I will update with more explanations where necessary. No specific goal, other than to improve the readability and efficiency of the code.
c# object-oriented game design-patterns unity3d
New contributor
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
I am self taught, so consistently seeking ways to code better, and more efficiently. If anyone has the time, please advise me on what can be done better with explanations as to why the old method is considered inefficient, and why the new method proves to be better. Also, where I can implement more self explanatory code.
using System;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.SceneManagement;
namespace Mans.Prototype.Lumberjack {
[System.Serializable]
public class GameManager : MonoBehaviour {
Variables and Properties:
public static GameManager instance { get; private set; } //singleton
private static Timer _timer;
[SerializeField] private GameObject _logPrefab;
[SerializeField] private float _seconds;
public Timer timer {
get { return _timer; }
set { _timer = value; }
}
public static GameObject logPrefab {
get { return instance._logPrefab; }
}
Methods:
private void Awake() {
instance = this;
timer = new Timer( _seconds );
InitializeScenes();
}
private void Start() {
ObjectManager.Initialize();
UIManager.ToggleUIElement( "InGame" );
SceneManager.SetActiveScene( SceneManager.GetSceneByName( "Level" ) );
}
private void Update() {
if ( Input.GetKey( KeyCode.Return ) ) {
Scene temp = SceneManager.GetSceneByName( "Level" );
SceneManager.UnloadSceneAsync( temp );
SceneManager.LoadScene( temp.buildIndex, LoadSceneMode.Additive );
}
}
private void FixedUpdate() {
if ( timer.seconds < 1f && ObjectManager.instance.treeCount > 0 ) {
PlayerManager.instance.player.GetComponent<Animator>().enabled = false;
UIManager.ToggleUIElement( "InGame", false );
UIManager.ToggleUIElement( "GameOver", true );
return;
} else if ( timer.seconds > 0f && ObjectManager.instance.treeCount <= 0 ) {
return;
}
InputManager.instance.HandleInput();
--_timer;
}
private void InitializeScenes() {
//Preload starting scenes
LoadScene( "Scenes/UI" );
LoadScene( "Scenes/Level 1/Level" );
LoadScene( "Scenes/Player" );
}
public static void LoadScene( string path ) {
//Loads a scene. Created so other scripts can manipulate the levels without having to include relevant namespaces each time.
SceneManager.LoadScene( path, LoadSceneMode.Additive );
}
public static void MoveObjectToScene( GameObject @object, string name ) {
//moves from current active scene to scene of choice, usually the level scene.
SceneManager.MoveGameObjectToScene( @object, SceneManager.GetSceneByName( name ) );
}
}
}
Unsure if I have elaborated enough, if not, say so and I will update with more explanations where necessary. No specific goal, other than to improve the readability and efficiency of the code.
c# object-oriented game design-patterns unity3d
New contributor
I am self taught, so consistently seeking ways to code better, and more efficiently. If anyone has the time, please advise me on what can be done better with explanations as to why the old method is considered inefficient, and why the new method proves to be better. Also, where I can implement more self explanatory code.
using System;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.SceneManagement;
namespace Mans.Prototype.Lumberjack {
[System.Serializable]
public class GameManager : MonoBehaviour {
Variables and Properties:
public static GameManager instance { get; private set; } //singleton
private static Timer _timer;
[SerializeField] private GameObject _logPrefab;
[SerializeField] private float _seconds;
public Timer timer {
get { return _timer; }
set { _timer = value; }
}
public static GameObject logPrefab {
get { return instance._logPrefab; }
}
Methods:
private void Awake() {
instance = this;
timer = new Timer( _seconds );
InitializeScenes();
}
private void Start() {
ObjectManager.Initialize();
UIManager.ToggleUIElement( "InGame" );
SceneManager.SetActiveScene( SceneManager.GetSceneByName( "Level" ) );
}
private void Update() {
if ( Input.GetKey( KeyCode.Return ) ) {
Scene temp = SceneManager.GetSceneByName( "Level" );
SceneManager.UnloadSceneAsync( temp );
SceneManager.LoadScene( temp.buildIndex, LoadSceneMode.Additive );
}
}
private void FixedUpdate() {
if ( timer.seconds < 1f && ObjectManager.instance.treeCount > 0 ) {
PlayerManager.instance.player.GetComponent<Animator>().enabled = false;
UIManager.ToggleUIElement( "InGame", false );
UIManager.ToggleUIElement( "GameOver", true );
return;
} else if ( timer.seconds > 0f && ObjectManager.instance.treeCount <= 0 ) {
return;
}
InputManager.instance.HandleInput();
--_timer;
}
private void InitializeScenes() {
//Preload starting scenes
LoadScene( "Scenes/UI" );
LoadScene( "Scenes/Level 1/Level" );
LoadScene( "Scenes/Player" );
}
public static void LoadScene( string path ) {
//Loads a scene. Created so other scripts can manipulate the levels without having to include relevant namespaces each time.
SceneManager.LoadScene( path, LoadSceneMode.Additive );
}
public static void MoveObjectToScene( GameObject @object, string name ) {
//moves from current active scene to scene of choice, usually the level scene.
SceneManager.MoveGameObjectToScene( @object, SceneManager.GetSceneByName( name ) );
}
}
}
Unsure if I have elaborated enough, if not, say so and I will update with more explanations where necessary. No specific goal, other than to improve the readability and efficiency of the code.
c# object-oriented game design-patterns unity3d
c# object-oriented game design-patterns unity3d
New contributor
New contributor
New contributor
asked 10 mins ago
ProfessorOptics
11
11
New contributor
New contributor
add a comment |
add a comment |
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function () {
return StackExchange.using("mathjaxEditing", function () {
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
});
});
}, "mathjax-editing");
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "196"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
ProfessorOptics is a new contributor. Be nice, and check out our Code of Conduct.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f209711%2fprototype-gamemanager-for-game-written-in-unity-c%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
ProfessorOptics is a new contributor. Be nice, and check out our Code of Conduct.
ProfessorOptics is a new contributor. Be nice, and check out our Code of Conduct.
ProfessorOptics is a new contributor. Be nice, and check out our Code of Conduct.
ProfessorOptics is a new contributor. Be nice, and check out our Code of Conduct.
Thanks for contributing an answer to Code Review Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f209711%2fprototype-gamemanager-for-game-written-in-unity-c%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown