C# Can';t指定Struct等于另一个脚本中的Struct
我正在进行玩家动作编码,我想为“加电”等准备好预先制作的动作统计数据。为了便于组织,我将统计管理脚本与我的移动脚本分开,并且我将移动变量打包在结构中,以便在播放模式下可以将它们切换出去 我可以从Stats管理脚本中导入传出的Stats结构,但我希望将该结构分配给移动脚本中它自己的变量,以便更容易处理。它确实复制,但我的新结构变量在其所有内部变量上返回0,而不是从原始结构复制值 Tl;dr Im试图将一个结构从一个脚本复制到另一个脚本,但当所述结构复制时,该副本的变量为0 统计信息管理脚本C# Can';t指定Struct等于另一个脚本中的Struct,c#,unity3d,C#,Unity3d,我正在进行玩家动作编码,我想为“加电”等准备好预先制作的动作统计数据。为了便于组织,我将统计管理脚本与我的移动脚本分开,并且我将移动变量打包在结构中,以便在播放模式下可以将它们切换出去 我可以从Stats管理脚本中导入传出的Stats结构,但我希望将该结构分配给移动脚本中它自己的变量,以便更容易处理。它确实复制,但我的新结构变量在其所有内部变量上返回0,而不是从原始结构复制值 Tl;dr Im试图将一个结构从一个脚本复制到另一个脚本,但当所述结构复制时,该副本的变量为0 统计信息管理脚本 pub
public struct StatsSet
{
public int JumpCount;
public float JumpPower;
public float MoveSpeed;
public float QuickFallMultiplier;
public float BaseFallMultiplier;
}
//Public variables for experimental movement stats testing
public 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 initialization
void 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 frame
void 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 data
private PlayerStats PStats;
private PlayerStats.StatsSet PlayerStats;
// Use this for initialization
void Start()
{
PStats = GetComponent<PlayerStats>();
PlayerRigid = GetComponent<Rigidbody>();
PlayerStats = PStats.StatsOut;
JumpCheck = PlayerStats.JumpCount;
Debug.Log("Up and running...");
}
动作脚本
public struct StatsSet
{
public int JumpCount;
public float JumpPower;
public float MoveSpeed;
public float QuickFallMultiplier;
public float BaseFallMultiplier;
}
//Public variables for experimental movement stats testing
public 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 initialization
void 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 frame
void 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 data
private PlayerStats PStats;
private PlayerStats.StatsSet PlayerStats;
// Use this for initialization
void Start()
{
PStats = GetComponent<PlayerStats>();
PlayerRigid = GetComponent<Rigidbody>();
PlayerStats = PStats.StatsOut;
JumpCheck = PlayerStats.JumpCount;
Debug.Log("Up and running...");
}
私人刚体播放器rigid;
私人int跳线检查;
private bool IsGrounded=true;
公共对撞机地面对撞机;
私有int-HiddenJumpCount;
//导入玩家统计数据
私人玩家状态PStats;
私人PlayerStats.statset PlayerStats;
//用于初始化
void Start()
{
PStats=GetComponent();
PlayerRigid=GetComponent();
PlayerStats=PStats.StatsOut;
JumpCheck=PlayerStats.JumpCount;
Log(“启动并运行…”);
}
PStats.Out返回我期望的值,但PlayerStats返回的值似乎是空值这些脚本都在使用
Start()
,所以我猜是MovementScript.Start()
首先发生,当它抓取结构时,它抓取的是默认值(statset)
因为您的统计管理脚本尚未初始化它。您可以在每个日志中抛出一个Debug.Log()
,以确认这是您的问题,但下面介绍了如何修复它:
一个选项是在Stats管理脚本中将Start()
重命名为Awake()
。你可以在TL中了解更多关于清醒vs开始的信息;DR,所有活动脚本运行它们的Awake()
,然后所有脚本运行它们的Start()
您的另一个选项是更改“脚本执行顺序”。如果不触摸,则不同的
Start()
函数的顺序将未知。您可以使用该“设置”菜单,通过给脚本一个明确的执行顺序来确保Stats Management脚本始终在移动脚本之前执行。编辑脚本执行顺序似乎解决了这个问题。谢谢大家!@ValueChip不要忘记通过单击旁边的复选标记符号来接受答案-这会将问题标记为已解决,以供其他任何遇到此问题的人使用。