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 /
This question was closed Nov 11, 2018 at 12:27 AM by Bill_y_bob for the following reason:

Other

avatar image
0
Question by Bill_y_bob · Aug 12, 2017 at 07:56 AM · c#functionstaticawake

Acces an Awake variable

This is my code:

  public static void Awake()
          {
              Vector3 position1 = new Vector3(Random.Range(220.9f, 281.8f), -1.23f, Random.Range(282.25f, 295.43f));
              Vector3 position2 = new Vector3(Random.Range(281.8f, 315.6f), -1.23f, Random.Range(222.8f, 200.67f));
              Vector3 position3= new Vector3(Random.Range(280.1f, 223.8f), -1.23f, Random.Range(222.8f, 200.7f));
              Vector3 position4= new Vector3(Random.Range(214.8f, 197f), -1.23f, Random.Range(222.7f, 287.91f));
          }
      
  public static void Spawn1()
      {
          Instantiate (GameObject.FindWithTag("enemy"), position1, Quaternion.identity);
      }
      public static void Spawn3()
      {
          Instantiate (GameObject.FindWithTag("enemy"), position2, Quaternion.identity);
      }
      public static void Spawn3()
      {
          Instantiate (GameObject.FindWithTag("enemy"), position3, Quaternion.identity);
      }
      public static void Spawn4()
      {
          Instantiate (GameObject.FindWithTag("enemy"), position4, Quaternion.identity);
      }

Before writing this code, the Vector3 variables where not in the Awake function, but when I run the script I get an error saying that I need to put the Vector3 Variables into an Awake function.

So now, when I call one function (Spawn1(),Spawn2(), etc...) I get an error saying that I can't acces the Vector3 variables because I need to turn them static. The problem is that Unity doesn't let me write static / public before

  Vector3 position1 = new Vector3(Random.Range(220.9f, 281.8f), -1.23f, Random.Range(282.25f, 295.43f));

Thanks and sorry for my English :P.

EDIT: I had to put the variabels into the Awake function because the Random.Range can't be called from MonoBehaviour.

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

  • Sort: 
avatar image
1

Answer by tanoshimi · Aug 12, 2017 at 08:05 AM

You have several issues with your code, but the best advice I can give you is never, ever use static unless you're absolutely sure you know what it is for. You've made your Awake function static, which makes no sense because it can't be called. Remo e the static modifier.

You've also declared local variables - position1, position2, position3 etc. in your Awake function that are never used and can't be accessed anywhere else. They'd also be better stored as an array of Vector3[]. You have a lot of code duplication in your Spawn methods that could all be rewritten in one parameterised method, and you also should avoid using FindWithTag at runtime - it's very slow.

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 FlaSh-G · Aug 12, 2017 at 09:57 AM

@tanoshimi 's anwer has some very important points, but here's an answer more specific to the problem at hand.

Your lines in Awake consist of two parts: The declaration and the initialization of a variable. The declaration:

 Vector3 position1;

The initialization:

 position1 = new Vector( ... );

Both together:

 Vector3 position1 = new Vector( ... );

As you see here, you can do both in one line, but you can also split the whole thing.

The declaration, or rather where the variable gets declared, defines it's "Scope". The scope is where the variable can be used and when it will cease to exist. If you declare a variable within a method, the scope will be that method and the variable cannot be used outside, aka in other methods.

So you need to declare the variable outside of the methods, inside the class:

 private Vector3 position1;

As you stated, you want to use Random.Range, which you cannot use outside of a method. Luckily, you can put the initialisation into Awake even though the declaration is outside:

 void Awake()
 {
   position1 = new Vector( ... );
 }

With that out of the way, @tanoshimi is absolutely right: If you have multiple variables that are called xy1, xy2 and so on, you're doing something wrong. Declare an array instead:

 private Vector3[] positions;

 void Awake()
 {
   positions = new Vector3[4]; // 4 vectors please
   positions[0] = new Vector3( ... );
   positions[1] = new Vector3( ... );
   positions[2] = new Vector3( ... );
   positions[3] = new Vector3( ... );
 }
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

Follow this Question

Answers Answers and Comments

367 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 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 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 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 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 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 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 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

start called directly after instantiate? 1 Answer

Multiple Cars not working 1 Answer

How do you call a static function in C# from Android? 1 Answer

Distribute terrain in zones 3 Answers

Local alternative to static variables? 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