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 zillion · Oct 15, 2012 at 02:27 AM · javascriptarrayrandomspawn

Calling random functions

I am trying to create a spawning script for my game. I have 3 spawning points, and I am choosing one of these points by random. I also have 10 functions in another script attached to the spawning points. These functions each create a different enemy. The way I am currently doing it is:

 var spawnPoints: GameObject[];
     private var randomSpawn:GameObject;
     
     function Update ()
     {
         randomSpawn = spawnPoints[Random.Range (0,3)];
     }
     
     function Level1()
     {
         randomSpawn.gameObject.GetComponent(spawnObjects).SpawnEnemy1();
         randomSpawn = spawnPoints[Random.Range (0,3)];
         randomSpawn.gameObject.GetComponent(spawnObjects).SpawnEnemy2();
         randomSpawn = spawnPoints[Random.Range (0,3)];
 
     }

To sum it up, I have an array that has 3 spawn point objects in it. They are chosen randomly and then saved to randomSpawn. This is repeated in the update loop, and also in the Level1 function so that it is randomised again, before spawning the enemy two.

Somehow, I need the random spawn to also choose a random function out of these 10 functions. These 10 functions are not in the same script.

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

4 Replies

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

Answer by Eric5h5 · Oct 15, 2012 at 07:59 AM

The literal answer to your question is to use an array of delegates:

 function Start () {
     var functions = [Foo, Bar];
     functions[Random.Range(0, functions.Length)]();
 }
 
 function Foo () {
     Debug.Log ("foo");
 }
 
 function Bar () {
     Debug.Log ("bar");
 }

However, you shouldn't actually do this, since you really should not have separate functions in the first place for this sort of thing. Make one function that does spawning, and use an array of different enemy prefabs so you can choose them randomly in that function.

(Also don't hard-code things like "spawnPoints[Random.Range (0,3)];", instead use the length: "spawnPoints[Random.Range (0, spawnPoints.Length)];". That way, if/when it changes, the code still works without having to remember to fix it.)

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
2

Answer by zillion · Oct 15, 2012 at 08:18 AM

All answers were fantastic and I managed to solve my problem with the help of all three of you :)

Although Eric's answer suited best for my problem. Thanks!

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
1

Answer by ChaoticBoredom · Oct 15, 2012 at 06:33 AM

Are the SpawnEnemy functions doing a great deal more than creating the enemy? If not, it'd probably be easier to set up the functions to take in a parameter (the enemy type) and pass those in.

ie.

 randomSpawn = spawnPoints[Random.Range (0,3)];
 enemyType = enemyTypes[Random.Range(0, 10)];
 randomSpawn.gameObject.GetComponent(spawnObjects).SpawnEnemy(enemyType);

It depends on what else these SpawnEnemy functions are doing, but this would be cleaner.

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
1

Answer by gribbly · Oct 15, 2012 at 04:34 AM

Not sure I fully understand the question, but can you pass have one function that accepts a int to create different enemies?

 //in the script attached to the spawn points
 
 function SpawnEnemy(n:int)
 {
     switch(n)
     {
         case 1:
             //spawn enemy 1
             //either put code here or call another function
             break;
         case 2:
             //spawn enemy 2
             break;
         case 3:
             //spawn enemy 3
             break;
 
         //...and so on to case 10
 
         default:
             //do something sensible
     }
 }
 
 //in the level script
 randomSpawn.gameObject.GetComponent(spawnObjects).SpawnEnemy(Random.Range (1,10));
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

12 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

Related Questions

Simple array an spawning question 6 Answers

Spawn object from Random Vector3 in array 0 Answers

Spawn game object in random position on screen 1 Answer

How do I Spawn a random gameObject from Array1, at a random position of gameObjects from Array2 ? 1 Answer

Random Spawner using radius and numbers 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