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

Unity3D中基于速度值动态缩放GameObject问题求助

问题分析与修复方案

核心问题梳理

  1. 参数未定义错误:Start方法中调用GetMaxValue(v)时,v是未定义变量,应传入speedValues数组。
  2. 缩放逻辑错误:当前_sizeRatio的计算方式会导致最大速度对应的缩放为原始缩放.x²,完全偏离“最大速度对应原始尺寸”的预期。正确逻辑应为当前速度与最大速度的比值,乘以原始缩放。
  3. 变量引用错误: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 13:55:37