Unity中OnTriggerEnter触发后物体变大且无法传送的问题
Unity碰撞传送问题解答
1. 物体尺寸变大的原因
代码里的transform.SetParent(Globals.ornamentsCreationPoint.transform, false)是核心问题。参数false的作用是强制让子物体保持当前的世界空间位置/旋转/缩放,但如果Globals.ornamentsCreationPoint本身带有非(1,1,1)的缩放,Unity会自动计算子物体的本地缩放来抵消父物体的缩放影响,最终导致物体视觉尺寸异常变大或变形。而且你的需求根本不需要设置父物体,这步属于多余操作。
2. 正确实现碰撞传送的代码
直接删掉设置父物体的冗余代码,只保留位置赋值即可。如果不需要给物体动态添加刚体,那行代码也可以移除:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class OuterBordersCollider : MonoBehaviour { private void OnTriggerEnter(Collider other) { // 直接设置世界空间位置,完成传送 other.transform.position = Globals.ornamentsCreationPoint.transform.position; // 如果不需要给物体添加刚体,删除下面这行 // other.gameObject.AddComponent<Rigidbody>(); } }
额外注意事项
- 确认
Globals.ornamentsCreationPoint的引用已正确赋值,在Inspector中检查该变量不能为空。 - 触发碰撞的前提要满足:边界墙的Collider需勾选
Is Trigger,物体A必须带有Rigidbody(若边界墙是静态物体),否则OnTriggerEnter不会被触发。 - 如果确实需要将物体设为
Globals.ornamentsCreationPoint的子物体,避免缩放异常的写法如下:other.transform.SetParent(Globals.ornamentsCreationPoint.transform); other.transform.localScale = Vector3.one; // 重置本地缩放为默认大小 other.transform.localPosition = Vector3.zero; // 将物体放在父物体原点
内容的提问来源于stack exchange,提问作者Yordan Yanakiev
相关产品推荐
相关产品推荐

