Unity3D/C#로 간단한 리버시(오셀로)를 만든다! ! ~Part1~
판과 돌을 만들고 게임 시작시 제자리에 돌을 놓는 곳까지가 본 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
Reference
이 문제에 관하여(Unity3D/C#로 간단한 리버시(오셀로)를 만든다! ! ~Part1~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/t-o2mt/items/40e4bca24011dd88d8a7
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
・반은 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
Reference
이 문제에 관하여(Unity3D/C#로 간단한 리버시(오셀로)를 만든다! ! ~Part1~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/t-o2mt/items/40e4bca24011dd88d8a7
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
[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;
}
topMaterial.color = isWHITE ? Color.white : Color.black;
backMaterial.color = isWHITE ? Color.black : Color.white;
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
Reference
이 문제에 관하여(Unity3D/C#로 간단한 리버시(오셀로)를 만든다! ! ~Part1~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/t-o2mt/items/40e4bca24011dd88d8a7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)