Xây dựng cờ vua bằng unity

em chào mọi người, chuyện là em có làm proj về xây dựng game cờ vua bằng unity, chỉ mới đến phần dựng bàn cờ thôi ạ.
Đáng ra đến phần này thì khi chạy unity các quân cờ nên đc sắp sẵn trên bàn cờ nhưng đây không hiện


source code 2 file script thì đây ạ
Chessman

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Chessman : MonoBehaviour
{
public GameObject dieukhien;
public GameObject movePlate;

private int xBoard = -1;
private int yBoard = -1;

private string player ;

public Sprite XeDen, MaDen, TuongDen, HauDen, VuaDen, ChotDen;
public Sprite XeTrang, MaTrang, TuongTrang, HauTrang, VuaTrang, ChotTrang;

public void KichHoat()
{
    dieukhien = GameObject.FindGameObjectWithTag("GameController");

    SetCoords();

    switch (this.name)
    {
        case "HauDen":
            this.GetComponent<SpriteRenderer>().sprite = HauDen;
            break;
        case "VuaDen":
            this.GetComponent<SpriteRenderer>().sprite = VuaDen;
            break;
        case "TuongDen":
            this.GetComponent<SpriteRenderer>().sprite = TuongDen;
            break;
        case "MaDen":
            this.GetComponent<SpriteRenderer>().sprite = MaDen;
            break;
        case "XeDen":
            this.GetComponent<SpriteRenderer>().sprite = XeDen;
            break;
        case "ChotDen":
            this.GetComponent<SpriteRenderer>().sprite = ChotDen;
            break;
        case "HauTrang":
            this.GetComponent<SpriteRenderer>().sprite = HauTrang;
            break;
        case "VuaTrang":
            this.GetComponent<SpriteRenderer>().sprite = VuaTrang;
            break;
        case "TuongTrang":
            this.GetComponent<SpriteRenderer>().sprite = TuongTrang;
            break;
        case "MaTrang":
            this.GetComponent<SpriteRenderer>().sprite = MaTrang;
            break;
        case "XeTrang":
            this.GetComponent<SpriteRenderer>().sprite = XeTrang;
            break;
        case "ChotTrang":
            this.GetComponent<SpriteRenderer>().sprite = ChotTrang;
            break;

    }
}

public void SetCoords()
{
    float x = xBoard;
    float y = yBoard;

    x *= 0.66f;
    y *= 0.66f;

    x += -2.3f;
    y += -2.3f;

    this.transform.position = new Vector3(x, y, -1.0f);
}

public int GetXBoard()
{
    return xBoard;
}

public int GetYBoard()
{
    return yBoard;
}

public void SetXBoard(int x)
{
    xBoard = x;
}

public void SetYBoard(int y)
{
    yBoard = y;
}

}

Game

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Game : MonoBehaviour
{
public GameObject QuanCo;

private GameObject[,] vitri = new GameObject[8, 8];
private GameObject[] NgChoiDen = new GameObject[16];
private GameObject[] NgChoiTrang = new GameObject[16];

private string NgChoiHienTai = "trang";

private bool gameOver = false;
void Start()
{
    NgChoiTrang = new GameObject[]
    {
        Create("XeTrang",0,0),Create("MaTrang",1,0),Create("TuongTrang",2,0)
        ,Create("HauTrang",3,0),Create("VuaTrang",4,0),Create("TuongTrang",5,0),
        Create("MaTrang",6,0),Create("XeTrang",7,0)
        ,Create("ChotTrang",0,1)
        ,Create("ChotTrang",1,1),Create("ChotTrang",2,1),Create("ChotTrang",3,1)
        ,Create("ChotTrang",4,1),Create("ChotTrang",5,1),Create("ChotTrang",6,1)
        ,Create("ChotTrang",7,1)
    };

    NgChoiDen = new GameObject[]
    {
        Create("XeDen",0,7),Create("MaDen",1,7),Create("TuongDen",2,7)
        ,Create("HauDen",3,7),Create("VuaDen",4,7),Create("TuongDen",5,7),
        Create("MaDen",6,7),Create("XeDen",7,7)
        ,Create("ChotDen",0,6)
        ,Create("ChotDen",1,6),Create("ChotDen",2,6),Create("ChotDen",3,6)
        ,Create("ChotDen",4,6),Create("ChotDen",5,6),Create("ChotDen",6,6)
        ,Create("ChotDen",7,6)
    };
    //Đặt các quân cờ ra bàn
    for(int i = 0; i < NgChoiTrang.Length; i++)
    {
        SetViTri(NgChoiTrang[i]);
        SetViTri(NgChoiDen[i]);
    }
}

public GameObject Create(string name,int x,int y)
{
    GameObject obj = Instantiate(QuanCo, new Vector3(0, 0, -1), Quaternion.identity);
    Chessman cm = obj.GetComponent<Chessman>();
    cm.name = name;
    cm.SetXBoard(x);
    cm.SetYBoard(y);
    cm.KichHoat();
    return obj;
}
public void SetViTri(GameObject obj)
{
    Chessman cm = obj.GetComponent<Chessman>();
    vitri[cm.GetXBoard(), cm.GetYBoard()] = obj;
}

}

Kết nối quân cờ với script em làm kĩ lắm nhưng vẫn có thể sai ạ
Cái này là sai ở source code hay do điều chỉnh, mọi người xem giúp em với, em cám ơn ạ

PS: Em cũng ngại lên đây hỏi lắm, thường là cùng đường lắm em mới dám làm phiền mọi người ạ

Theo như hình chụp, cậu chưa gán ảnh cho các sprite, vậy nên quân cờ có khả năng sẽ không hiện lên.
Thử gán ảnh nào đó vào xem nha :smile:

6 Likes

dạ đúng là em chưa add sprite vô DieuKhien + phải chỉnh lại SetCoords() mới đc như ý ạ

public void SetCoords()
{
    float x = xBoard;
    float y = yBoard;

    x *= 0.275f;
    y *= 0.275f;

    x += -0.967f;
    y += -0.95f;

    this.transform.position = new Vector3(x, y, -1);
}

Em xin cám ơn ạ

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?