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.









share







New contributor




ProfessorOptics is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
























    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.









    share







    New contributor




    ProfessorOptics is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
    Check out our Code of Conduct.






















      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.









      share







      New contributor




      ProfessorOptics is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.











      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





      share







      New contributor




      ProfessorOptics is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.










      share







      New contributor




      ProfessorOptics is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.








      share



      share






      New contributor




      ProfessorOptics is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      asked 5 mins ago









      ProfessorOptics

      1




      1




      New contributor




      ProfessorOptics is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.





      New contributor





      ProfessorOptics is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.






      ProfessorOptics is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.



























          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.










          draft saved

          draft discarded


















          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.










          draft saved

          draft discarded


















          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.




          draft saved


          draft discarded














          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





















































          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







          Popular posts from this blog

          Create new schema in PostgreSQL using DBeaver

          Deepest pit of an array with Javascript: test on Codility

          Costa Masnaga