亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

通過列表遞歸不會按預期更新對象

通過列表遞歸不會按預期更新對象

C#
絕地無雙 2022-12-24 11:00:30
我正在嘗試遞歸列表中的一堆游戲對象:// get the relative position of the weapons to the shipList<Transform> weaponPositions = ship.GetWeaponLocations(); // works// set the positions of the weaponsfor(int i = 0 ; i < equippedWeapons.Length && i < weaponPositions.Count ; i++)       {    equippedWeapons[i].GetComponent<Weapon>().setPosition(weaponPositions[i]);}但是,它似乎將最后一個“weaponPositions”應用于所有內容。所以 weaponPositions 是一個 Transform 類型的列表,例如我想將 weapon[0] 的位置設置為 weaponPosition[0] 的位置。問題是,當它到達第三件武器(在本例中為最后一件)時,它會將 weaponPosition[2] 位置應用于之前出現的每件武器,而不僅僅是第 i 個索引。武器是一個 SerailizedField:[SerializeField] GameObject[] equippedWeapons;在武器中,setWeapon 方法很簡單:Transform positionOfWeaponOnShip;public void setPosition(Transform pos){    positionOfWeaponOnShip = pos;}我要問的問題是,我在這里以正確的方式使用列表嗎?我很困惑為什么它不只將它應用于第 i 個值。我也不確定我還能在這里放什么有用的......
查看完整描述

3 回答

?
牛魔王的故事

TA貢獻1830條經驗 獲得超3個贊

您正在嘗試為對象分配一個新的轉換,這是不可能的。默認情況下,Unity 中的每個對象都有一個您無法刪除的 Transform。它是每個游戲對象必須擁有的唯一組件。


您不能為游戲對象分配新的變換,但可以為游戲對象分配新的位置。


 // works but the method naming is inappropriate

 // Either the list should be Vector3 or the method should be named GetWeaponTransform

 List<Transform> weaponPositions = ship.GetWeaponLocations(); 


// if we stick with a collection of Transform

for(int i = 0 ; i < equippedWeapons.Length && i < weaponPositions.Count ; i++)       

{

    equippedWeapons[i].GetComponent<Weapon>().setPosition(weaponPositions[i].position); // added .position

}

最后:


Transform transformOfWeaponOnShip;


public void setPosition(Vector3 pos)

{

    transformOfWeaponOnShip.position = pos;

}


查看完整回答
反對 回復 2022-12-24
?
慕尼黑的夜晚無繁華

TA貢獻1864條經驗 獲得超6個贊

如果你想改變變換位置,你必須改變而positionOfWeaponOnShip.position不是positionOfWeaponOnShip. 我希望這可以幫助你!


Transform positionOfWeaponOnShip;

public void setPosition(Transform pos)

{

    positionOfWeaponOnShip.position = new Vector3(pos.x, pos.y, pos.z);

}


查看完整回答
反對 回復 2022-12-24
?
MMMHUHU

TA貢獻1834條經驗 獲得超8個贊

問題似乎是每個引用都是針對相同的預制件,而不是該預制件的實例。

為了解決這個問題,在啟動武器腳本時,我實例化了該武器的一個新版本,而不是引用預制件。這現在有效:)


查看完整回答
反對 回復 2022-12-24
  • 3 回答
  • 0 關注
  • 108 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號