Untitled
unknown
plain_text
3 years ago
4.1 kB
15
Indexable
using UnityEngine;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.EventSystems;
public class GameController : MonoBehaviour {
private CubePos nowCube = new CubePos(0, 1, 0);
public float cubeChangePlaceSpeed = 0.5f;
public Transform cubeToPlace;
private float camMoveToYPosition, camMoveSpeed = 2f;
public GameObject cubeToCreate, allCubes;
public GameObject[] canvasStartPage;
private Rigidbody allCubesRb;
public Color[] bgColors;
private bool IsLose, firstCube;
private List<Vector3> allCubesPositions = new List<Vector3> {
new Vector3(0, 0, 0),
new Vector3(1, 0, 0),
new Vector3(-1, 0, 0),
new Vector3(0, 1, 0),
new Vector3(0, 0, 1),
new Vector3(0, 0, -1),
new Vector3(1, 0, 1),
new Vector3(-1, 0, -1),
new Vector3(-1, 0, 1),
new Vector3(1, 0, -1),
};
private int prevCountMaxHorizontal;
private Transform mainCam;
private Coroutine showCubePlace;
private void Start() {
mainCam = Camera.main.transform;
camMoveToYPosition = 5.9f + nowCube.y - 1f;
allCubesRb = allCubes.GetComponent<Rigidbody>();
showCubePlace = StartCoroutine(ShowCubePlace());
}
private void Update() {
if((Input.GetMouseButtonDown(0) || Input.touchCount > 0) && cubeToPlace != null && allCubes != null && !EventSystem.current.IsPointerOverGameObject()) {
#if !UNITY_EDITOR
if (Input.GetTouch(0).phase != TouchPhase.Began)
return;
#endif
if (!firstCube) {
firstCube = true;
foreach (GameObject obj in canvasStartPage)
Destroy(obj);
}
GameObject newCube = Instantiate(
cubeToCreate,
cubeToPlace.position,
Quaternion.identity) as GameObject;
newCube.transform.SetParent(allCubes.transform);
nowCube.setVector(cubeToPlace.position);
allCubesPositions.Add(nowCube.getVector());
allCubesRb.isKinematic = true;
allCubesRb.isKinematic = false;
SpawnPositions();
MoveCameraChangeBg();
}
if(!IsLose && allCubesRb.velocity.magnitude > 0.1f) {
Destroy(cubeToPlace.gameObject);
IsLose = true;
StopCoroutine(showCubePlace);
}
mainCam.localPosition = Vector3.MoveTowards(mainCam.localPosition,
new Vector3(mainCam.localPosition.x, camMoveToYPosition, mainCam.localPosition.z),
camMoveSpeed * Time.deltaTime);
}
IEnumerator ShowCubePlace() {
while(true) {
SpawnPositions();
yield return new WaitForSeconds(cubeChangePlaceSpeed);
}
}
private void SpawnPositions() {
List<Vector3> positions = new List<Vector3>();
if(IsPositionEmpty(new Vector3(nowCube.x + 1, nowCube.y, nowCube.z))
&& nowCube.x + 1 != cubeToPlace.position.x)
positions.Add(new Vector3(nowCube.x + 1, nowCube.y, nowCube.z));
if (IsPositionEmpty(new Vector3(nowCube.x - 1, nowCube.y, nowCube.z))
&& nowCube.x - 1 != cubeToPlace.position.x)
positions.Add(new Vector3(nowCube.x - 1, nowCube.y, nowCube.z));
if (IsPositionEmpty(new Vector3(nowCube.x, nowCube.y + 1, nowCube.z))
&& nowCube.y + 1 != cubeToPlace.position.y)
positions.Add(new Vector3(nowCube.x, nowCube.y + 1, nowCube.z));
if (IsPositionEmpty(new Vector3(nowCube.x, nowCube.y - 1, nowCube.z))
&& nowCube.y - 1 != cubeToPlace.position.y)
positions.Add(new Vector3(nowCube.x, nowCube.y - 1, nowCube.z));
if (IsPositionEmpty(new Vector3(nowCube.x, nowCube.y, nowCube.z + 1))
&& nowCube.z + 1 != cubeToPlace.position.z)
positions.Add(new Vector3(nowCube.x,Editor is loading...