Unity3D中基于速度值动态缩放GameObject问题求助
问题分析与修复方案
核心问题梳理
- 参数未定义错误:
Start方法中调用GetMaxValue(v)时,v是未定义变量,应传入speedValues数组。 - 缩放逻辑错误:当前
_sizeRatio的计算方式会导致最大速度对应的缩放为原始缩放.x²,完全偏离“最大速度对应原始尺寸”的预期。正确逻辑应为当前速度与最大速度的比值,乘以原始缩放。 - 变量引用错误:
ScaleObject方法中最后一个分量误用了不存在的_experimentManager.SpeedIndex,应替换为_speedIndex。
修复后的完整代码
using UnityEngine; using System.Linq; public class Example : MonoBehaviour { [SerializeField] private GameObject objectToResize; [SerializeField] private float[] speedValues; private int _speedIndex; private float _maxSpeed; private Vector3 _originalSize; private void Start(){ _speedIndex = 0; _originalSize = objectToResize.transform.localScale; _maxSpeed = GetMaxValue(speedValues); ScaleObject(); } private void Update(){ if(Input.GetKeyDown(KeyCode.W)){ _speedIndex++; if(_speedIndex >= speedValues.Length){ _speedIndex = 0; } ScaleObject(); } } private void ScaleObject(){ // 计算当前速度对应的缩放比例:当前速度 / 最大速度 float scaleFactor = speedValues[_speedIndex] / _maxSpeed; // 原始缩放乘以比例,得到目标尺寸 Vector3 newScale = _originalSize * scaleFactor; objectToResize.transform.localScale = newScale; } private float GetMaxValue(float[] values) => values.Max(); }
效果验证(以你的参数为例)
- 原始缩放:
(0.5, 0.5, 0.5) speedValues:[0.8, 0.5, 0.2],最大速度为0.8_speedIndex=0(速度0.8):缩放比例为1,最终缩放(0.5,0.5,0.5),符合初始尺寸要求_speedIndex=1(速度0.5):缩放比例为0.625,最终缩放(0.3125,0.3125,0.3125)_speedIndex=2(速度0.2):缩放比例为0.25,最终缩放(0.125,0.125,0.125)
反向需求调整
如果需要速度越小,缩放越大,只需将scaleFactor改为_maxSpeed / speedValues[_speedIndex]即可。
内容的提问来源于stack exchange,提问作者alirek
相关产品推荐
相关产品推荐

