我正在研究玩家的动作编码,我想为“道具”等准备预制的动作统计数据。为了便于组织,我制作了一个与移动脚本分开的统计管理脚本,并将移动变量打包在结构中,以便在游戏模式下切换出来。我可以从统计信息管理脚本导入传出统计信息结构,但我想将该结构分配给移动脚本中它自己的变量,以便于处理。它确实复制了,但我的新结构变量在其所有内部变量上返回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()
- 1 回答
- 0 关注
- 115 浏览
添加回答
举报
0/150
提交
取消