子对象无法将游戏对象添加到其父对象(子对象通过 trigger-collider 获取对象)
Posted
技术标签:
【中文标题】子对象无法将游戏对象添加到其父对象(子对象通过 trigger-collider 获取对象)【英文标题】:A child object cant add a gameobject to his parent (child gets the object with trigger-collider) 【发布时间】:2022-01-19 21:52:12 【问题描述】:嗨,
我的 2d unity 项目有问题。
我的目标是什么:
我想要一个带有额外碰撞器的玩家。这个 Collider 应该将每个带有“Stone”标签的游戏对象放在一个列表中。
我尝试了什么:
我创建了另一个对象,它是我的播放器对象的子对象。 子对象有一个圆形 2d 对撞机(设置为触发器),应该将所有带有“石头”标签的东西放在其父对象的游戏对象列表中。当我撞到一块石头时,这给了我一个错误(有关更多详细信息,请参见下文)。 然后我尝试将它放在子对象的列表中并且它起作用了。我无法真正想象为什么它适用于孩子而不是父母。
这里是脚本:
stompRadiusCollScript(child) 的相关部分:
public class stompRadiusCollScript : bendingScript
private GameObject parent;
private List<GameObject> colls;
void Start()
colls = new List<GameObject>();
parent = base.gameObject;
private void OnTriggerEnter2D(Collider2D givenCollider)
if (givenCollider.tag == "Stone")
GameObject co = givenCollider.gameObject;
//is able to add in Child List
colls.Add(co);
//cannot add in parent list
//throws error
currCollisions.Add(co);
错误信息是什么:
NullReferenceException: Object reference not set to an instance of an object
stompRadiusCollScript.OnTriggerEnter2D (UnityEngine.Collider2D givenCollider)
bendingScript(parent)的相关代码:
public class bendingScript : MonoBehaviour
protected List<GameObject> currCollisions;
public Collider2D coll;
private System.DateTime _lastTimeStompAttack;
private float _stompAttackMinDelayInMs = 500f;
private float _forceForStone = 100f;
void Start()
currCollisions = new List<GameObject>();
coll = GetComponent<CircleCollider2D>();
_lastTimeStompAttack = DateTime.UtcNow;
附加信息:
带有石头标签的对象有一个刚体2d和一个circlecollider2d问题:
我如何将我所有的石头碰撞作为游戏对象放在父级列表中(bendingScript)?
【问题讨论】:
您没有在stompRadiusCollScript
中初始化currCollisions
,因为bendingScript.Start
是隐藏的。这回答了你的问题了吗? How to correctly inherit Unity's callback functions like Awake(), Start() and Update and FixedUpdate()?
### 这解决了一个问题。谢谢。但我以某种方式创建了 2 个对象,并以这种方式创建了 2 个单独的列表。孩子有另一个列表而不是父母。 ###### 我在父项中添加的内容:protected virtual void Start()
###### 我在子项中添加的内容:protected override void Start() base.Start;
我有点知道继承在控制台应用程序上的作用,但它是如何实现的在这里工作?据我所知,孩子是父母的高级版本,那么我怎么能只在世界上添加孩子呢?还是我误会了什么?
【参考方案1】:
您可以将列表保留在子对象中,然后在需要时访问子对象,而不是在父对象中拥有一个列表。
【讨论】:
您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。以上是关于子对象无法将游戏对象添加到其父对象(子对象通过 trigger-collider 获取对象)的主要内容,如果未能解决你的问题,请参考以下文章