[英]Unity C# Errors
我在理解錯誤消息時遇到了一些問題,已經通過我的代碼找到了問題所在,但找不到任何問題。 請幫忙,我收到 25 條類似的錯誤消息:它們看起來都是這樣的:
Assets/Scenes/Scripts/GameController.cs(120,113):錯誤 CS1061:“GridSpace”不包含“text”的定義,並且找不到接受“GridSpace”類型的第一個參數的可訪問擴展方法“text”(是您缺少 using 指令或程序集引用?)
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
[System.Serializable]
public class Player
{
public Image panel;
public Text text;
public Button button;
public Sprite playerImage;
}
[System.Serializable]
public class PlayerColor
{
public Color panelColor;
public Color textColor;
}
public class GameController : MonoBehaviour
{
public GridSpace[] gridSpaceList;
public GameObject gameOverPanel;
public Text gameOverText;
public GameObject restartButton;
public Player playerX;
public Player playerO;
public PlayerColor activePlayerColor;
public PlayerColor inactivePlayerColor;
public GameObject startInfo;
private string playerSide;
private int moveCount;
public Sprite GetPlayerSideImage()
{
if (playerSide == "X")
{
return playerX.playerImage;
}
else
{
return playerO.playerImage;
}
}
void Awake()
{
SetGameControllerReferenceOnButtons();
gameOverPanel.SetActive(false);
moveCount = 0;
restartButton.SetActive(false);
}
void SetGameControllerReferenceOnButtons()
{
for (int i = 0; i < gridSpaceList.Length; i++)
{
gridSpaceList[i].SetGameControllerReference(this);
}
}
public void SetStartingSide(string startingSide)
{
playerSide = startingSide;
if (playerSide == "X")
{
SetPlayerColors(playerX, playerO);
}
else
{
SetPlayerColors(playerO, playerX);
}
StartGame();
}
void StartGame()
{
SetBoardInteractable(true);
SetPlayerButtons(false);
startInfo.SetActive(false);
}
public string GetPlayerSide()
{
return playerSide;
}
public void EndTurn()
{
moveCount++;
if (gridSpaceList[0].text == playerSide && gridSpaceList[1].text == playerSide && gridSpaceList[2].text == playerSide)
{
GameOver(playerSide);
}
else if (gridSpaceList[3].text == playerSide && gridSpaceList[4].text == playerSide && gridSpaceList[5].text == playerSide)
{
GameOver(playerSide);
}
else if (gridSpaceList[6].text == playerSide && gridSpaceList[7].text == playerSide && gridSpaceList[8].text == playerSide)
{
GameOver(playerSide);
}
else if (gridSpaceList[0].text == playerSide && gridSpaceList[3].text == playerSide && gridSpaceList[6].text == playerSide)
{
GameOver(playerSide);
}
else if (gridSpaceList[1].text == playerSide && gridSpaceList[4].text == playerSide && gridSpaceList[7].text == playerSide)
{
GameOver(playerSide);
}
else if (gridSpaceList[2].text == playerSide && gridSpaceList[5].text == playerSide && gridSpaceList[8].text == playerSide)
{
GameOver(playerSide);
}
else if (gridSpaceList[0].text == playerSide && gridSpaceList[4].text == playerSide && gridSpaceList[8].text == playerSide)
{
GameOver(playerSide);
}
else if (gridSpaceList[2].text == playerSide && gridSpaceList[4].text == playerSide && gridSpaceList[6].text == playerSide)
{
GameOver(playerSide);
}
else if (moveCount >= 9)
{
GameOver("draw");
}
else
{
ChangeSides();
}
}
void ChangeSides()
{
playerSide = (playerSide == "X") ? "O" : "X";
if (playerSide == "X")
{
SetPlayerColors(playerX, playerO);
}
else
{
SetPlayerColors(playerO, playerX);
}
}
void SetPlayerColors(Player newPlayer, Player oldPlayer)
{
newPlayer.panel.color = activePlayerColor.panelColor;
newPlayer.text.color = activePlayerColor.textColor;
oldPlayer.panel.color = inactivePlayerColor.panelColor;
oldPlayer.text.color = inactivePlayerColor.textColor;
}
void GameOver(string winningPlayer)
{
SetBoardInteractable(false);
if (winningPlayer == "draw")
{
SetGameOverText("It's a Draw!");
SetPlayerColorsInactive();
}
else
{
SetGameOverText(winningPlayer + " Wins!");
}
restartButton.SetActive(true);
}
void SetGameOverText(string value)
{
gameOverPanel.SetActive(true);
gameOverText.text = value;
}
public void RestartGame()
{
moveCount = 0;
gameOverPanel.SetActive(false);
restartButton.SetActive(false);
SetPlayerButtons(true);
SetPlayerColorsInactive();
startInfo.SetActive(true);
for (int i = 0; i < gridSpaceList.Length; i++)
{
gridSpaceList[i].text = "";
}
}
private void SetBoardInteractable(bool toggle)
{
for (int i = 0; i < gridSpaceList.Length; i++)
{
gridSpaceList[i].button.interactable = toggle;
}
}
void SetPlayerButtons(bool toggle)
{
playerX.button.interactable = toggle;
playerO.button.interactable = toggle;
}
void SetPlayerColorsInactive()
{
playerX.panel.color = inactivePlayerColor.panelColor;
playerX.text.color = inactivePlayerColor.textColor;
playerO.panel.color = inactivePlayerColor.panelColor;
playerO.text.color = inactivePlayerColor.textColor;
}
}
另一個腳本看起來像這樣
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class GridSpace : MonoBehaviour
{
public Button button;
public string text;
public Image image;
private GameController gameController;
public void SetGameControllerReference(GameController controller)
{
gameController = controller;
}
public void SetSpace()
{
text = gameController.GetPlayerSide();
image.sprite = gameController.GetPlayerSideImage();
button.interactable = false;
gameController.EndTurn();
}
}
更新:似乎代碼應該可以正常工作。 我隔離了對文本的訪問,它確實有效。
void Awake()
{
//SetGameControllerReferenceOnButtons();
EndTurn();
//gameOverPanel.SetActive(false);
// moveCount = 0;
//restartButton.SetActive(false);
}
EndTurn() 被隔離為僅訪問 gridSpaceList[0...].text:
public void EndTurn()
{
// moveCount++;
if (gridSpaceList[0].text == playerSide && gridSpaceList[1].text == playerSide && gridSpaceList[2].text == playerSide)
{
//GameOver(playerSide);
}
else if (gridSpaceList[3].text == playerSide && gridSpaceList[4].text == playerSide && gridSpaceList[5].text == playerSide)
{
// GameOver(playerSide);
}
else if (gridSpaceList[6].text == playerSide && gridSpaceList[7].text == playerSide && gridSpaceList[8].text == playerSide)
{
// GameOver(playerSide);
}
else if (gridSpaceList[0].text == playerSide && gridSpaceList[3].text == playerSide && gridSpaceList[6].text == playerSide)
{
//GameOver(playerSide);
}
else if (gridSpaceList[1].text == playerSide && gridSpaceList[4].text == playerSide && gridSpaceList[7].text == playerSide)
{
//GameOver(playerSide);
}
else if (gridSpaceList[2].text == playerSide && gridSpaceList[5].text == playerSide && gridSpaceList[8].text == playerSide)
{
//GameOver(playerSide);
}
else if (gridSpaceList[0].text == playerSide && gridSpaceList[4].text == playerSide && gridSpaceList[8].text == playerSide)
{
//GameOver(playerSide);
}
else if (gridSpaceList[2].text == playerSide && gridSpaceList[4].text == playerSide && gridSpaceList[6].text == playerSide)
{
//GameOver(playerSide);
}
else if (moveCount >= 9)
{
//GameOver("draw");
}
else
{
//ChangeSides();
}
}
等級制度
檢查器 gridSpaceList 數組:你設置了所有的引用嗎? 並向他們添加文字?
我還為每個游戲對象添加了文本值以進行測試。 由於上述工作正常,請嘗試在 object 到達 EndTurn() 之前跟蹤它,看看會發生什么......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.