我正在研究玩家的動作編碼,我想為“道具”等準(zhǔn)備預(yù)制的動作統(tǒng)計(jì)數(shù)據(jù)。為了便于組織,我制作了一個與移動腳本分開的統(tǒng)計(jì)管理腳本,并將移動變量打包在結(jié)構(gòu)中,以便在游戲模式下切換出來。我可以從統(tǒng)計(jì)信息管理腳本導(dǎo)入傳出統(tǒng)計(jì)信息結(jié)構(gòu),但我想將該結(jié)構(gòu)分配給移動腳本中它自己的變量,以便于處理。它確實(shí)復(fù)制了,但我的新結(jié)構(gòu)變量在其所有內(nèi)部變量上返回0,而不是從原始結(jié)構(gòu)復(fù)制值。Tl;dr Im 嘗試將結(jié)構(gòu)從一個腳本復(fù)制到另一個腳本,但是當(dāng)所述結(jié)構(gòu)副本時,副本具有 0 的變量。統(tǒng)計(jì)管理腳本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 返回我預(yù)期的值,但 PlayerStats 返回看似空的值
1 回答

慕慕森
TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超17個贊
這些腳本都在使用,所以我的猜測是首先發(fā)生的,當(dāng)它抓住結(jié)構(gòu)時,它會抓住一個,因?yàn)槟愕慕y(tǒng)計(jì)管理腳本還沒有初始化它。您可以向每個問題中添加一個以確認(rèn)這是您的問題,但以下是解決方法:Start()
MovementScript.Start()
default(StatsSet)
Debug.Log()
一種選擇是在統(tǒng)計(jì)信息管理腳本中重命名為 。您可以在此視頻中了解有關(guān)喚醒與開始的更多信息,但是TL;DR,所有活動腳本都運(yùn)行其,然后所有腳本都運(yùn)行其.Start()
Awake()
Awake()
Start()
您的另一個選擇是更改“腳本執(zhí)行順序”。如果不觸摸腳本執(zhí)行順序設(shè)置,則不同函數(shù)的順序?qū)⑹俏粗?。您可以使用該設(shè)置菜單來確保統(tǒng)計(jì)信息管理腳本始終在移動腳本之前執(zhí)行,方法是為其提供明確的執(zhí)行順序。Start()
- 1 回答
- 0 關(guān)注
- 114 瀏覽
添加回答
舉報
0/150
提交
取消