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 /
  • Help Room /
avatar image
1
Question by lemmons · Jun 22, 2016 at 08:58 PM · 2dscripting problemtutorialroguelike

2d roguelike tutorial board manager issues

Hey folks, I'm on lesson 5 of the 2d roguelike tutorial (see here) and when I play the scene after building the test game manager script I'm getting some really odd results:

alt text

You might not be able to tell, but I think it's rendering correctly as far as outer wall, inner walls, food, enemies, etc. but the spacing is so out of whack it's crazy. When I thought it was a code issue I went to the previous lesson and copy/pasted it into my boardManager file and got the exact same results. I'll post them here for reference:

Board Manager:

     using UnityEngine;
     using System;
     using System.Collections.Generic;       //Allows us to use Lists.
     using Random = UnityEngine.Random;      //Tells Random to use the Unity Engine random number generator.
     
     namespace Completed
     
     {
     
         public class BoardManager : MonoBehaviour
         {
             // Using Serializable allows us to embed a class with sub properties in the inspector.
             [Serializable]
             public class Count
             {
                 public int minimum;             //Minimum value for our Count class.
                 public int maximum;             //Maximum value for our Count class.
     
     
                 //Assignment constructor.
                 public Count (int min, int max)
                 {
                     minimum = min;
                     maximum = max;
                 }
             }
     
     
             public int columns = 8;                                         //Number of columns in our game board.
             public int rows = 8;                                            //Number of rows in our game board.
             public Count wallCount = new Count (5, 9);                      //Lower and upper limit for our random number of walls per level.
             public Count foodCount = new Count (1, 5);                      //Lower and upper limit for our random number of food items per level.
             public GameObject exit;                                         //Prefab to spawn for exit.
             public GameObject[] floorTiles;                                 //Array of floor prefabs.
             public GameObject[] wallTiles;                                  //Array of wall prefabs.
             public GameObject[] foodTiles;                                  //Array of food prefabs.
             public GameObject[] enemyTiles;                                 //Array of enemy prefabs.
             public GameObject[] outerWallTiles;                             //Array of outer tile prefabs.
     
             private Transform boardHolder;                                  //A variable to store a reference to the transform of our Board object.
             private List <Vector3> gridPositions = new List <Vector3> ();   //A list of possible locations to place tiles.
     
     
             //Clears our list gridPositions and prepares it to generate a new board.
             void InitialiseList ()
             {
                 //Clear our list gridPositions.
                 gridPositions.Clear ();
     
                 //Loop through x axis (columns).
                 for(int x = 1; x < columns-1; x++)
                 {
                     //Within each column, loop through y axis (rows).
                     for(int y = 1; y < rows-1; y++)
                     {
                         //At each index add a new Vector3 to our list with the x and y coordinates of that position.
                         gridPositions.Add (new Vector3(x, y, 0f));
                     }
                 }
             }
     
     
             //Sets up the outer walls and floor (background) of the game board.
             void BoardSetup ()
             {
                 //Instantiate Board and set boardHolder to its transform.
                 boardHolder = new GameObject ("Board").transform;
     
                 //Loop along x axis, starting from -1 (to fill corner) with floor or outerwall edge tiles.
                 for(int x = -1; x < columns + 1; x++)
                 {
                     //Loop along y axis, starting from -1 to place floor or outerwall tiles.
                     for(int y = -1; y < rows + 1; y++)
                     {
                         //Choose a random tile from our array of floor tile prefabs and prepare to instantiate it.
                         GameObject toInstantiate = floorTiles[Random.Range (0,floorTiles.Length)];
     
                         //Check if we current position is at board edge, if so choose a random outer wall prefab from our array of outer wall tiles.
                         if(x == -1 || x == columns || y == -1 || y == rows)
                             toInstantiate = outerWallTiles [Random.Range (0, outerWallTiles.Length)];
     
                         //Instantiate the GameObject instance using the prefab chosen for toInstantiate at the Vector3 corresponding to current grid position in loop, cast it to GameObject.
                         GameObject instance =
                             Instantiate (toInstantiate, new Vector3 (x, y, 0f), Quaternion.identity) as GameObject;
     
                         //Set the parent of our newly instantiated object instance to boardHolder, this is just organizational to avoid cluttering hierarchy.
                         instance.transform.SetParent (boardHolder);
                     }
                 }
             }
     
     
             //RandomPosition returns a random position from our list gridPositions.
             Vector3 RandomPosition ()
             {
                 //Declare an integer randomIndex, set it's value to a random number between 0 and the count of items in our List gridPositions.
                 int randomIndex = Random.Range (0, gridPositions.Count);
     
                 //Declare a variable of type Vector3 called randomPosition, set it's value to the entry at randomIndex from our List gridPositions.
                 Vector3 randomPosition = gridPositions[randomIndex];
     
                 //Remove the entry at randomIndex from the list so that it can't be re-used.
                 gridPositions.RemoveAt (randomIndex);
     
                 //Return the randomly selected Vector3 position.
                 return randomPosition;
             }
     
     
             //LayoutObjectAtRandom accepts an array of game objects to choose from along with a minimum and maximum range for the number of objects to create.
             void LayoutObjectAtRandom (GameObject[] tileArray, int minimum, int maximum)
             {
                 //Choose a random number of objects to instantiate within the minimum and maximum limits
                 int objectCount = Random.Range (minimum, maximum+1);
     
                 //Instantiate objects until the randomly chosen limit objectCount is reached
                 for(int i = 0; i < objectCount; i++)
                 {
                     //Choose a position for randomPosition by getting a random position from our list of available Vector3s stored in gridPosition
                     Vector3 randomPosition = RandomPosition();
     
                     //Choose a random tile from tileArray and assign it to tileChoice
                     GameObject tileChoice = tileArray[Random.Range (0, tileArray.Length)];
     
                     //Instantiate tileChoice at the position returned by RandomPosition with no change in rotation
                     Instantiate(tileChoice, randomPosition, Quaternion.identity);
                 }
             }
     
     
             //SetupScene initializes our level and calls the previous functions to lay out the game board
             public void SetupScene (int level)
             {
                 //Creates the outer walls and floor.
                 BoardSetup ();
     
                 //Reset our list of gridpositions.
                 InitialiseList ();
     
                 //Instantiate a random number of wall tiles based on minimum and maximum, at randomized positions.
                 LayoutObjectAtRandom (wallTiles, wallCount.minimum, wallCount.maximum);
     
                 //Instantiate a random number of food tiles based on minimum and maximum, at randomized positions.
                 LayoutObjectAtRandom (foodTiles, foodCount.minimum, foodCount.maximum);
     
                 //Determine number of enemies based on current level number, based on a logarithmic progression
                 int enemyCount = (int)Mathf.Log(level, 2f);
     
                 //Instantiate a random number of enemies based on minimum and maximum, at randomized positions.
                 LayoutObjectAtRandom (enemyTiles, enemyCount, enemyCount);
     
                 //Instantiate the exit tile in the upper right hand corner of our game board
                 Instantiate (exit, new Vector3 (columns - 1, rows - 1, 0f), Quaternion.identity);
             }
         }
     }

Game Manager:

 using UnityEngine;
 using System.Collections;
 
 namespace Completed
 
 {
     
     public class GameManager : MonoBehaviour {
 
         public BoardManager boardScript;
     
         private int level = 3;
     
         void Awake ()
         {
             boardScript = GetComponent<BoardManager> ();
             InitGame ();
         }
     
         void InitGame()
         {
             boardScript.SetupScene (level);
         }
 
         void Update() {
 
         }
 
 
     }
 }


Any help or guidance would be appreciated! Thanks.

screen-shot-2016-06-22-at-44408-pm.png (246.5 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
1

Answer by lemmons · Jun 24, 2016 at 05:42 PM

Thanks Reddit: https://www.reddit.com/r/Unity2D/comments/4pn33w/help_with_the_2d_roguelike_tutorial/

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 Frozenfingers · Jan 05, 2018 at 06:30 AM

@lemmons Thanks for reaching out on reddit. This saved me so much time on my own project! Also thanks for posting the link!

Hope the rest of the tutorial went well!

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

93 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

Related Questions

[Roguelike 2D] Why can't I implement my Wall script? 0 Answers

Code to replace the count commands in C# for text. 0 Answers

What is the most effective way to structure Card Effects in a Single Player game? 1 Answer

Multiple Sprites, One Script, Randomization 1 Answer

Any one help me in this script? 0 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