コード例 #1
0
    public ShellPuzzle GenerateShellPuzzle(int layers, float minSize, float maxSize)
    {
        ShellPuzzle puzzle = new GameObject("Shell Puzzle").AddComponent <ShellPuzzle>();

        for (int i = 0; i < layers; i++)
        {
            //lerp min to max by i/count
            float sphereSize = Mathf.Lerp(minSize, maxSize, (float)i / (layers - 1));
            //Create layer
            ShellLayer layer = Instantiate(shellLayerPrefab, puzzle.transform);

            //fit to size
            Bounds bounds = new Bounds(puzzle.transform.position, new Vector3(sphereSize, sphereSize, sphereSize));
            FitToSpace(layer.transform, layer.gameObject.MakeBoundingBoxForObjectRenderers(), bounds.center, bounds);

            //Rotate randomly
            layer.transform.rotation = Random.rotation;

            //disable
            layer.gameObject.SetActive(false);

            //add to list
            puzzle.shellLayersOrdered.Add(layer);
        }
        puzzle.shellLayersOrdered.Last().gameObject.SetActive(true);

        return(puzzle);
    }
コード例 #2
0
    public void PopLayer(ShellLayer layer)
    {
        layer.target.gameObject.SetActive(false);
        layer.myEffect.gameObject.SetActive(false);
        float force = 1;

        layer.leftHalf.AddComponent <Rigidbody>().AddForce(force * Vector3.up, ForceMode.Impulse);
        layer.rightHalf.AddComponent <Rigidbody>().AddForce(force * Vector3.up, ForceMode.Impulse);

        StartCoroutine(GenericCoroutines.DoAfterSeconds(() => layer.gameObject.SetActive(false), 2));

        if (shellLayersOrdered.IndexOf(layer) == 0)
        {
            Debug.Log("Show Prize!");
            artDisplay.gameObject.SetActive(true);
            StartCoroutine(GrowImageAndStopRotating(2.5f));
        }
        else
        {
            Debug.Log("Popping a layer");
            shellLayersOrdered[shellLayersOrdered.IndexOf(layer) - 1].gameObject.SetActive(true);
        }
    }