Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3d 如何将字符串转换为UnityEngine.Sprite?_Unity3d - Fatal编程技术网

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

Unity3d 如何将字符串转换为UnityEngine.Sprite?,unity3d,Unity3d,所以在我的“SpriteChanger”脚本中,我有两个精灵:“快乐”和“悲伤”。在我的“GameControl”脚本中,我有一个字符串“currentMood”,它以“Happy”开头。但是,我有一个公共空间,可以将“当前情绪”改为“悲伤”。 现在在SpriteChanger脚本中,我将这个.GetComponent().sprite=放在我手动输入精灵名称时起作用 然而,如果我有很多精灵需要切换,我不想有太多的精灵。我需要一种方法让this.GetComponent().sprite=接受“

所以在我的“SpriteChanger”脚本中,我有两个精灵:“快乐”和“悲伤”。在我的“GameControl”脚本中,我有一个字符串“currentMood”,它以“Happy”开头。但是,我有一个公共空间,可以将“当前情绪”改为“悲伤”。 现在在SpriteChanger脚本中,我将这个.GetComponent().sprite=放在我手动输入精灵名称时起作用

然而,如果我有很多精灵需要切换,我不想有太多的精灵。我需要一种方法让this.GetComponent().sprite=接受“currentMood”的文本输入。但Unity一直说它不能隐式地将字符串转换为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)
 }
}
游戏控制{ 公共字符串currentMood=“Happy”; 公众情绪(){ currentMood=“Sad”; } /在这里调用changeMood的函数/ } .. . SpriteChanger{ 公共精灵快乐; 公共精灵悲伤; /*还有一堆其他的雪碧*/ 公众情绪(){ this.GetComponent().sprite=GameControl.instance.currentMood) } }
在这些情况下不要使用字符串。最好使用整数或其他形式。一个字符串每个字符需要8个字节,但是一个整数可以用4个字节存储接近数十亿的任何数字。这是一种更好的存储值的方法。您可以将第一个脚本中的部分更改为:

游戏控制{ public int currentMood=0;//快乐 公众情绪(){ currentMood=1;//悲伤 } //在这里调用changeMood的函数 }
SpriteChanger{
公共精灵;
公共精灵快乐;
公共精灵悲伤;
/*还有一堆其他的雪碧*/
公众情绪(){
开关(GameControl.instance.currentMood)
{
案例0:
当前精灵=快乐;
打破
案例1:
当前精灵=悲伤;
打破
……更多的案件
违约:
Debug.Log(“未知情况”);
打破
}
this.GetComponent().sprite=CurrentSprite;
}
}
这里,我们使用switch语句。它与if语句基本相同,只是我们在这些情况下使用它们。将字符串转换为精灵时遇到的问题是,字符串只是一个类似整数的变量。我们编写代码的方式与计算机大不相同。名称就是我们所说的变量。这就是我们用来引用那个值的东西。但是,名称不是字符串。所以我们不能用字符串作为变量的名称


什么是

更好,使用
枚举
,它与数字一样有效,并且可以有有有意义的名称。没错,我只是不太使用它们,如果我不真正理解它们,也不能提供一个好的示例。与其使用字符串,不如使用一个这样的方法,这样可以避免打字错误,而且性能也更好