提问人:kraken 提问时间:9/27/2023 最后编辑:kraken 更新时间:9/28/2023 访问量:39
我的子弹使用光线投射来检测它们在物理更新中遗漏的所有内容,但不会造成伤害
my bullets use raycasts to detects everything they miss in a physics update but it doesnt do damage
问:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using System.Threading;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.Rendering.Universal.Internal;
using static UnityEngine.GraphicsBuffer;
public class Bullet : MonoBehaviour
{
[Header("References")]
[SerializeField] private Rigidbody2D rb;
[Header("Attributes")]
[SerializeField] private float BulletSpeed = 10f;
[SerializeField] private LayerMask Enemies;
public Transform target;
public Transform StartPoint;
public int Damage;
public float ProjecDistance;
public int Pierce;
private int Pierced = 0;
private List<int> HitName = new List<int>();
private void EnemyHit(RaycastHit2D Hits)
{
Hits.collider.gameObject.GetComponent<EnemyMovement>().Damage(Damage);
HitName.Add(Hits.collider.gameObject.GetComponent<EnemyMovement>().GetInstanceID());
Pierced += 1;
}
void Start()
{
Vector2 direction = (target.position - transform.position).normalized;
Vector2 vector = new Vector2(direction.x, direction.y).normalized;
rb.velocity = vector * BulletSpeed;
RaycastHit2D[] Hits = Physics2D.RaycastAll(transform.position, transform.forward, rb.velocity.magnitude * Time.deltaTime, Enemies);
for (int i = 0; i < Hits.Length; i++)
{
if (Pierced >= Pierce)
{
Destroy(gameObject);
}
if (HitName == null || !HitName.Contains(Hits[i].collider.gameObject.GetComponent<EnemyMovement>().GetInstanceID()))
{
EnemyHit(Hits[i]);
}
}
}
private void Update()
{
if (Vector2.Distance(StartPoint.position, transform.position) >= ProjecDistance)
{
Destroy(gameObject);
}
}
void FixedUpdate()
{
RaycastHit2D[] Hits = Physics2D.RaycastAll(transform.position, transform.forward, rb.velocity.magnitude * Time.deltaTime, Enemies);
for (int i = 0; i < Hits.Length; i++)
{
Debug.Log(Hits[i]);
if (Pierced >= Pierce)
{
Destroy(gameObject);
}
if (HitName == null || !HitName.Contains(Hits[i].collider.gameObject.GetComponent<EnemyMovement>().GetInstanceID()))
{
EnemyHit(Hits[i]);
}
}
}
}
我试过将光线投射设置为无限长度,但它仍然不会对它应该击中的预制敌人造成伤害,所以我正在做的光线投射或我使用光线投射检测游戏对象的方式有问题。 我不知道还能如何制造出既能穿透又能快速移动的子弹,现在我的子弹速度是 50。
此外,所有值在初始化时都分配给项目符号
答: 暂无答案
评论
target.position - transform.position
transform.forward
rb.velocity.magnitude * Time.deltaTime
0.017 * BulletSpeed
EnemyMovement
collider.gameObject
HitName == null
null
OnCollisionEnter2D
OnTriggerEnter2D