我将如何允许我在运行时使用 OnCollisionEnter2D 更改对象的标签
Posted
技术标签:
【中文标题】我将如何允许我在运行时使用 OnCollisionEnter2D 更改对象的标签【英文标题】:how would i go about allowing me to change the tag of an object on runtime with OnCollisionEnter2D 【发布时间】:2021-12-01 10:09:44 【问题描述】:private void OnCollisionEnter2D(Collision2D collision)
while (onWeapon == false && collision.gameObject.tag == "Weapon")
onWeapon = true;
if (onWeapon == true && Input.GetKey(KeyCode.E))
currentPos = gameObject.transform.position;
collision.transform.position = currentPos;
collision.transform.parent = player.transform;
collision.tag = "WeaponHeld";
我无法在运行时使用“OnEnterCollision2D”更改对象标签,但是当我使用“OnTriggerEnter2D”时,同一行工作正常
【问题讨论】:
你在统一编辑器中定义了“WeaponHeld”标签吗? 是的 WeaponHeld 已经是编辑器中的一个标签,这不是问题,collision.tag 本身中的“标签” 哦我明白了,因为collision2d不继承自组件,所以你不能直接访问标签。但您可以访问转换。然后你可以像这样从变换中获取标签。 collision.transform.tag = "WeaponHeld"; 当你尝试改变游戏对象的标签而不是直接在碰撞中做时,它仍然不起作用? 【参考方案1】:首先,您的while
循环有什么用处?无论如何,只有一次迭代,所以就让它吧
if(!onWeapon && collision.gameObject.CompareTag("Weapon"))
onWeapon = true;
那么Collision2D
就是一个数据容器struct,里面有关于碰撞的具体数据,它本身没有标签。
你碰撞的gameObject
有
collision.gameObject.tag = "WeaponHeld";
或者因为你使用的是transform
,你也可以使用那个
var otherTransform = collision.transform;
otherTransform.position = currentPos;
otherTransform.parent = player.transform;
otherTransform.tag = "WeaponHeld";
因为它也有属性tag
转发到相应的gameObject.tag
。
为什么它在
OnTriggerEnter2D
中有效?
因为作为参数,您不会获得Collision2D
结构,而是Collider2D
组件引用。
正如刚才提到的Transform
,基类Component
具有属性tag
,它基本上只是转发给相应的gameObject.tag
(参见source code)。 p>
【讨论】:
以上是关于我将如何允许我在运行时使用 OnCollisionEnter2D 更改对象的标签的主要内容,如果未能解决你的问题,请参考以下文章