Unity3D/C#로 간단한 리버시(오셀로)를 만든다! ! ~Part1~

Unity 학습력 1개월, 이제 교본을 놓아 간단한 게임을 만들려고 생각해, 여러가지 것을 참고로 하면서 도전해 보았습니다.
판과 돌을 만들고 게임 시작시 제자리에 돌을 놓는 곳까지가 본 Part 내용입니다.

첫 투고입니다만, 최대한 알기 쉬운 문장이 되도록 노력합니다.

환경



・Macbook air
· Unity2019.2.17

보드와 돌 생성



・반은 Cube를 좌표(0,0.5,0)를 기점에 두고, x와 z를 1씩 더해 합계 8×8개 둡니다.

・돌은 cylinder를 2개 끌어당긴 오브젝트를 1개 만들고, 판을 타도록 Cupsule Collider를 조절, 좌표를 Game 화면 밖으로 설정합니다. (Prefab로 Hiererchy에서 지우면 왜 후 처리에서 막혔습니다)


돌 색상을 스크립트로 관리


    [SerializeField] Material material = null;

    Material topMaterial = null;
    Material backMaterial = null;

    [SerializeField] MeshRenderer topCylinder = null;
    [SerializeField] MeshRenderer backCylinder = null;
    public void SetState(StageManager.eStoneState state){
        bool isActive = (state != StageManager.eStoneState.EMPTY);
        {
            topCylinder.gameObject.SetActive(isActive);
            backCylinder.gameObject.SetActive(isActive);
        }
        SetColor(state == StageManager.eStoneState.WHITE);

    }
    public void SetColor(bool isWHITE)
    {
        if (topMaterial == null)
        {
            topMaterial = GameObject.Instantiate<Material>(material);
            backMaterial = GameObject.Instantiate<Material>(material);
            topCylinder.material = topMaterial;
            backCylinder.material = backMaterial;
        }
        topMaterial.color = isWHITE ? Color.white : Color.black;
        backMaterial.color = isWHITE ? Color.black : Color.white;
    }

스크립트에 적당한 이름을 붙이고(이번은 "StoneManager"), 상기의 코드로 돌의 색을 관리합니다.

Unity의 Inspector에서 "material", "topCylinder", "backCylinder"에 방금 만든 돌의 material과, 붙어 있던 2개의 cylinder를 따로따로 붙입니다.

7행째의 "StageManager"는 후술하는 스크립트의 클래스명이므로 스루 해 주세요.
topMaterial.color = isWHITE ? Color.white : Color.black;
backMaterial.color = isWHITE ? Color.black : Color.white;
위의 2행으로 돌 위가 검정(흰색)일 때 아래가 흰색(검정)이 되도록 설정하고 있습니다.

첫 돌을 생성


    public enum eStoneState//石の状態
    {
        EMPTY,//石が空
        WHITE,//石の上が白
        BLACK//石の上が黒
    };
    public GameObject firstStone;//置いた石
    private GameObject[,] firstStoneState = new GameObject[squareZ, squareX];//置いた石の座標
    private StoneManager[,] stoneManagers = new StoneManager[squareZ, squareX];//石のシリンダーとマテリアルの状態
    private eStoneState[,] stoneState = new eStoneState[squareZ, squareX];//石が空か白か黒か

    public Camera mainCamera;//カメラ取得用変数
    const int squareX = 8;//盤上のx(横)座標
    const int squareZ = 8;//盤上のz(縦)座標
    public int whiteScore;//白の枚数
    public int blackScore;//黒の枚数

    void Start()
    {
        mainCamera = GameObject.Find("Main Camera").GetComponent<Camera>();
        for (int i = 0; i < squareZ; i++)
        {
            for (int j = 0; j < squareX; j++)
            {
                // 石を64枚EMPTYで生成
                GameObject stone = GameObject.Instantiate<GameObject>(firstStone);
                StoneManager stoneManager = stone.GetComponent<StoneManager>();

                stone.transform.position = new Vector3(j, 1, i);
                firstStoneState[i, j] = stone;
                stoneManagers[i, j] = stoneManager;
                stoneState[i, j] = eStoneState.EMPTY;
            }
                stoneState[3, 3] = eStoneState.WHITE;
                stoneState[3, 4] = eStoneState.BLACK;
                stoneState[4, 3] = eStoneState.BLACK;
                stoneState[4, 4] = eStoneState.WHITE;
        }
        whiteScore = 2;
        blackScore = 2;
    }

새롭게 스크립트를 작성해(이번은 "StageManager"), 상기의 코드를 기술합니다.

start에서 반복 문장을 사용해, 각 매스에 돌을 놓고, "StoneManager"의 "SetState"로 "SetActive()"를 컨트롤 해, 최초로 두고 싶은 돌에는 미리 "eStoneState"를 "BLACK"인가"WHITE"로 해 두도록 기술해 두면, 게임 개시시에 아래와 같은 화상과 같이 돌이 배치됩니다.


Part2에서는 탭하여 돌을 놓는 처리와 뒤집는 처리에 대해 기술합니다.

↓Part2↓
h tps:// 퀵했다. 작은 m/t-2MT/있어 MS/7 그림 C46c62107f965572c1

좋은 웹페이지 즐겨찾기