- Home /
How can I fix this so it sends the messages to the game objects with the tag?
hello! I know that questions similar to this have been answered but I am kind of new to C# coding so I don't understand too much on how to fix my code so it sends the messages to the enemies, if you can help me it would be really helpful but here is my code:
public static bool GameIsPaused = false;
public bool isResumed = true;
public GameObject pauseMenuUI;
GameObject[] AIEnemies;
private void Start()
{
AIEnemies = GameObject.FindGameObjectsWithTag("EnemyAI");
}
private void Update()
{
if(Input.GetKeyDown(KeyCode.Escape))
{
if(GameIsPaused)
{
Resume();
}
else
{
Pause();
}
}
}
void PauseandResumeAI ()
{
if(isResumed)
{
foreach (GameObject enemy in AIEnemies)
{
enemy.SendMessage("Pause");
}
}
else if(!isResumed)
{
foreach (GameObject enemy in AIEnemies)
{
enemy.SendMessage("UnPause");
}
}
}
public void Resume ()
{
pauseMenuUI.SetActive(false);
Time.timeScale = 1f;
GameIsPaused = false;
Cursor.visible = false;
Cursor.lockState = CursorLockMode.Locked;
isResumed = true;
GameObject.Find("MainCharacter").SendMessage("EnableHealth");
}
void Pause()
{
pauseMenuUI.SetActive(true);
Time.timeScale = 0f;
GameIsPaused = true;
isResumed = false;
GameObject.Find("MainCharacter").SendMessage("DisableHealth");
}
I would love it if you could help me, thanks!
Answer by _jonathan_ · Jul 28, 2018 at 04:30 AM
I think you might have wanted to get the script on your enemyObjects that contains the SendMessage Method
public static bool GameIsPaused = false;
public bool isResumed = true;
public GameObject pauseMenuUI;
public EnemyObjectScript[] enemyScripts; // The name of your enemyObjects script
private void Start()
{
GameObject[] AIEnemies = GameObject.FindGameObjectsWithTag("EnemyAI");
enemyScripts = new EnemyObjectScript[AIEnemies.Length];
for(var i=0;i<AIEnemies.Length;i++)
{
enemyScripts[i] = AIEnemies.GetComponent<EnemyObjectScript>();
}
}
private void Update()
{
if(Input.GetKeyDown(KeyCode.Escape))
{
if(GameIsPaused)
{
Resume();
}
else
{
Pause();
}
}
}
void PauseandResumeAI ()
{
if(isResumed)
{
foreach (EnemyObjectScript enemy in enemyScripts)
{
enemy.SendMessage("Pause");
}
}
else if(!isResumed)
{
foreach (EnemyObjectScript enemy in enemyScripts)
{
enemy.SendMessage("UnPause");
}
}
}
Hello, I still have a problem, it says that getcomponent can't be used there and also the enemies script is called PausingEnemy.
A $$anonymous$$or problem in the post is this:
for(var i=0;i<AIEnemies.Length;i++)
{
enemyScripts[i] = AIEnemies.GetComponent<EnemyObjectScript>();
}
Ins$$anonymous$$d, it probably should be:
for(var i=0;i<AIEnemies.Length;i++)
{
enemyScripts[i] = AIEnemies[i].GetComponent<EnemyObjectScript>();
}
And, of course, most code posted to you is example, A$$anonymous$$A pseudo code - you'll have to substitue the correct class names
Answer by Skyfall106_Gaming · Jul 29, 2018 at 03:14 PM
Try this. Haven’t tested it so idk
void PauseandResumeAI ()
{
if(isResumed == true)
{
foreach (GameObject enemy in AIEnemies)
{
enemy.SendMessage("Pause");
}
}
else if(isResumed == false)
{
foreach (GameObject enemy in AIEnemies)
{
enemy.SendMessage("UnPause");
}
}
}