Учу общаться скрипты между собой.
Теперь расчёт размера сетки в сцене боя
ведётся исходя из уровня угрозы монстра.
Уровень угрозы закреплён в переменной
внутри скрипта привязанного к монстру.
Там целая сеть прогонов через несколько скриптов,
узнав уровень угрозы, выбираем размер сетки:
//Уровень угрозы
public int ThreatLevel;
void Start()
{
//Уровень угрозы монстра с которым мы столкнулись
ThreatLevel = Clash.ThreatLevel;
//расчёт размера сетки исходя из уровня угрозы
if (ThreatLevel == 1)
{
SetkaScaleZ = 10;
SetkaScaleX = 10;
}
if (ThreatLevel == 2)
{
SetkaScaleZ = 12;
SetkaScaleX = 12;
}
if (ThreatLevel == 3)
{
SetkaScaleZ = 16;
SetkaScaleX = 16;
}
if (ThreatLevel == 4)
{
SetkaScaleZ = 20;
SetkaScaleX = 20;
}
if (ThreatLevel == 5)
{
SetkaScaleZ = 24;
SetkaScaleX = 24;
}
if (ThreatLevel == 6)
{
SetkaScaleZ = 30;
SetkaScaleX = 30;
}
if (ThreatLevel == 7)
{
SetkaScaleZ = 100;
SetkaScaleX = 100;
}
Так же мы узнаём какой конкретно монстр на нас напал, чтобы его создать.
Но создаём пока не его. Всё пока сыро, но работает. В данный момент чтобы реализовать
данную задачу двумя параметрами (MonsterNumber, ThreatLevel) обмениваются пять скриптов:
скрипт отвечающий за характеристики монстра, скрипт работающий с его триггером,
статичный глобальный скрипт получающий информацию с кем сталкиваемся,
скрипт создающий сетку, скрипт создающий монстров на сетке.
Скрипт с параметрами монстра, прикреплён к ассету монстра:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MonsterInfo : MonoBehaviour
{
public int MonsterNumber = 1; //Порядковый номер монстра
public int ThreatLevel = 1; //Уровень угрозы монстра
}
Скрипт контроллирующий триггер монстра, который при столкнвоении с игроком
перекидывает нас на сцену боя.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class Monster1trigger : MonoBehaviour
{
public int MonsterNumber; //Порядковый номер монстра
public int ThreatLevel; //Уровень угрозы монстра
public MonsterInfo MI; //Скрипт монстра MonsterInfo
public GameObject Contacter;
private void Start()
{
Contacter.GetComponent<MeshRenderer>().enabled = false;
gameObject.layer = LayerMask.NameToLayer("Ignore Raycast");
MonsterNumber = MI.MonsterNumber; // Получаем порядковый номер монстра из скрипта MonsterInfo
ThreatLevel = MI.ThreatLevel; // Получаем уровень угрозы монстра из скрипта MonsterInfo
}
void OnTriggerEnter(Collider Contacter)
{
if (Contacter.tag == "Player")
{
Clash.MonsterNumber = MonsterNumber; //Записываем в скрипт Clash порядковый номер монстра
Clash.ThreatLevel = ThreatLevel; //Записываем в скрипт Clash уровень угрозы монстра
Debug.Log("Персонаж вошёл в триггер монстра");
SceneManager.LoadScene("Fight");
}
}
}
Глобальный статичный независимый скрипт, который принимает параетры
монстра после столкновения игрока с его триггером
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public static class Clash
{
public static int MonsterNumber = 0; //Порядковый номер монстра столкнувшегося с игроком
public static int ThreatLevel = 0; //Уровень угрозы монстра столкнувшегося с игроком
}
Это пока заготовка скрипта создающего монстра на сетке.
Скрипт уже знает с каким монстром он столкнулся,
но создаётся всё равно пока ещё единственный дефолтный.
Скоро сделаю, чтобы создавался конкретно тот с кем столкнулись,
и нужно сделать чтобы его создавало в правой части сетки в конце посередине,
там мы будем в зависимости от уровня угрозы, расчитывать размер сетки, и искать середину.
public class BotMonsterCreator : MonoBehaviour
{
public GameObject MonsterFight1; // Ассет монстра MonsterFight1
public int MonsterNumber; // Порядковый номер монстра
// Start is called before the first frame update
void Start()
{
MonsterNumber = Clash.MonsterNumber; // Получаем порядковый монстр столкнувшегося с игроком монстра из скрипта Clash
}
// Update is called once per frame
void Update()
{
if (MonsterNumber > 0)
{
Instantiate(MonsterFight1, new Vector3(1.5f, 0, 2.5f), Quaternion.identity);
MonsterNumber = 0;
}
}
}