#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. Отредактировано!