我如何添加光线投射统一命中的对象并将它们添加到列表中
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
.
我有这个问题,但我不知道如何解决。 我正在尝试在 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
.