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);
}
}