Добрый день. Столкнулся с проблемой...
Имеется 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.
Может что-то другое посоветуете ?