You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 11:20:32