我如何添加光线投射统一命中的对象并将它们添加到列表中

How do i add the objects that the raycast is hitting in unity and add them to a list

我有这个问题,但我不知道如何解决。 我正在尝试在 Unity 中制作游戏,但我偶然发现了这样一个问题。

当我用光线投射击中它时,我想将场景中的对象放入列表中。

到目前为止我已经尝试过。当我在其中一个对象上按下鼠标按钮时,它要么将所有标记为相同事物的东西都放在列表中,要么它只放入相同的事物(本例中为立方体)。

我的代码是:

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

public class PlayerTagged : MonoBehaviour
{
public float damage = 10f;
public float range = 100f;

public Camera fpsCam;

public List<GameObject> playersTagged;

private void Update()
{
    if (Input.GetButtonDown("Fire1"))
    {
        Shoot();
    }
}

void Shoot()
{
    RaycastHit hit;

    if (Physics.Raycast(fpsCam.transform.position, fpsCam.transform.forward, out hit, range))
    {
        Debug.Log(hit.transform.name);
        Target target = hit.transform.GetComponent<Target>();

        if (target != null)
        {
            target.takeDamage(damage);
            if(hit.collider.tag == "Taggable")
            playersTagged.Add(GameObject.FindWithTag("Taggable"));
        }
    }
}
}

而不是使用 GameObject.FindWithTag() 哪个 returns 它会找到第一个对象 source

使用游戏对象属性playersTagged.Add(target.gameobject)。由于所有组件都存储对它们所附加的游戏对象的引用。

使用

playersTagged.Add(hit.collider.gameObject);

您正在添加 GameObject.FindWithTag("Taggable"),这意味着您正在获取任何具有该标签的游戏​​对象并将其添加到列表中。但是相反,您想添加命中对象,因此您需要添加 hit.collider.gameObject.