Тема: I.D.S. MONSTERS
Показать сообщение отдельно
Старый 22.03.2020, 23:41   #72
Crystal
Терабайт исходников
 
Аватар для Crystal
 
Регистрация: 05.07.2007
Сообщений: 5,196
Написано 1,721 полезных сообщений
(для 5,374 пользователей)
Ответ: I.D.S. MONSTERS

Учу общаться скрипты между собой.
Теперь расчёт размера сетки в сцене боя
ведётся исходя из уровня угрозы монстра.
Уровень угрозы закреплён в переменной
внутри скрипта привязанного к монстру.
Там целая сеть прогонов через несколько скриптов,
узнав уровень угрозы, выбираем размер сетки:

    //Уровень угрозы
    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;
        }
    }
}
__________________
Проект "Deathbring World - Rangers" и его финансовая поддержка:
https://boosty.to/deathbringrangers

Я на - TWITCH
Канал на YouTube
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Crystal за это полезное сообщение:
ABTOMAT (23.03.2020), Randomize (23.03.2020)