не работает урон пули по врагу

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

не работает урон пули по врагу

Сообщение Agness_Rudolf 29 июл 2023, 12:47

делал проект на unity уже создал врага игрока анимации пули пушку но когда начал делать урон начались проблемы, у меня не снимается hp с противника, как 100 стоит, так и остается я уже пробовал через OnCollisionEnter, и через TakeDamage не помогает, по задумке я бы мог в скрипте пули сослаться на переменную Hp(здоровье противника) через GetComponent<enemy_script>().TakeDamage (Hp) то есть я бы сослался на переменную Hp и тогда я бы из Hp отнял мою переменную damageBullet
то есть:
GetComponent<enemy_script>().TakeDamage (Hp)
Hp -= damageBullet;
но выдает такую ошибку что Hp не существует в данном контексте
я также попробовал через OnCollisionEnter:
public void OnCollisionEnter (Collision collision)
{
if (collision.gameObject.tag == "bullet")
{
Hp -= 25;
}
}
этот способ посмотрел в интернете, как я понял если тэг объекта будет "bullet" то будет вычитаться из Hp 25 ед урона но когда я попадаю по врагу ничего не происходит, можете пофиксить имеющиеся строки или создать собственную? мой скрипты это bullet и enemy_script могу скинуть их
Agness_Rudolf
UNец
 
Сообщения: 6
Зарегистрирован: 29 июл 2023, 12:29

Re: не работает урон пули по врагу

Сообщение 1max1 29 июл 2023, 14:40

Учитесь использовать логи, сразу многое проясняет https://docs.unity3d.com/ScriptReference/Debug.Log.html
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: не работает урон пули по врагу

Сообщение Alkos26Rus 29 июл 2023, 15:47

Agness_Rudolf писал(а): могу скинуть их

С этого надо было начинать, тут вряд ли кто будет писать готовые скрипты с нуля
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1642
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: не работает урон пули по врагу

Сообщение Agness_Rudolf 29 июл 2023, 16:24

скрипт врага:
using JetBrains.Annotations;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class enemy_script : MonoBehaviour
{

public Animator animator;
public Slider healthBar;
public int Hp;



void Start()
{

}


void Update()
{

}
public void TakeDamage(int Hp)
{
if (Hp <= 0)
{
animator.SetTrigger("death");
GetComponent<Collider>().enabled = false;
healthBar.gameObject.SetActive(false);
}
else
{
animator.SetTrigger("damage");
}



}
public void OnCollisionEnter (Collision collision)
{
if (collision.gameObject.tag == "bullet")
{
Hp -= 25;
}
}

}
скрипт пули:
using OpenCover.Framework.Model;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class bullet : MonoBehaviour
{
private float bulletLife = 3;
public int damageBullet = 25;


void Awake()
{
Destroy(gameObject, bulletLife);
}
public void Update ()
{


}

}
Agness_Rudolf
UNец
 
Сообщения: 6
Зарегистрирован: 29 июл 2023, 12:29

Re: не работает урон пули по врагу

Сообщение Alkos26Rus 29 июл 2023, 17:01

Синтаксис:
Используется csharp

public void TakeDamage(int _damage)
{
Hp -= _damage;

if (Hp <= 0)
{
animator.SetTrigger("death");
GetComponent<Collider>().enabled = false;
healthBar.gameObject.SetActive(false);
}
else
{
animator.SetTrigger("damage");
}



}
public void OnCollisionEnter (Collision collision)
{
Debug.Log("Collision ");
if (collision.gameObject.tag == "bullet")
{
Debug.Log("Damage");
TakeDamage(25);
}
}


 

Аргумент функции не называй так же как поле в классе. Ставь дебаг при столкновении. Дальше смотри если срабатывает Debug.Log("Collision "); значит есть какое то столкновение. Если срабатывает Debug.Log("Damage"); значит все работает, если нет - либо тэг не правильный, либо объект коллизии не имеет такого тэга, а например родительский объект.

Да, потом при вызове дамага бери значение урона из пули, гет компонентом, просто сначала разберись идет ли вобще урон
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1642
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: не работает урон пули по врагу

Сообщение Agness_Rudolf 31 июл 2023, 15:27

Alkos26Rus писал(а):
Синтаксис:
Используется csharp

public void TakeDamage(int _damage)
{
Hp -= _damage;

if (Hp <= 0)
{
animator.SetTrigger("death");
GetComponent<Collider>().enabled = false;
healthBar.gameObject.SetActive(false);
}
else
{
animator.SetTrigger("damage");
}



}
public void OnCollisionEnter (Collision collision)
{
Debug.Log("Collision ");
if (collision.gameObject.tag == "bullet")
{
Debug.Log("Damage");
TakeDamage(25);
}
}


 

Аргумент функции не называй так же как поле в классе. Ставь дебаг при столкновении. Дальше смотри если срабатывает Debug.Log("Collision "); значит есть какое то столкновение. Если срабатывает Debug.Log("Damage"); значит все работает, если нет - либо тэг не правильный, либо объект коллизии не имеет такого тэга, а например родительский объект.

Да, потом при вызове дамага бери значение урона из пули, гет компонентом, просто сначала разберись идет ли вобще урон

Попробовал, сделал также как и у вас, вышло сообщение
Collision
UnityEngine.Debug:Log (object)
enemy_script:OnCollisionEnter (UnityEngine.Collision) (at Assets/enemy_script.cs:42)
UnityEngine.Physics:OnSceneContact (UnityEngine.PhysicsScene,intptr,int)
пишет Debug.Log (object), а урон не вычитывается из 100, хотелось бы уточнить, в скрипте пули надо указывать переменную урона как damage или же как в TakeDamage (int _damage) ну то есть записать _damage? ну и нужно ли что то еще вписывать в скрипт пули ( он называется bullet я его скидывал вместе с скриптом врага) ну и еще может вам поможет скрипт оружия, так как я делал стрельбу по RayCast

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

public class weapons : MonoBehaviour
{
public GameObject bullet;
public Camera mainCamera;
public Transform spawnBullet;
private float timeInShot = 0f ;


public float shootForce;
public float spread;
void Update()
{
if (Input.GetMouseButton(0))
{
if (timeInShot == 0)
{
Shoot();
}
timeInShot += Time.deltaTime;
if (timeInShot > 0.1f)
{
timeInShot = 0;
}

}
else
{
timeInShot = 0;
}

}
private void Shoot()
{
Ray ray = mainCamera.ViewportPointToRay(new Vector3(0.5f, 0.5f, 0));
RaycastHit hit;

Vector3 targetPoint;
if (Physics.Raycast(ray, out hit))
targetPoint = hit.point;
else
targetPoint = ray.GetPoint(75);

Vector3 dirWithoutSpread = targetPoint - spawnBullet.position;
float x = Random.Range(-spread, spread);
float y = Random.Range(-spread, spread);

Vector3 dirWithSpread = dirWithoutSpread + new Vector3(x, y, 0);

GameObject currentBullet = Instantiate(bullet, spawnBullet.position, Quaternion.identity);

currentBullet.transform.forward = dirWithoutSpread.normalized;

currentBullet.GetComponent<Rigidbody>().AddForce(dirWithSpread.normalized * shootForce, ForceMode.Impulse);

}
}
Agness_Rudolf
UNец
 
Сообщения: 6
Зарегистрирован: 29 июл 2023, 12:29

Re: не работает урон пули по врагу

Сообщение Agness_Rudolf 31 июл 2023, 15:35

срабатывает скрипт и проходит урон, решил я это тем, что поставил коллидер на пулю, урон заходит, но враг падает как только хп на нуле, насколько я понял потому что коллайлер и healthBar отключаются
Agness_Rudolf
UNец
 
Сообщения: 6
Зарегистрирован: 29 июл 2023, 12:29


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 31