Unity - A计划(一年有效期) 扫二维码继续学习 二维码时效为半小时

(63评价)
价格: 1590.00元
棋子游戏问题
临渊一掷发起了问答5天前
1
回复
12
浏览

第一段代码

public class GridAndPieces : MonoBehaviour
{
    GameManager gameManager;
    /// <summary>
    /// GameManager中格子的索引
    /// </summary>
    [HideInInspector]
    public int xIndex, yIndex;//格子的索引
    public int fromPosX, fromPosY;//棋子俩的位置
    public GameObject gridObj;
    public int pieceColorID;//棋子颜色id
    // Start is called before the first frame update
    void Start()
    {
        gameManager = GameManager.Instance;
        
    }
    /// <summary>
    /// 点击黑棋
    /// </summary>
    public void ClickBlackPiece()
    {
        gameManager.firstClickPiece = EventSystem.current.currentSelectedGameObject;
        
        pieceColorID = 1;
       
    }

    /// <summary>
    /// 点击红棋
    /// </summary>
    public void ClickWhitePiece()
    {
        gameManager.firstClickPiece = EventSystem.current.currentSelectedGameObject;

        pieceColorID = 2;
        
    }

    /// <summary>
    /// 点击格子获取需要移动的目标位置
    /// </summary>
    public void ClickGrid()
    {
        int toPosX, toPosY;//需要移动的目标格子位置的索引值
       
        toPosX = xIndex;
        toPosY = yIndex;

        if (gameManager.firstClickPiece == null) 
        {
            Debug.Log($"没有可移动的棋子");
            return;
        }
        else
        {
            bool canValidMove = gameManager.piecesRules.IsMoveValid(toPosX, toPosY);
            if (!canValidMove)
            {
                Debug.Log($"移动不合法");
                return;
            }
            gameManager.piecesMoving.PiecesMove(gameManager.firstClickPiece, toPosX, toPosY, pieceColorID);
            gameManager.firstClickPiece = null;

        }

   第二段代码

 

public class GridAndPieces : MonoBehaviour
{
    GameManager gameManager;
    /// <summary>
    /// GameManager中格子的索引
    /// </summary>
    [HideInInspector]
    public int xIndex, yIndex;//格子的索引
    public GameObject gridObj;
   
    // Start is called before the first frame update
    void Start()
    {
        gameManager = GameManager.Instance;
        
    }
    /// <summary>
    /// 点击黑棋
    /// </summary>
    public void ClickBlackPiece()
    {
        gameManager.firstClickPiece = EventSystem.current.currentSelectedGameObject;
       
    }

    /// <summary>
    /// 点击红棋
    /// </summary>
    public void ClickWhitePiece()
    {
        gameManager.firstClickPiece = EventSystem.current.currentSelectedGameObject;
        
    }

    /// <summary>
    /// 点击格子获取需要移动的目标位置
    /// </summary>
    public void ClickGrid()
    {
        int toPosX, toPosY, pieceColorID=0;//需要移动的目标格子位置的索引值
        toPosX = xIndex;
        toPosY = yIndex;
        
       
        if (gameManager.firstClickPiece == null) 
        {
            Debug.Log($"没有可移动的棋子");
            return;
        }
        else
        {
            if (gameManager.firstClickPiece.name=="heiqi")
            {
                pieceColorID = 1;
            }
            if (gameManager.firstClickPiece.name=="baiqi")
            {
                pieceColorID = 2;
            }

            bool canValidMove = gameManager.piecesRules.IsMoveValid(toPosX, toPosY);
            if (!canValidMove)
            {
                Debug.Log($"移动不合法");
                return;
            }
            gameManager.piecesMoving.PiecesMove(gameManager.firstClickPiece, toPosX, toPosY, pieceColorID);
            gameManager.firstClickPiece = null;

        }

老师好:这是两段代码区别就是pieceColorID在代码一种是类的成员变量,代码二种局部变量,在下边传入PiecesMove的方法中  第二段传入正确,第一段代码输出后始终未0,  这是什么原因啊  有区别的地方我用红色字体标记了
 

 

    

所有回复
  • 老师_Sky 4天前

    第一段代码里 pieceColorID 之所以一直是 0,是因为:

    你把它挂在 Grid(格子)的 GridAndPieces 脚本上了;

    ClickBlackPiece / ClickWhitePiece 只会改变 棋子对象上脚本里的 pieceColorID;

    当你 ClickGrid 时,调用的是 格子上的脚本,它的 pieceColorID 根本没改过 → 默认就是 0。

    而第二段代码直接在 ClickGrid 内部用 firstClickPiece 的名字来判断,不依赖格子的 pieceColorID,所以能得到正确结果。

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
发表回复
你还没有登录,请先 登录或 注册!