首页 > 解决方案 > 如何从另一个场景访问字符串?(统一)

问题描述

我正在制作一个石头剪刀布游戏,在脚本“游戏”的一个场景中,玩家选择被分配了一个字符串值。在脚本“结果”的下一个场景中,我需要比较玩家选择和计算机选择。该脚本能够访问计算机选项,因为它是在同一个脚本中定义的,并且我认为我可以访问玩家选项,因为我将它设置为公共变量,但它说它在当前上下文中不存在。

'''

// Game script

public string playerChoice;

public void Rock()
{
    playerChoice = "Rock";
}
public void Paper()
{
    playerChoice = "Paper";
}
public void Scissors()
{
    playerChoice = "Scissors";
}
public void Shoot()
{
    SceneManager.LoadScene(2);
}

// Result script

void Start()
{
    string[] computerOptions = new string[3] { "Rock", "Paper", "Scissors" };
    int place = Random.Range(1, 4);
    string computerChoice = computerOptions[place];
    if(computerChoice == playerChoice)
    {

    }
}

''' 任何帮助将不胜感激。

标签: c#unity3d

解决方案


您可以使用DontDestroyOnLoad添加经理游戏对象。在那个游戏对象上,您可以添加一个看起来像这样的GameController.cs脚本:


public class GameController : MonoBehaviour
{
    public playerChoice = null;
    void Awake()
    {
        DontDestroyOnLoad(this.gameObject);
    }
}

然后,在您的游戏脚本中,从场景中找到并设置 playerChoice 值

// Game Script
public GameObject controller = GameObject.Find("GameController").GetComponent<GameController>();;

// When updating player choice, use
controller.playerChoice = 'rock'; // etc

现在,在结果脚本中,您也可以访问控制器脚本

public GameObject controller = GameObject.Find("GameController").GetComponent<GameController>();

// Your if check
if(computerChoice == controller.playerChoice)
{
    //do stuff
}

推荐阅读