如何将字符串转换为UnityEngine.Sprite



所以在我的"SpriteChanger";脚本,我有两个精灵:;快乐"以及";悲伤";。在我的";GameControl";脚本,我有一个字符串";currentMood";其开始为";快乐"。但我有一个公共的空白来改变";currentMood";变成";悲伤";。现在在SpriteChanger脚本中,我放了这个。GetComponent((.ssprite=当我手动输入sprite的名称时,它会起作用。

然而,如果我有很多精灵需要切换,我不想有一大堆。我需要一种方法来拥有它。GetComponent((sprite=接受"的文本输入;currentMood";。但Unity一直表示,它无法将String隐式转换为UnityEngine.Sprite.

这是代码:

GameControl{
public string currentMood = "Happy";
public void changeMood () {
currentMood = "Sad";
}
/some function that calls changeMood somewhere here/
} ..
.
SpriteChanger {
public Sprite Happy;
public Sprite Sad;
/*and a buncha other sprites*/
public void changeMood () {
this.GetComponent<SpriteRenderer> ().sprite = GameControl.instance.currentMood)
}
}

在这些情况下不要使用字符串。使用整数或其他东西总是更好的。一个字符串为每个字符占用8个字节,但一个整数只需4个字节就可以存储接近数十亿的任何数字。这是一种更好的存储值的方法。您可以将第一个脚本中的部分更改为:

GameControl{
public int currentMood = 0;//happy
public void changeMood () {
currentMood = 1;//sad
}
//some function that calls changeMood somewhere here
}
SpriteChanger {
public Sprite CurrentSprite;
public Sprite Happy;
public Sprite Sad;
/*and a buncha other sprites*/
public void changeMood () {
switch (GameControl.instance.currentMood)
{
case 0:
CurrentSprite = Happy;
break;
case 1:
CurrentSprite = Sad;
break;
...//more cases
default:
Debug.Log(“Unknown case”);
break;
}
this.GetComponent<SpriteRenderer>().sprite = CurrentSprite;
}
}

在这里,我们使用switch语句。它和if语句基本上是一样的,只是我们在这些情况下使用它们。将字符串转换为sprite时遇到的问题是,字符串只是一个像整数一样的变量。我们编写代码的方式与计算机有很大不同。名称就是我们所说的变量。这就是我们用来引用该值的东西。不过,名称不是字符串。因此,我们不能将变量的名称与字符串一起使用。

什么是开关?

最新更新