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

时间:2015-01-31 16:34:53

标签: variables unity3d unityscript


我知道这个问题已经被问了很多次,但是没有一个答案(或者至少我从他们身上拿走了什么)是对我的特殊问题的帮助。

我想动态更改变量路径的一部分,因此我不必重复相同的代码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的一部分。

那么如何让团结阅读&#34; currentPlayer&#34;作为变量路径的一部分?
也许我找不到一些解析功能?
还是我在这里走错了路?

干杯

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

2 个答案:

答案 0 :(得分:1)

首先,

  

var currentPlayer:String =&#34; P1&#34;

这里P1只是字符串,而不是前面的两个脚本引用的P1 / P2。所以,如果你愿意,你可以改变

  

currentPlayer.PlayerEnergy&gt; = value

  

P1.PlayerEnergy&gt; = value

或,

  

P2.PlayerEnergy&gt; = value

但是如果你只想要一个功能,比如

  

currentPlayer.PlayerEnergy&gt; = value

然后你必须首先将currentPlayer设置为P1 / P2,我假设你正在尝试这样做。您必须拥有一些可以验证选择了哪个播放器的代码。然后,也许这可以帮助 -

var playerSelected: int = 0;
var currentPlayerEnergy: int = 0;

.....

//Use your codes to verify which player is selected and then,

if (playerSelected == 1) {
    currentPlayerEnergy = P1.PlayerEnergy;
} else if (playerSelected == 2) {
    currentPlayerEnergy = P2.PlayerEnergy;
}

//Now use your favorite function
if (currentPlayerEnergy >= value) {
//Do stuff
}

答案 1 :(得分:0)

由于没有回复提供我需要的答案,我将与其他学生分享为我提供诀窍的解决方案。

我没有预先编写PlayerData脚本,而是使用Playermanager脚本中的public class函数生成它们。这会将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>(); 

}

如您所见,您可以在此课程中添加任何类型的变量 我希望这可以帮助一些有同样问题的人。

欢呼声, TUX

相关问题