Понедельник, 11 Ноября 2024, 03:47

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Получить данные через скрипт, после его поиска [решено]
MrBILLДата: Пятница, 08 Марта 2019, 18:03 | Сообщение # 1
частый гость
Сейчас нет на сайте
Добрый день. Столкнулся с проблемой...
Имеется 2 кода:
Код
public class MoveInput : MonoBehaviour
{

    public Transform Pointer;
    public PlayerClickMovement PlayerClickMovement_;
    public float minMovRange;
    public SpriteRenderer cursor;
    public GameObject Target;  

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Mouse0))
        {

            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit, 100))
            {
                if (hit.collider.tag == "Terrain")
                {
                    Debug.DrawLine(ray.origin, hit.point);
                    Pointer.position = new Vector3(hit.point.x, Pointer.position.y, hit.point.z);

                    if (Vector3.Distance(Pointer.position, PlayerClickMovement_.transform.position) > minMovRange)
                    {
                        PlayerClickMovement_.moving = true;
                        cursor.enabled = true;
                    }
                }

                if (hit.collider.tag == "Enemy")
                {
                    Debug.Log("ВОТ И ВРАГ!");
                    Target = hit.collider.gameObject;
                    
                }
            }
        }

        

    }


Если нажата левая кнопка мыши ,и она попала на террейн - устанавливаем 2д спрайт , и персонаж направляется в его сторону.
Если попадаем не в террейн, а в противника (enemy) , то он берется в "таргет".

Скрипт который есть на enemy:
Код
public class Enemy : MonoBehaviour
{

    public GameObject player;
    public MainStats MainStats;
    NavMeshAgent nav;
    [Header("Входящий урон от посохоа")]
    public float DMGStaff;
    [Header("Входящий урон от арбалета")]
    public float DMGCrossbow;
    [Header("Дистанция до player")]
    public float dist;
    [Header("Дистанция агро")]
    public float agro_radius = 15;
    [Header("Здоровье")]
    public float Health;
    [Header("Имя")]
    public string Enemy_name;
    [Header("Спокойствие")]
    public bool Idle = true;    
    
   

    void Start()
    {
        DMGStaff = MainStats.DamageStaff;   // Урон от посоха
        DMGCrossbow = MainStats.DamageCrossbow; // Урон с арбалета
        //Health = 20; // ХП
        nav = GetComponent<NavMeshAgent>();

    }

    void Death()
    {
        Destroy(gameObject);
    }

   
    void Update()
    {
        player = GameObject.FindGameObjectWithTag("Player"); // Назначаем Игрока
        dist = Vector3.Distance(player.transform.position, transform.position); // Дистанция до игрока

        if (!Idle & dist > agro_radius) // Близко нет игрока - включается скрипт с патрулированием
        {            
            gameObject.GetComponent<Enemy_patrol>().enabled = true; // включает патрулирование
        }

        if (!Idle & dist < agro_radius & dist > 4) // Игрок в зоне агро, но не в зоне атаки. Бежать за игроком
        {
            gameObject.GetComponent<Enemy_patrol>().enabled = false; // выключает патрулирование
            nav.enabled = true; // начинает движение
            nav.SetDestination(player.transform.position); // в сторону игрока
            gameObject.GetComponent<Animator>().SetBool("Run", true); // включает анимацию бега
        }

        if (!Idle & dist < 4)
        {
            gameObject.GetComponent<Animator>().SetTrigger("Attack"); // Игрок в зоне атаки. Атаковать.
            nav.enabled = false; // останавливает движение
        }

        if (Idle)
        {
            gameObject.GetComponent<Enemy_patrol>().enabled = false; // выключает патрулирование
            gameObject.GetComponent<Animator>().SetBool("Run", false); // выключает бег
            gameObject.GetComponent<Animator>().SetTrigger("Idle"); // включает анимацию покоя
            nav.enabled = false; // останавливает движение
            
        }
       

        if (Health <= 0)
        {
            Death();
        }
        return;
    }

    void OnTriggerEnter(Collider other)
    {
        if (other.tag == "Crossbow_strela_trigger")
        {
            Health = Health - DMGCrossbow; // Если в коллайдер попал арбалет - минус ХП ( количество ХП берется из скрипта MainStats )
        }
        if (other.tag == "Staff_trigger")
        {
            Health = Health - DMGStaff; // Если в коллайдер попал посох - минус ХП ( количество ХП берется из скрипта MainStats )
        }
    }

}


Необходимо получить инфу из таргета... Enemy_name , в последствии еще уровень , мб какие-то статы, и закинуть это в канвас. Канвас планирую включать выключать в зависимости от того есть ли таргет.
Грубо говоря:
Таргета нет, канвас выключен , тыкаем по террейну - перемещаемся. Тыкаем на противника , он взялся в таргет, включился канвас и взял с таргета необходимую инфу, которую сразу вывел на экран. Тыкнули опять на экран , таргет сбросился - канвас выключился.
Гуглю второй день, ничего не могу найти =( Не могу получить в скрипте ссылку на таргет, который нахожу через hit.collider.tag.
Может что-то другое посоветуете ?


Сообщение отредактировал MrBILL - Пятница, 08 Марта 2019, 22:01
drcrackДата: Пятница, 08 Марта 2019, 19:08 | Сообщение # 2
старожил
Сейчас нет на сайте
hit.collider.GetComponent<Enemy>().Enemy_name

Сообщение отредактировал drcrack - Пятница, 08 Марта 2019, 19:09
MrBILLДата: Пятница, 08 Марта 2019, 19:15 | Сообщение # 3
частый гость
Сейчас нет на сайте
Цитата drcrack ()
hit.collider.GetComponent<Enemy>().Enemy_name


Огромное спасибо! Все гениальное просто =)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг