如何重置所有挂载PhysicsObjects脚本的物体至初始位置?
批量重置所有挂载PhysicsObjects的物体
直接使用Unity的FindObjectsOfType(旧版本)或FindObjectsByType(Unity 2022.3+)方法,一次性获取场景中所有挂载PhysicsObjects脚本的组件实例,再遍历调用它们的ResetObjects方法即可实现批量重置。
修改后的测试脚本代码
// 替换原单个组件引用,改为数组存储所有目标组件 private PhysicsObjects[] allPhysicsObjects; private void Start() { // 获取场景中所有激活状态的PhysicsObjects组件 // Unity 2022.3及以上推荐使用FindObjectsByType allPhysicsObjects = FindObjectsByType<PhysicsObjects>(FindObjectsSortMode.None); // 旧版本Unity请使用下面这句: // allPhysicsObjects = FindObjectsOfType<PhysicsObjects>(); } // 批量重置方法 public void ResetAllPhysicsObjects() { foreach (var physicsObj in allPhysicsObjects) { physicsObj.ResetObjects(); } } // 调用示例(可绑定到按钮点击、快捷键或其他触发逻辑) // ResetAllPhysicsObjects();
补充说明
- 如果需要包含场景中非激活状态的物体,调用时传入对应参数:
// Unity 2022.3+ allPhysicsObjects = FindObjectsByType<PhysicsObjects>(FindObjectsInactive.Include, FindObjectsSortMode.None); // 旧版本Unity allPhysicsObjects = FindObjectsOfType<PhysicsObjects>(true); - 若场景物体数量极大,建议在初始化时缓存结果,避免频繁调用
FindObjects系列方法影响性能。
内容的提问来源于stack exchange,提问作者Okashi
相关产品推荐
相关产品推荐

