Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 14 Next capture
2021 2022 2023
2 captures
13 Jun 22 - 14 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 NGC2727 · Feb 23 at 07:47 PM · c#unity 2dtilemaptiles

How would I instantiate rooms made of a ruletile as part of a rogue-like random level generation system and have the ruletile affected by the other spawned rooms rule tiles?

Hello. I have finished BlackThornProd's tutorial series on creating rogue like random level generation and it is working fine, however as my rooms are made up of tiles using a rule tile, the rule tiles wouldnt recognise neighbouring rooms as the room prefab had a seperate tilemap. How would I go about merging them/making them recognise eachother as part of the rule tile? Or is there a better way to do this alltogether? Sorry if this is a stupid question, I have a decent amount of unity experience but this is the first time I am using tilemaps and I have spent way too long googling this to no avail... Thank you in advance. I will show my code below if you dont want to watch/havent watched the tutorial. Apologies for the very messy and inneficient code, I havent gotten to cleaning it up yet.

LevelGeneration.cs: this spawns the main path

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine.Tilemaps;
 public class LevelGeneration : MonoBehaviour
 {
     [Header("Spawning References")]
     public Transform[] startingPositions;
     public GameObject[] rooms; // 0 = LR, 1 = LRB, 2 = LRT, 3 = LRTB, I know that ints arent the best and it would be much better to use enums however I was following the tutorial very closely as every time i tried to edit it before finished something would break. I will fix this later, apologies for making it harder to understand
     public GameObject startingRoomInternals;
     public LayerMask roomLayer;
     
     [Header("Stats")]
     public float moveAmount = 10f;
     public float timeBetweenRoom = 0.25f;
 
     [Header("Bounds")]
     public float minX;
     public float maxX;
     public float minY;
 
     [Header("Resetting Tilemap")]
     public Tilemap tilemapMain;
 
     private float currentTimeBetweenRoom;
     private int direction;
     [HideInInspector] public bool stopGeneration = false;
     private int downCounter;
 
     private void Start()
     {
         int randStartingPos = Random.Range(0, startingPositions.Length);
         transform.position = startingPositions[randStartingPos].position;
 
         SpawnRoomAndInternals(rooms[0], startingRoomInternals);
         if(randStartingPos == 0)
         {
             direction = Random.Range(2, 5);
         }
         else if(randStartingPos == startingPositions.Length - 1)
         {
             direction = Random.Range(1, 4);
         }
         else
         {
             direction = Random.Range(1, 5);
         }
         
     }
 
     private void Update()
     {
         if(currentTimeBetweenRoom <= 0 && !stopGeneration)
         {
             Move();
             currentTimeBetweenRoom = timeBetweenRoom;
         }
         else
         {
             currentTimeBetweenRoom -= Time.deltaTime;
         }
     }
 
     private void Move()
     {
         Vector2 newPos;
         switch (direction)
         {
             //RIGHT
             case 1:
             case 2:
                 if(transform.position.x < maxX - moveAmount)
                 {
                     downCounter = 0;
                     newPos = new Vector2(transform.position.x + moveAmount, transform.position.y);
                     transform.position = newPos;
                     
                     int rand = Random.Range(0, rooms.Length);
                     SpawnRoomAndInternals(rooms[rand]);
 
                     direction = Random.Range(1, 6);
                     if(direction == 3)
                     {
                         direction = 2; 
                     }
                     else if(direction == 4)
                     {
                         direction = 5;
                     }
                 }
                 else
                 {
                     direction = 5;
                 }
                 
                 break;
 
             //LEFT
             case 3:
             case 4:
                 if (transform.position.x > minX + moveAmount)
                 {
                     newPos = new Vector2(transform.position.x - moveAmount, transform.position.y);
                     transform.position = newPos;
 
                     int rand = Random.Range(0, rooms.Length);
                     SpawnRoomAndInternals(rooms[rand]);
 
                     direction = Random.Range(3, 6);
                     downCounter = 0;
                 }
                 else
                 {
                     direction = 5;
                 }
                 break;
 
             //DOWN
             case 5:
                 downCounter++;
                 if (transform.position.y > minY + moveAmount)
                 {
                     Collider2D roomDetection = Physics2D.OverlapCircle(transform.position, 1, roomLayer);
                     RoomType roomTypeTemp = roomDetection.GetComponent<RoomType>();
                     if (roomTypeTemp.roomType != 1 && roomTypeTemp.roomType != 3)
                     {
                         roomTypeTemp.DestroyRoom();
                         if (downCounter >= 2)
                         {
                             SpawnRoomAndInternals(rooms[3]);
                         }
                         else
                         {
                             int randBottomRoom = Random.Range(1, 4); // adding 1 due to second parameter being exclusive
 
                             if (randBottomRoom == 2)
                             {
                                 randBottomRoom = 1;
                             }
                             SpawnRoomAndInternals(rooms[randBottomRoom]);
                         }
                         
                     }
 
                     newPos = new Vector2(transform.position.x, transform.position.y - moveAmount);
                     transform.position = newPos;
 
                     int rand = Random.Range(2, 4); // adding 1 due to second parameter being exclusive
                     SpawnRoomAndInternals(rooms[rand]);
 
                     direction = Random.Range(1, 6);
                 }
                 else
                 {
                     stopGeneration = true;
                 }
                 break;
         }
 
     }
 
     public void SpawnRoomAndInternals(GameObject roomTemplate)
     {
         SpawnRoomAndInternals(roomTemplate, null);
     }
 
     public void SpawnRoomAndInternals(GameObject roomTemplate, GameObject roomInternals)
     {
         Transform temp = Instantiate(roomTemplate, transform.position, Quaternion.identity).transform;
         if (roomInternals != null)
         {
             GameObject tempInternals = Instantiate(roomInternals, temp).gameObject;
             //MoveTilesToTilemap(tempInternals.GetComponentInChildren<Tilemap>(), tilemapMain);
         }
         //MoveTilesToTilemap(temp.GetComponentInChildren<Tilemap>(), tilemapMain);
     }
 
     //this function is a first attempt that didnt work
     private void MoveTilesToTilemap(Tilemap tilemapA, Tilemap tilemapB)
     {
         TileBase[] tilesA = tilemapA.GetTilesBlock(tilemapA.cellBounds);
         Vector3Int[] positions = new Vector3Int[tilemapA.cellBounds.size.x * tilemapA.cellBounds.size.y];
         for (int index = 0; index < positions.Length; index++)
         {
             positions[index] = new Vector3Int(index % tilemapA.cellBounds.size.x, index / tilemapA.cellBounds.size.x, 0);
         }
         Destroy(tilemapA.transform.parent.gameObject);
         tilemapB.SetTiles(positions, tilesA);
     }
 }

RoomType.cs: this goes on each roomtemplate prefab and is to identify the type of room it is

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
 public class RoomType : MonoBehaviour
 {
     public int roomType; // again, i know i should use enums or consts so as to give each number a name but I havent gotten to it yet as i was following the tutorial very closely
     public void DestroyRoom()
     {
         Destroy(this.gameObject);
     }
 }

SpawnRooms.cs: this is for spawning random rooms off main path so there isnt alot of empty space

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
 public class SpawnRooms : MonoBehaviour
 {
     public LayerMask roomLayer;
     public LevelGeneration levelGeneration;
     private void Update()
     {
         Collider2D roomDetection = Physics2D.OverlapCircle(transform.position, 1, roomLayer);
         if(roomDetection == null && levelGeneration.stopGeneration)
         {
             int rand = Random.Range(0, levelGeneration.rooms.Length);
             Instantiate(levelGeneration.rooms[rand], transform.position, Quaternion.identity);
         }
     }
 }

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

0 Replies

· Add your reply
  • Sort: 

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

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

Not understanding how to Instantiate gameobjects on a Tilemap. ,Questions about instantiating objects on a Tilemap (Unity 2D) 1 Answer

Multiple Cars not working 1 Answer

Distribute terrain in zones 3 Answers

[Solved] Isometric Rule Tiles not Following Guidelines. 0 Answers

Remove a single tile from a tilemap 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