unity3d 检查游戏对象的子对象是否与其他游戏对象的子对象相同

ymzxtsji  于 2023-02-13  发布在  其他
关注(0)|答案(1)|浏览(204)

所以我正在做一个老虎机游戏,但是我检查获胜组合的方法不起作用,我不知道该尝试什么。
我设法通过使用ienumerator将符号创建为卷轴游戏对象下的子对象来显示符号

IEnumerator SpinReel(int reelIndex)
{
   
    // spin for a random amount of time
    float spinTime = Random.Range(1.5f, 3.0f);
    yield return new WaitForSeconds(spinTime);
    
    
    // choose a random symbol
    int symbolIndex = Random.Range(0, 5);
    GameObject symbol;
    switch (symbolIndex)
    {
        case 0:
            symbol = cherryPrefab;
            break;
        case 1:
            symbol = grapePrefab;
            break;
        case 2:
            symbol = sevenPrefab;
            break;
        case 3:
            symbol = orangePrefab;
            break;
        case 4:
            symbol = lemonPrefab;
            break;
        default:
            symbol = cherryPrefab;
            break;
        }

    
    //instantiate symbol on reel
    GameObject newSymbol = Instantiate(symbol, reels[reelIndex].transform);
    newSymbol.transform.localPosition = Vector3.zero;

    // wait for another 1.5 seconds before starting to spin the 2nd reel
    yield return new WaitForSeconds(1.5f);

这是我目前检查组合的方法,但它不想工作:

void Check()
{
    if (reels[2].transform.GetChild(0) == reels[1].transform.GetChild(0) &&
    reels[1].transform.GetChild(1) == reels[0].transform.GetChild(0))        
    {
        Debug.Log("yee");
        currency += bet * 2;
        Debug.Log(currency);
    }
    else  if (reels[2].transform.GetChild(0) == reels[1].transform.GetChild(0) ||
    reels[1].transform.GetChild(1) == reels[0].transform.GetChild(0))        
    {
        Debug.Log("yee");
        // player wins, add winnings to currency
        currency += bet;
        Debug.Log(currency);
    }
}

你知道为什么它不起作用或其他方法,我可以尝试?
用C#统一编写

4zcjmb1e

4zcjmb1e1#

你的代码对我来说有一点不清楚。你能展示一下你运行它得到的输出吗?
我也知道你有3个卷轴,但是如果我没记错的话,你应该只从每个卷轴中示例化一个符号,那么在你的Check函数中,为什么你要比较卷轴[1]的第二个孩子和卷轴[0]的第一个孩子呢?
getChild方法也返回子对象的transform组件,你不应该比较符号吗?例如,通过获取GameObjects并比较符号属性(如果你有一个)
这样,Check方法将如下所示:

void Check()
{
    if (reels[2].transform.GetChild(0).gameObject.symbol == reels[1].transform.GetChild(0).gameObject.symbol &&
    reels[1].transform.GetChild(1).gameObject.symbol == reels[0].transform.GetChild(0).gameObject.symbol)        
    {
        Debug.Log("yee");
        currency += bet * 2;
        Debug.Log(currency);
    }
    else  if (reels[2].transform.GetChild(0).gameObject.symbol == reels[1].transform.GetChild(0).gameObject.symbol ||
    reels[1].transform.GetChild(1).gameObject.symbol == reels[0].transform.GetChild(0).gameObject.symbol)        
    {
        Debug.Log("yee");
        // player wins, add winnings to currency
        currency += bet;
        Debug.Log(currency);
    }
}

最后,如果这不能解决你的问题,你能展示一下你是如何调用SpinReel函数的吗?当你在最后调用WaitForSeconds(1.5f)时,我不知道它是如何等待下一个卷轴开始旋转的。

相关问题