Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

ОШИБКА ЮНИТИ ВРАГ НЕ СТРЕЛЯЕТ В ИГРОКА

hgh gffd Ученик (89), на голосовании 8 месяцев назад
Что делать, я написал код чтобы вражеская пуля летела именно в игрока указал на префаб пули что это вражеская пуля, но пушка не поворачивает и не стреляет в сторону игрока, а просто стреляет вниз
код пули:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Bullet : MonoBehaviour
{
public float speed;
public float lifetime;
public float distance;
public int damage;
public LayerMask whatIsSolid;

[SerializeField] bool enemyBullet;

private void Start()
{
Invoke("DestroyBullet", lifetime);
}

private void Update()
{
RaycastHit2D hitInfo = Physics2D.Raycast(transform.position, transform.up, distance, whatIsSolid);
if(hitInfo.collider != null)
{
if(hitInfo.collider.CompareTag("Enemy"))
{
hitInfo.collider.GetComponent<Enemy>().TakeDamage(damage);
}
if(hitInfo.collider.CompareTag("Player") && enemyBullet)
{
hitInfo.collider.GetComponent<Player>().ChangeHealth(-damage);
}
DestroyBullet();
}
transform.Translate(Vector2.up * speed * Time.deltaTime);
}
public void DestroyBullet()
{
Destroy(gameObject);
}
}
Голосование за лучший ответ
Sergio 2.1 Оракул (67423) 9 месяцев назад
 using UnityEngine; 

public class Bullet : MonoBehaviour
{
public float speed;
public float lifetime;
public float distance;
public int damage;
public LayerMask whatIsSolid;

private Transform player; // Ссылка на игрока
private Vector2 target; // Цель, куда должна лететь пуля

[SerializeField] bool enemyBullet;

private void Start()
{
Invoke("DestroyBullet", lifetime);

if(enemyBullet)
{
// Найти игрока на сцене (убедитесь, что у объекта игрока есть тег "Player")
player = GameObject.FindGameObjectWithTag("Player").transform;
// Вычислить вектор направления на игрока
target = (player.position - transform.position).normalized;
}
}

private void Update()
{
RaycastHit2D hitInfo = Physics2D.Raycast(transform.position, transform.up, distance, whatIsSolid);
if(hitInfo.collider != null)
{
if(hitInfo.collider.CompareTag("Enemy"))
{
hitInfo.collider.GetComponent().TakeDamage(damage);
}
if(hitInfo.collider.CompareTag("Player") && enemyBullet)
{
hitInfo.collider.GetComponent().ChangeHealth(-damage);
}
DestroyBullet();
}

// Перемещать пулю в направлении цели, если она вражеская
if (enemyBullet && target != Vector2.zero)
{
transform.up = target; // повернуть пулю к цели
transform.position = Vector2.MoveTowards(transform.position, player.position, speed * Time.deltaTime);
}
else // если это не вражеская пуля, она продолжит движение вверх
{
transform.Translate(Vector2.up * speed * Time.deltaTime);
}
}

public void DestroyBullet()
{
Destroy(gameObject);
}
}

Обратите внимание на то, что скрипт теперь ищет объект игрока и сохраняет вектор направления от пули к игроку. В методе Update, если переменная enemyBullet установлена в true, пуля будет повернута и двинется в сторону игрока, иначе она продолжит движение вверх как раньше. Убедитесь, что у игрока есть тег "Player", чтобы его можно было обнаружить с помощью GameObject.FindGameObjectWithTag.
hgh gffdУченик (89) 9 месяцев назад
СПАСИБО ОГРОМНОЕ!!!
hgh gffdУченик (89) 9 месяцев назад
Только мне нужно чтобы он просто стрелял в сторону игрока, а не преследовал.
hgh gffdУченик (89) 9 месяцев назад
скажите пожалйуста как это сделать
Sergio 2.1 Оракул (67423) hgh gffd, https://pastebin.com/JJp4AWjL
Пользователь Знаток (323) 9 месяцев назад
А зачем велосипед изобретать? Можно же готовое все скачать
Похожие вопросы