Как я могу добавить объекты, на которые воздействует raycast в unity, и добавить их в список

#c# #list #unity3d #raycasting

Вопрос:

У меня есть проблема, которую я просто не могу понять, как решить. Я пытаюсь создать игру в 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"));
        }
    }
}
}
 

Ответ №1:

использовать

 playersTagged.Add(hit.collider.gameObject);
 

Ответ №2:

Вместо использования GameObject.FindWithTag (), который возвращает первый объект, который он найдет.

Используйте свойство gameobject с тегами игроков.Добавить(target.gameobject). Поскольку все компоненты хранят ссылку на игровой объект, к которому они прикреплены.

Ответ №3:

Вы добавляете GameObject.FindWithTag("Taggable") , что означает, что вы получаете любой игровой объект с этим тегом и добавляете его в список. Но вместо этого вы хотите добавить объект попадания, поэтому вам нужно добавить hit.collider.gameObject .

Комментарии:

1. you are getting all GameObjects .. нет, только всегда первый 😉 вы не можете Add добавить несколько элементов в список без использования AddRange 😉

2. ты прав @derHugo. Отредактировано!