Unity新手求助:玩家触碰食物后增大体积及调整相机的实现方法
玩家吃食物体积不增大+顶视角相机适配解决方案
1. 修复玩家体积缩放逻辑
你当前的代码仅累加了growth变量,但未将其应用到玩家的Scale属性上。直接修改Transform的Scale即可实现体积增长,建议等比例缩放避免模型变形:
// 可在Inspector面板调整的参数 public float baseScale = 1f; public float growthPerFood = 0.1f; private float growthCount = 0; private void OnTriggerEnter(Collider collision) { if (collision.tag == "Food Particle") { growthCount += 1; Debug.Log(growthCount); collision.gameObject.SetActive(false); // 计算等比例缩放后的数值 float newScale = baseScale + (growthCount * growthPerFood); // 应用到玩家对象上 transform.localScale = new Vector3(newScale, newScale, newScale); } }
- 若玩家使用独立碰撞体(如SphereCollider),无需额外调整——碰撞体会自动跟随Transform的Scale缩放,除非你手动锁定了碰撞体的
Radius/Size参数。
2. 适配顶视角相机高度
玩家体积增大后,需要同步调整相机高度以完整显示玩家,两种实现方式可选:
方式一:触发食物时直接调整
// 在Inspector面板拖拽赋值你的顶视角相机 public Camera topDownCamera; public float baseCameraHeight = 5f; public float cameraHeightPerFood = 0.2f; private void OnTriggerEnter(Collider collision) { if (collision.tag == "Food Particle") { // 玩家缩放代码... // 更新相机高度 Vector3 newCameraPos = topDownCamera.transform.position; newCameraPos.y = baseCameraHeight + (growthCount * cameraHeightPerFood); topDownCamera.transform.position = newCameraPos; } }
方式二:实时平滑适配
如果希望相机高度随玩家大小动态平滑变化,在Update方法中添加逻辑:
private void Update() { // 根据玩家当前缩放比例计算目标高度(系数可自行调整) float targetHeight = baseCameraHeight * transform.localScale.x; // 平滑过渡到目标高度 Vector3 newPos = topDownCamera.transform.position; newPos.y = Mathf.Lerp(newPos.y, targetHeight, Time.deltaTime * 2f); topDownCamera.transform.position = newPos; }
3. 常见问题排查
- 确认玩家对象的Tag不是
Food Particle,避免误触发逻辑 - 检查Collider设置:玩家和食物中至少有一个勾选了
Is Trigger,且双方都挂载了Rigidbody(玩家的Rigidbody可勾选Kinematic,如果不需要物理模拟) - 若缩放后模型变形,检查模型导入设置的
Scale Factor是否为1,或右键Transform组件选择Reset清除非均匀缩放历史
内容的提问来源于stack exchange,提问作者Pogramming
相关产品推荐
相关产品推荐

