Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 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 fir3st0rm9 · Jan 28, 2013 at 02:04 AM · positionplayersceneswitch

How to keep position of a Game Object when switching scene?

Hi, In my game, I need to have a trigger zone that makes a player switch scene but then the player comes back into the first scene and needs to be in the exact same spot. How can I do this?

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

3 Replies

· Add your reply
  • Sort: 
avatar image
1

Answer by Heratitan · Jan 28, 2013 at 05:06 AM

I would recommend saving the coordinates of the players position to the player preferences and then referring back to the coordinates when the player re-enters the scene.

It would look something like this:

 var player : GameObject;
 
 function PlayerIsSwitchingScene (){
       PlayerPrefs.SetFloat("X", player.transform.position.x);
       PlayerPrefs.SetFloat("Y", player.transform.position.y);
       PlayerPrefs.SetFloat("Z", player.transform.position.z);
       // Player Switches Scene
 }
 function PlayerIsComingBack (){
       // Player comes back
       player.transform.position.x = PlayerPrefs.GetFloat("X");
       player.transform.position.y = PlayerPrefs.GetFloat("Y");
       player.transform.position.z = PlayerPrefs.GetFloat("Z");
 }
Comment
Add comment · Show 4 · Share
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
avatar image fir3st0rm9 · Jan 28, 2013 at 05:12 AM 0
Share

Ok that works great, I had been looking for a way to do this for so long. Thanks a ton!

avatar image fir3st0rm9 · Jan 28, 2013 at 05:28 AM 0
Share

Okay, that code seems to work but now I am having problems finding the player gameobject. I used var player; function update(){ player=gameobject.findbytag("player"); player.transform.position.x = PlayerPrefs.GetFloat("X"); player.transform.position.y = PlayerPrefs.GetFloat("Y"); player.transform.position.z = PlayerPrefs.GetFloat("Z"); }

Not the exact code but close. But when I load the first scene, the player spawns at the original point not the playerprefs set point. When I look at the log it says Null Reference Exception and I have deduced that it is a problem with finding the player object. Any suggestions?

avatar image Heratitan · Jan 28, 2013 at 02:17 PM 0
Share

It could be just that the tag "Player" is capitalized and it is not finding the gameobject because of that. Also obviously make sure that your player object has the player tag on it.

If this doesn't work you could also use: GameObject.Find

This will just find the gameobject based on its name.

avatar image chudangkhanhsasuke · May 16, 2018 at 04:41 AM 0
Share

How to know when player is switching scene and when player is co$$anonymous$$g back ?

avatar image
1

Answer by Gizmoi · Jan 28, 2013 at 02:24 PM

If you call DontDestroyOnLoad() and pass in the trigger as a GameObject, the trigger will persist across scenes and not be destroyed when loading levels.
Be warned though, this will make it not be destroyed when loading any level/scene. For example, if you re-load the first level, you will have to then delete / find and re-use the same GameObject.

Comment
Add comment · Share
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
avatar image
0

Answer by shadowpuppet · Jun 01, 2016 at 11:56 PM

I have the same problem - within the same scene if I hit "load" the player will appear at the saved location, but when he enters a trigger that takes him to the next scene...and I hit "load" - it will take me back to the correct scene but the player is in his original starting position. Like I am restarting the entire level. I see in the Inspector window that the var playerPosition switches to none. Like the player position gets lost in scene changes. Any help here? below is the script - which I got online - and all works well.I had to comment out the stuff about Blur and mouseLook to get it to work but I don't think that is the problem. I mean the script DOES save the level and DOES save the player position but that position disappears in scene changes

 class ComponentsClass { 
     //var BlurEffect : Blur;
     //var Look : MouseLook;
 }
 var Components : ComponentsClass = new ComponentsClass ( ) ;
 var Restart: String;
 var playerPosition : Transform;
 var mainMenuSceneName : String;
 var Skin : GUISkin;
 var LoadPosition : String = "false";  //set to "true" is you want to load position or "false" to load only level
 private var LoadLevel : boolean = true;
 //private var Look1 : MouseLook;
 var pauseMenuFont : Font;
  private var PlayerX : float;
  private var PlayerY : float;
  private var PlayerZ : float;
 
 private var pauseEnabled = false;            
 
 function Start(){
     PlayerPrefs.SetString("LoadPosition",LoadPosition); //set loadPosition true or false
     pauseEnabled = false;
     Time.timeScale = 1;
     AudioListener.volume = 1;
     Screen.showCursor = false;
     LoadPlayer();
 }
 
 function SavePlayer(){
             if(PlayerPrefs.GetString("LoadPosition") == "true"){   //save current position            
                 PlayerPrefs.SetFloat("PlayerX",PlayerX);
                 PlayerPrefs.SetFloat("PlayerY",PlayerY);
                 PlayerPrefs.SetFloat("PlayerZ",PlayerZ);
                 PlayerX =(playerPosition.transform.position.x);
                 PlayerY =(playerPosition.transform.position.y);
                 PlayerZ =(playerPosition.transform.position.z);                
                 PlayerPrefs.SetString("LoadPosition", "true");   //allow the load position
                 //Debug.Log("Saved to " + " X: " + PlayerPrefs.GetFloat("PlayerX") + " Y: " + PlayerPrefs.GetFloat("PlayerY") + " Z: " + PlayerPrefs.GetFloat("PlayerZ"));
             }
             PlayerPrefs.SetString("LevelName", Application.loadedLevelName);   //save current level
 }
 
 function loadLevel(){  //load saved position
         if(PlayerPrefs.GetString("LevelName") == Application.loadedLevelName){   //check if you have Loaded Level
             LoadLevel = false;
         }
         
         if(LoadLevel == true){
                 Application.LoadLevel(PlayerPrefs.GetString("LevelName"));    //load saved level
         }
 }
 
 function LoadPlayer(){   //load player position on saved level
         if(LoadLevel == false && PlayerPrefs.GetString("LoadPosition") == "true"){
             playerPosition.transform.position.x = (PlayerPrefs.GetFloat("PlayerX"));
             playerPosition.transform.position.y = (PlayerPrefs.GetFloat("PlayerY"));
             playerPosition.transform.position.z = (PlayerPrefs.GetFloat("PlayerZ")); 
             //Debug.Log("LOAD POS");
         }
 }
 
 function Update(){
 
 PlayerX =(playerPosition.transform.position.x); PlayerY =(playerPosition.transform.position.y); PlayerZ =(playerPosition.transform.position.z);   //set current player position
 LoadPosition = PlayerPrefs.GetString("LoadPosition"); //check if loadPosition is true or false
 
     //check if pause button (escape key) is pressed
     if(Input.GetKeyDown("escape")){
     //Look1 = gameObject.GetComponent (MouseLook);  //set MouseLook script
     
         //check if game is already paused        
         if(pauseEnabled == true){
             //unpause the game
             pauseEnabled = false;
             Time.timeScale = 1;
             AudioListener.volume = 1;
             Screen.showCursor = false;    
            // Components.BlurEffect.enabled = false;
             //Components.Look.enabled = true;
             //Look1.enabled = true;
         }
         
         //else if game isn't paused, then pause it
         else if(pauseEnabled == false){
             pauseEnabled = true;
             AudioListener.volume = 0;
             Time.timeScale = 0;
             Screen.showCursor = true;
             //Components.BlurEffect.enabled = true;
             //Components.Look.enabled = false;
             //Look1.enabled = false;
         }
     }
 }
 
 private var showGraphicsDropDown = false;
 
 function OnGUI(){
 
 GUI.skin = Skin;
 
     if(pauseEnabled == true){
         
         //Make a background box
         GUI.Box(Rect(Screen.width /2 - 100,Screen.height /2 - 180,250,280), "Pause Menu");
         
             if(GUI.Button(Rect(Screen.width /2 - 100,Screen.height /2 - 50,250,50), "Restart Level")){
             Application.LoadLevel(Restart);
         }
         
         //Make Main Menu button
         if(GUI.Button(Rect(Screen.width /2 - 100,Screen.height /2 - 0,250,50), "Main Menu")){
             Application.LoadLevel(mainMenuSceneName);
         }
         
         //Make Save Game button
         if(GUI.Button(Rect(Screen.width /2 - 100,Screen.height /2 - 100,250,50), "Save Game")){
         SavePlayer();
         }
         
         if(GUI.Button(Rect(Screen.width /2 - 100,Screen.height /2 - 150,250,50), "Load Game")){
         loadLevel();
         LoadPlayer();
         }
         
         //Make Change Graphics Quality button
             if(GUI.Button(Rect(Screen.width /2 - 100,Screen.height /2 +50,250,50), "Change Graphics Quality")){
             
             if(showGraphicsDropDown == false){
                 showGraphicsDropDown = true;
             }
             else{
                 showGraphicsDropDown = false;
             }
         }
         
         //Create the Graphics settings buttons, these won't show automatically, they will be called when
         //the user clicks on the "Change Graphics Quality" Button, and then dissapear when they click
         //on it again....
         if(showGraphicsDropDown == true){
             if(GUI.Button(Rect(Screen.width /2 + 150,Screen.height /2 ,250,50), "Fastest")){
                 QualitySettings.currentLevel = QualityLevel.Fastest;
             }
             if(GUI.Button(Rect(Screen.width /2 + 150,Screen.height /2 + 50,250,50), "Fast")){
                 QualitySettings.currentLevel = QualityLevel.Fast;
             }
             if(GUI.Button(Rect(Screen.width /2 + 150,Screen.height /2 + 100,250,50), "Simple")){
                 QualitySettings.currentLevel = QualityLevel.Simple;
             }
             if(GUI.Button(Rect(Screen.width /2 + 150,Screen.height /2 + 150,250,50), "Good")){
                 QualitySettings.currentLevel = QualityLevel.Good;
             }
             if(GUI.Button(Rect(Screen.width /2 + 150,Screen.height /2 + 200,250,50), "Beautiful")){
                 QualitySettings.currentLevel = QualityLevel.Beautiful;
             }
             if(GUI.Button(Rect(Screen.width /2 + 150,Screen.height /2 + 250,250,50), "Fantastic")){
                 QualitySettings.currentLevel = QualityLevel.Fantastic;
             }
             
             if(Input.GetKeyDown("escape")){
                 showGraphicsDropDown = false;
             }
         }
         
         //Make quit game button
         if (GUI.Button (Rect (Screen.width /2 - 100,Screen.height /2 + 100,250,50), "Quit Game")){
             Application.Quit();
         }
     }
 }
 
Comment
Add comment · Share
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

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

13 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

Related Questions

change scene and and position 2 Answers

How Move Player between Scenes? 7 Answers

Camera rotation around player while following. 6 Answers

Load a Scene and Move the Player to an Specific Location. 6 Answers

How do you switch scenes? PLZ HELP!!! 3 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