Не могу понять, почему враги спавнятся за пределами комнат.C#

Место общения программистов C#
Ответить
Anonymous
 Не могу понять, почему враги спавнятся за пределами комнат.

Сообщение Anonymous »

Я уже некоторое время пытаюсь решить эту проблему с помощью своего кода, но не могу в этом разобраться. По какой-то причине враги все еще могут появляться за пределами комнат, но они никогда не будут появляться за пределами комнат.
В комнатах, которые я создал до того, как написал этот скрипт, но те, которые я создал недавно, позволяют появляться снаружи. Я также попытался исправить это, создав второй скрипт, который я добавил к своим врагам, который вызывает метод повторного появления, если он не касается земли при первом появлении, но это тоже не сработало.
Код, показанный ниже, прикреплен к моему объекту игрока:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class EnemySpawnRng : MonoBehaviour
{
public GameObject Enemy;
private DoorOpen dooropen;
public GameObject Enemy2;
public GameObject Enemy3;
public GameObject Enemy4;
public GameObject Enemy5;
private int ChosenEnemy;
public int SpawnY;
public int SpawnX;
public int EnemyAmount;
private EnemyAI enemyAI;
private Target target;

void Start()
{
target = FindObjectOfType();
target.EnemiesInRoom = 0;
dooropen = GetComponent();
EnemyAmount = Random.Range(4, 10);
target.EnemiesInRoom = EnemyAmount;

for (int i = 0; i < EnemyAmount; i++)
{
ChosenEnemy = Random.Range(1, 6);

if (ChosenEnemy == 1)
{
Enemy = Instantiate(Enemy, transform.position, Quaternion.identity);

SpawnX = Random.Range(-20, 21);
SpawnY = Random.Range(-10, 1);
Enemy.transform.Translate(SpawnX, SpawnY, 0);
Enemy.transform.Translate(0, SpawnY, 0);

Enemy = GameObject.Find("Big Orc 1 (10)");
}

if (ChosenEnemy == 2)
{
Enemy2 = Instantiate(Enemy2, transform.position, Quaternion.identity);

SpawnX = Random.Range(-20, 21);
SpawnY = Random.Range(-10, 1);
Enemy2.transform.Translate(SpawnX, SpawnY, 0);
Enemy.transform.Translate(0, SpawnY, 0);
Enemy2 = GameObject.Find("Spooky Scary Skeleton (16)");
}

if (ChosenEnemy == 3)
{
Enemy3 = Instantiate(Enemy3, transform.position, Quaternion.identity);

SpawnX = Random.Range(-20, 21);
SpawnY = Random.Range(-10, 1);
Enemy3.transform.Translate(SpawnX, SpawnY, 0);
Enemy3.transform.Translate(0, SpawnY, 0);
Enemy3 = GameObject.Find("Green goo guy (8)");
}

if (ChosenEnemy == 4)
{
Enemy4 = Instantiate(Enemy4, transform.position, Quaternion.identity);

SpawnX = Random.Range(-20, 21);
SpawnY = Random.Range(-10, 1);
Enemy4.transform.Translate(SpawnX, SpawnY, 0);
Enemy4.transform.Translate(0, SpawnY, 0);
Enemy4 = GameObject.Find("Little Orc (31)");
}

if (ChosenEnemy == 5)
{
Enemy5 = Instantiate(Enemy5, transform.position, Quaternion.identity);

SpawnX = Random.Range(-20, 21);
SpawnY = Random.Range(-10, 1);
Enemy5.transform.Translate(SpawnX, SpawnY, 0);
Enemy5.transform.Translate(0, SpawnY, 0);
Enemy5 = GameObject.Find("Little Demon (12)");
}
}
}

public void RetrySpawn()
{
Debug.Log("SpawnRetried");
SpawnX = Random.Range(-10, 15);
SpawnY = Random.Range(-10, 1);
Enemy.transform.Translate(SpawnX, SpawnY, 0);
Enemy.transform.Translate(0, SpawnY, 0);
SpawnX = Random.Range(-10, 15);
SpawnY = Random.Range(-10, 1);
Enemy2.transform.Translate(SpawnX, SpawnY, 0);
Enemy2.transform.Translate(0, SpawnY, 0);
SpawnX = Random.Range(-10, 15);
SpawnY = Random.Range(-10, 1);
Enemy3.transform.Translate(SpawnX, SpawnY, 0);
Enemy3.transform.Translate(0, SpawnY, 0);
SpawnX = Random.Range(-10, 15);
SpawnY = Random.Range(-10, 1);
Enemy4.transform.Translate(SpawnX, SpawnY, 0);
Enemy4.transform.Translate(0, SpawnY, 0);
SpawnX = Random.Range(-10, 15);
SpawnY = Random.Range(-10, 1);
Enemy5.transform.Translate(SpawnX, SpawnY, 0);
Enemy5.transform.Translate(0, SpawnY, 0);
}

void OnTriggerEnter2D(Collider2D collision)
{
if (!collision.gameObject.CompareTag("Ground"))
{
Invoke("RetrySpawn", 0);
}
}

void SpawnEnemies()
{
EnemyAmount = Random.Range(7, 11);
target.EnemiesInRoom = EnemyAmount;

for (int i = 0; i < EnemyAmount; i++)
{
ChosenEnemy = Random.Range(1, 6);

if (ChosenEnemy == 1)
{
Enemy = Instantiate(Enemy, transform.position, Quaternion.identity);

SpawnX = Random.Range(-20, 21);
SpawnY = Random.Range(-10, 1);
Enemy.transform.Translate(SpawnX, SpawnY, 0);
Enemy.transform.Translate(0, SpawnY, 0);
Enemy = GameObject.Find("Big Orc 1 (10)");
}

if (ChosenEnemy == 2)
{
Enemy2 = Instantiate(Enemy2, transform.position, Quaternion.identity);

SpawnX = Random.Range(-20, 21);
SpawnY = Random.Range(-10, 1);
Enemy2.transform.Translate(SpawnX, SpawnY, 0);
Enemy.transform.Translate(0, SpawnY, 0);
Enemy2 = GameObject.Find("Spooky Scary Skeleton (16)");
}

if (ChosenEnemy == 3)
{
Enemy3 = Instantiate(Enemy3, transform.position, Quaternion.identity);

SpawnX = Random.Range(-20, 21);
SpawnY = Random.Range(-10, 1);
Enemy3.transform.Translate(SpawnX, SpawnY, 0);
Enemy3.transform.Translate(0, SpawnY, 0);
Enemy3 = GameObject.Find("Green goo guy (8)");
}

if (ChosenEnemy == 4)
{
Enemy4 = Instantiate(Enemy4, transform.position, Quaternion.identity);

SpawnX = Random.Range(-20, 21);
SpawnY = Random.Range(-10, 1);
Enemy4.transform.Translate(SpawnX, SpawnY, 0);
Enemy4.transform.Translate(0, SpawnY, 0);
Enemy4 = GameObject.Find("Little Orc (31)");
}

if (ChosenEnemy == 5)
{
Enemy5 = Instantiate(Enemy5, transform.position, Quaternion.identity);

SpawnX = Random.Range(-20, 21);
SpawnY = Random.Range(-10, 1);
Enemy5.transform.Translate(SpawnX, SpawnY, 0);
Enemy5.transform.Translate(0, SpawnY, 0);
Enemy5 = GameObject.Find("Little Demon (12)");
}
}
}

The enemies spawn outside the room not on ground which I tagged as Ground and gave it a trigger collider. For some reason though some rooms I made before I wrote this script, the enemies do spawn inside the rooms 100% of the time, but in a room I just created with my tilemap, they spawn outside the room.


Подробнее здесь: https://stackoverflow.com/questions/798 ... -the-rooms
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»