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

Unity跨脚本调用函数后编辑器值不更新但控制台输出正常

问题分析与解决方案:编辑器面板数值未同步更新

嘿,我一眼就看出问题出在哪了——你用继承的方式搞错了脚本实例的引用!

你的editProperties脚本继承了OrbitFireball,这意味着当你把它挂在Radius (+)对象上时,它是一个完全独立的OrbitFireball子类实例,和挂在CircleMovementTarget上的那个原始脚本半毛钱关系都没有。所以你调用increaseRadius()时,修改的是editProperties自己内部的orbitDistance值(这个值在编辑器面板里根本看不到,因为你没把这个子类的字段暴露出来),控制台输出的也是这个“分身”的数值,而真正控制轨道的CircleMovementTarget上的orbitDistance压根没被改动,编辑器面板和轨道运行逻辑自然不会同步。

正确的修复方法:直接引用目标脚本

别再用继承了,改成在editProperties里直接引用CircleMovementTarget上的OrbitFireball脚本就行:

修改后的editProperties代码:

using System.Collections;
using System.Collections.Generic;
using HoloToolkit.Unity.InputModule;
using UnityEngine;

public class editProperties : MonoBehaviour, IInputClickHandler
{
    // 在编辑器里把挂了OrbitFireball的CircleMovementTarget拖到这里
    public OrbitFireball targetOrbitScript;

    public void OnInputClicked(InputClickedEventData eventData)
    {
        if (gameObject.tag == "RadiusPlus" && targetOrbitScript != null)
        {
            targetOrbitScript.increaseRadius();
        }
    }
}

然后在Unity编辑器里做这一步:

  • 选中Radius (+)对象,找到editProperties组件,把CircleMovementTarget对象拖拽到targetOrbitScript字段上,完成引用关联。

这样点击Radius (+)时,就会直接调用CircleMovementTarget上的OrbitFireball的increaseRadius()方法,修改的是真正控制轨道的那个orbitDistance值,编辑器面板和运行时的轨道逻辑就会同步更新了。

另外提一句,你的orbitDistance已经是public字段了,Unity 2017里运行时修改这个值,编辑器面板会实时显示变化,但停止运行后会恢复到编辑模式的数值,如果需要保存修改可以考虑用PlayerPrefs做简单持久化。

内容的提问来源于stack exchange,提问作者Pratham Sehgal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:19:12