动态更改可变路径的一部分

燕尾服


我知道这个问题已经被问过很多次了,但是没有一个答案(或者至少我从中获得的答案)对我的特殊问题没有帮助。

我想动态地更改变量路径的一部分,因此我不必在更改两个字符的情况下重复相同的代码x次。

这是我得到的:

在脚本的开头,我设置对PlayerData脚本的引用,该脚本附加到GameManager对象,如下所示:

var P1 : P1_Data;
var P2 : P2_Data;

function Start(){
    P1 = GameObject.Find("GameManager").GetComponent.<P1_Data>();
    P2 = GameObject.Find("GameManager").GetComponent.<P2_Data>();
}

稍后,我想使用currentPlayer变量访问这些脚本以动态调整路径:

 var currentPlayer : String = "P1"; //this actually happens along with some other stuff in the SwitchPlayers function, i just put it here for better understanding

 if (currentPlayer.PlayerEnergy >= value){
 // do stuff
 }

就像我担心的那样,我听到一个错误消息,说PlayerEnergy不是UnityEngine.String的一部分。

那么,如何统一读取“ currentPlayer”作为变量路径的一部分呢?
也许我没有找到某些解析函数?
还是我在这里走错了路?

干杯

PS:我还尝试将P1和P2变量放入数组中并按如下方式访问它们:
if (PlayerData[CurrentPlayerInt].PlayerEnergy >= value){ // do stuff }
没有成功。

燕尾服

由于没有人提供我所需答案的答复,因此我将分享由一名同学提供的对我有用的解决方案。

我没有预先编写PlayerData脚本,而是使用public classPlayermanager脚本中函数生成它们这将生成Playerdata作为附加脚本,并保存到数组中。
然后,我可以通过访问它们Playermanager.Playerlist[Playernumber].targetvariable
我只想将Playerdata附加到脚本而不是游戏对象上,这就是我想做的。而且效果很好!

这是我的Playermanager脚本的完整代码:

//initialise max players
public var maxplayers : int = 2;

// Initialise Playerlist
static var Players = new List.<PlayerData>();


function Start () {
 for (var i : int = 0; i < maxplayers; i++){ 
     var Player = new PlayerData();
     Players.Add(Player);
     Players[i].PlayerName = "Player " + i; 
 }  

 DontDestroyOnLoad (transform.gameObject);   
 }

public class PlayerData {

  public var PlayerName : String;
  public var PlayerEnergy : int = 15; 
  public var Fleet : List.<GameObject> = new List.<GameObject>(); 

}

如您所见,您可以在此类中放置任何类型的变量。
希望这对遇到同样问题的一些人有所帮助。

干杯,无尾礼服

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章