Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 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 g__l · Apr 07, 2016 at 04:59 PM · editorsceneloadlevel

Scene loads differently when loaded from another scene than selecting that scene first, in the editor. [answered]

Quite a simple problem really, but after searching the internet i am struggling to find an answer.

Problem

Scene doesn't load fully, some parts work, some don't, from another scene (through Application.LoadLevel() ), whereas opening the scene directly and then playing it works fine.

What I've tried

  • Waiting for a while to see if it is just taking time to load (1 min +), in comparison to the ten seconds when it loads on its own.

  • Built it and seen if the problem repeats itself or not, allowing me to decide if it is due to the editor, like when you switch scene and the lighting goes dark. However, the problem repeats itself.

  • Upgraded my Unity to version 5.3.4f1, then used SceneManager.LoadScene() instead of Application.LoadLevel(). No change evident at all.

What I think may causing it

  • Reading many web pages i understand that Unity's scene loading and scene system can be annoying

Thank you for reading this, I hope it is a simple problem but to a quite inexperienced Unity user (ME) it is quite perplexing. If any exact details are required i will add them on but to me they are unnecessary (and take a lot of effort too).

Further Detail (EDIT)

Video showing the scene loaded directly and from another scene (HERE)

Script with interesting debug results -

 using UnityEngine;
 using System.Collections;
 using System.Collections.Generic;
 
 public class ObstacleController : MonoBehaviour {
     ButtonCreator ButtonCreator;
     List<GameObject> LineGameObjects;
     List<LineClass.Line> LineInfos;
     List<GameObject> Positions;
     List<GameObject> Obstacles;
     List<GameObject> PossiblePositions;
     public List<Vector3> Targets;
     List<Vector3> PossiblePos;
     List<LineClass.Line> ConnectedLines;
     GameObject Ball;
     public GameObject ball;
     public int numberOfBalls;
     public float speed;
     Vector3 noGoPoint;
     List<float> Speeds;
     public List<Vector3> PastReachedPoints;
     bool Targeted;
     public GameObject cross;
     int i99;
     // Use this for initialization
     void Start() {
         i99 = 0;
         Speeds = new List<float>();
         ConnectedLines = new List<LineClass.Line>();
         ButtonCreator = GetComponent<ButtonCreator>();
         LineGameObjects = new List<GameObject>();
         LineInfos = new List<LineClass.Line>();
         Positions = new List<GameObject>();
         PossiblePositions = new List<GameObject>();
         Obstacles = new List<GameObject>();
         Targets = new List<Vector3>();
         PossiblePos = new List<Vector3>();
         Targeted = true;
         PastReachedPoints = new List<Vector3>();
     }
 
     void LateUpdate()
     {
         GameObject[] gameObjects = GameObject.FindGameObjectsWithTag("cross");
         foreach (GameObject target in gameObjects)
         {
             GameObject.Destroy(target);
         }
         Instantiate(cross, noGoPoint, Quaternion.identity);
     }
     // Update is called once per frame
     void Update() {
         Debug.Log("HEY"); // LOOK HERE <- <- <- <- <- 
         if (Time.frameCount == 1)
         {
             Debug.Log("2HEY"); // LOOK HERE <- <- <- <- <- 
             // connect up lists
             LineGameObjects = ButtonCreator.LineGameObjects;
             Positions = ButtonCreator.Positions;
             LineInfos = ButtonCreator.LineInfos;
             //intialise possible positions
             PossiblePositions.Clear();
             int i = 0;
             while (i < Positions.Count)
             {
                 PossiblePositions.Add(Positions[i]);
                 i++;
             }
             // set number of balls
             numberOfBalls = 11;
             // create balls
             i = 0;
             while (i < numberOfBalls)
             {
                 GameObject Ball = Instantiate(ball) as GameObject; // create the ball
                 int i2 = Random.Range(0, PossiblePositions.Count); // randomise the index
                 Ball.transform.position = PossiblePositions[i2].transform.position; // set the positions
                 Ball.transform.position = new Vector3(Ball.transform.position.x, Ball.transform.position.y, -0.1f);// set the z to -1
                 Obstacles.Add(Ball); // add to list
                 Debug.Log("3HEY"); // LOOK HERE <- <- <- <- <- 
                 i++;
             }
             PossiblePositions.Clear();
             i = 0;
             while (i < Positions.Count)
             {
                 PossiblePositions.Add(Positions[i]);
                 i++;
             }
             // reset possible positions
 
             setNoGo();
             setTarget();
         }
 
         bool TargetsReached = false;
         bool TargetsNotReached = false;
         int i5 = 0;
         while (i5 < Obstacles.Count)
         {
             if (Obstacles[i5].transform.position == new Vector3(Targets[i5].x, Targets[i5].y, -1))
             {
                 TargetsReached = true;
             }
             else
             {
                 TargetsNotReached = true;
             }
             i5++;
         }
 
         if (TargetsReached == true && TargetsNotReached == false)
         {
             Targeted = false;
         }
         if (Targeted == false)
         {
             SetupTarget();
         }
         if (Targeted == true)
         {
             int i3 = 0;
             while (i3 < numberOfBalls)
             {
                 Vector3 current = Obstacles[i3].transform.position;
                 Vector3 target = new Vector3(Targets[i3].x, Targets[i3].y, -1);
                 float step = Speeds[i3] * Time.deltaTime;
                 Obstacles[i3].transform.position = Vector3.MoveTowards(current, target, step);
                 i3++;
             }
         }
 
     }
     void SetupTarget ()
     {
         if (i99 == 2)
         {
             setNoGo();
             i99 = 0;
         }
         setTarget();
         i99++;
         Targeted = true;
     }
     void setNoGo() // if targeted = false as targets have reached
     {
         Vector3 previous = noGoPoint;
         PossiblePositions.Clear();
 
         int i = 0;
         while (i < Positions.Count)
         {
             PossiblePositions.Add(Positions[i]);
             i++;
         }
         i = 0;
         while (i < PossiblePositions.Count)
         {
             bool isThereBlue; // will return true if at least one of the connected lines of this point is blue
             isThereBlue = false;
 
             // for each possible position find all the connected lines
             ConnectedLines.Clear();
             int i2 = 0;
             while (i2 < LineInfos.Count)
             {
                 if (LineInfos[i2].endpos == PossiblePositions[i].transform.position || LineInfos[i2].startpos == PossiblePositions[i].transform.position)
                 {
                     ConnectedLines.Add(LineInfos[i2]);
                 }
                 i2++;
             }
 
             // checks if there is a connected blue line
             i++;
             int i3 = 0;
             while (i3 < ConnectedLines.Count)
             {
                 if (ConnectedLines[i3].colour == Color.blue)
                 {
                     isThereBlue = true;
                     
                 }
                 i3++;
             }
 
                 // if there are no connected blue lines remove from the selection for no go zone
                 if (isThereBlue == false)
                 {
                     PossiblePositions.RemoveAt(i);
                     if (i != 0)
                     {
                         i--;
                     }
                 }
             i++;
                 
         }
 
         i = 0;
         while(i < PossiblePositions.Count)
         {
             if (PossiblePositions[i].transform.position == previous)
             {
                 PossiblePositions.RemoveAt(i);
                 if (i != 0)
                 {
                     i--;
                 }
             }
             i++;
         }
         // for each obstacle
         // when targeted = false
         // choose a target, which is not - 
         // where it is now
         // or in the no go area
         i = Random.Range(0, PossiblePositions.Count);
         noGoPoint = PossiblePositions[i].transform.position;
         }
     
 
     void setTarget()
     {
         PastReachedPoints.Clear();
         Targets.Clear();
         Speeds.Clear();
         int i3 = 0;
         while (i3 < numberOfBalls)
         {
             Vector3 point = Obstacles[i3].transform.position;
             //if (i3 == 1)
             //{
             //    Instantiate(cross, point, Quaternion.identity);
             //}
             point.z = 0;
             PossiblePos.Clear();
             // find all the possible positions to move towards
             int i = 0;
             while (i < LineInfos.Count)
             {
                 if (point == LineInfos[i].startpos)
                 {
                     PossiblePos.Add(LineInfos[i].endpos);
                 }
 
                 else if (point == LineInfos[i].endpos)
                 {
                     PossiblePos.Add(LineInfos[i].startpos);
                 }
                 i++;
             }
             //i = 0;
             //while (i < PossiblePos.Count)
             //{
             //    if (i3 == 1)
             //    {
             //        Instantiate(ocross, PossiblePos[i], Quaternion.identity);
             //    }
             //    i++;
             //}
             PossiblePos.Remove(point);
 
             // remove any from the no go list
             i = 0;
             while (i < PossiblePos.Count)
             {
                     if (new Vector2(PossiblePos[i].x, PossiblePos[i].y) == new Vector2(noGoPoint.x, noGoPoint.y))
                     {
                         PossiblePos.RemoveAt(i);
                         if (i != 0)
                         {
                             i--;
                         } 
                     }   
                 i++;
             }
             //choose the random target
             //i = 0;
             //while(i < PossiblePos.Count)
             //{
             //
             //    if (i3 == 1)
             //    {
             //        Instantiate(rmarker, PossiblePos[i], Quaternion.identity);
             //    }
             //    i++;
             //}
             PastReachedPoints.Add(point);
             Targets.Add(PossiblePos[Random.Range(0, PossiblePos.Count)]);
             float time = 0.3f;
             float distanceInBetween = Vector3.Distance(Obstacles[i3].transform.position, Targets[i3]);
             float speed = distanceInBetween / time;
             Speeds.Add(speed);
             i3++;
         }
 
     }
 }

The Console Messages

  • When the scene is loaded directly

alt text

  • When the scene is loaded from another scene

alt text

1.png (9.2 kB)
2.png (16.3 kB)
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

2 Replies

· Add your reply
  • Sort: 
avatar image
0
Best Answer

Answer by g__l · Apr 08, 2016 at 12:41 PM

Asked this question on stack overflow and got a response, what i was doing wrong was that the code which was not read as shown by the lack of debugs, was where if (Time.frameCount == 1). I used this function to ensure this code happened after my start function but of course when i opened it from another scene the Time.frameCount had already been going so that code was not completed and i only got a bit of my desired results. To solve this in my scene i will get the frame count in the start function and then in the update function i will say do --- when the frame count has gone up by one.

Hope this helps anyone who goes through a similar problem.

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 Rob2309 · Apr 07, 2016 at 05:53 PM

If it's ok for you, you could describe what kind of objects are in the scene and what they do... Like are there any objects in the scene that could cause problems at runtime?

Comment
Add comment · Show 1 · 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 g__l · Apr 07, 2016 at 06:54 PM 0
Share

Thanks for your reply, I've added further detail into the original question, if you require any more just ask

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

49 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 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 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 avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Can you create transitions between levels using Application.LoadLevel? 6 Answers

Some changes in hierarcy gone after i run play mode ? 0 Answers

Cannot close/unload a scene that is open in editor during playmode (using C# code)? 3 Answers

Photon stays in "connecting" status 0 Answers

Changing scenes by pressing a key? 1 Answer


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