为了账号安全,请及时绑定邮箱和手机立即绑定

无法将结构分配给其他脚本中的结构

无法将结构分配给其他脚本中的结构

C#
白板的微信 2022-08-20 15:08:08
我正在研究玩家的动作编码,我想为“道具”等准备预制的动作统计数据。为了便于组织,我制作了一个与移动脚本分开的统计管理脚本,并将移动变量打包在结构中,以便在游戏模式下切换出来。我可以从统计信息管理脚本导入传出统计信息结构,但我想将该结构分配给移动脚本中它自己的变量,以便于处理。它确实复制了,但我的新结构变量在其所有内部变量上返回0,而不是从原始结构复制值。Tl;dr Im 尝试将结构从一个脚本复制到另一个脚本,但是当所述结构副本时,副本具有 0 的变量。统计管理脚本public struct StatsSet{    public int JumpCount;    public float JumpPower;    public float MoveSpeed;    public float QuickFallMultiplier;    public float BaseFallMultiplier;}//Public variables for experimental movement stats testingpublic int ExJumpCount = 1;public float ExJumpPower = 6.0f;public float ExMoveSpeed = 4.0f;public float ExQuickFallMultiplier = 2.0f;public float ExBaseFallMultiplier = 2.5f;public int Statpick = 1;public StatsSet StatsOut;private StatsSet ExStats;private StatsSet BaseStats;// Use this for initializationvoid Start () {    BaseStats.JumpCount = 1;    BaseStats.JumpPower = 6.0f;    BaseStats.MoveSpeed = 4.0f;    BaseStats.QuickFallMultiplier = 2.0f;    BaseStats.BaseFallMultiplier = 2.5f;    ExStats.BaseFallMultiplier = ExBaseFallMultiplier;    ExStats.JumpCount = ExJumpCount;    ExStats.JumpPower = ExJumpPower;    ExStats.MoveSpeed = ExMoveSpeed;    ExStats.QuickFallMultiplier = ExQuickFallMultiplier;    Statpick = 1;}// Update is called once per framevoid Update () {    if (Statpick == 0)    {        StatsOut = ExStats;    }    else if (Statpick == 1)    {        StatsOut = BaseStats;    }}动作脚本private Rigidbody PlayerRigid;private int JumpCheck;private bool IsGrounded = true;public Collider GroundCollider;private int HiddenJumpCount;//Import of player stats dataprivate PlayerStats PStats;private PlayerStats.StatsSet PlayerStats;// Use this for initializationvoid Start(){    PStats = GetComponent<PlayerStats>();    PlayerRigid = GetComponent<Rigidbody>();    PlayerStats = PStats.StatsOut;    JumpCheck = PlayerStats.JumpCount;    Debug.Log("Up and running...");}PStats.Out 返回我预期的值,但 PlayerStats 返回看似空的值
查看完整描述

1 回答

?
慕慕森

TA贡献1856条经验 获得超17个赞

这些脚本都在使用,所以我的猜测是首先发生的,当它抓住结构时,它会抓住一个,因为你的统计管理脚本还没有初始化它。您可以向每个问题中添加一个以确认这是您的问题,但以下是解决方法:Start()MovementScript.Start()default(StatsSet)Debug.Log()

一种选择是在统计信息管理脚本中重命名为 。您可以在此视频中了解有关唤醒与开始的更多信息,但是TL;DR,所有活动脚本都运行其,然后所有脚本都运行其.Start()Awake()Awake()Start()

您的另一个选择是更改“脚本执行顺序”。如果不触摸脚本执行顺序设置,则不同函数的顺序将是未知的。您可以使用该设置菜单来确保统计信息管理脚本始终在移动脚本之前执行,方法是为其提供明确的执行顺序。Start()


查看完整回答
反对 回复 2022-08-20
  • 1 回答
  • 0 关注
  • 115 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号