如何在Unity [c#]中每次启动游戏时在随机位置显示精灵?

时间:2017-06-14 11:44:06

标签: c# unity3d

我正在制作泡泡射手复制品,我遇到了在随机场所泡泡的问题,我应该在背景课中创建它们的数组吗? 例如,我有类Sprite1和Sprite2,我想在后台的随机位置显示它们我该怎么办? 这是它的外观。 http://imgur.com/a/DGpZj 下面是我试图通过for循环显示它,但不知道方法。

void Start () {
    Random.Range(0f,4.5f);
    for (int i = 0; i < 100; i++)
    {
        Sprite.Create(?)

    }

}

1 个答案:

答案 0 :(得分:2)

在后台随机显示 气泡取决于你的&#34;随机&#34;单词表示:如果它在网格上随机地完全随机,它们可以覆盖其他气泡,......

所以,这是使用网格生成解决问题的第一种方法:要生成气泡,您可以使用Instantiate方法或创建新的GameObject

您的游戏似乎是2D游戏,所以我强烈建议您寻找Unity UI tutorials。一旦您了解了UI系统的基础知识,就创建一个 Canvas 并向其添加一个空的游戏对象。之后您可以为其分配以下脚本:

using UnityEngine;
using UnityEngine.UI;

[RequireComponent(typeof(RectTransform))]
public class TestScript: MonoBehaviour
{
    [SerializeField]
    private float m_BubbleSize;

    [SerializeField]
    private int m_BubbleColumns;
    [SerializeField]
    private int m_BubbleRows;

    [SerializeField]
    private Sprite[] m_BubbleSprites;

    private GameObject[][] m_Bubbles;

    void Start()
    {
        GenerateBubbles();
    }

    private void GenerateBubbles()
    {
        // Position of the most top left bubble
        Vector3 initialPosition = GetComponent<RectTransform>().position;
        initialPosition.y += GetComponent<RectTransform>().rect.height * 0.5f;
        initialPosition.y -= 0.5f * m_BubbleSize;
        initialPosition.x -= (m_BubbleColumns - 1) * 0.5f * m_BubbleSize;
        initialPosition.x -= 0.25f * m_BubbleSize;

        // Rows height: comes from https://en.wikipedia.org/wiki/Close-packing_of_equal_spheres
        float rowsHeight = Mathf.Sqrt(6.0f * m_BubbleSize * m_BubbleSize) / 3.0f;

        // Bubbles references array
        m_Bubbles = new GameObject[m_BubbleColumns][];
        for(int i = 0; i < m_Bubbles.Length; i++)
        {
            m_Bubbles[i] = new GameObject[m_BubbleRows];
        }

        // Generation
        for(int x = 0; x < m_Bubbles.Length; x++)
        {
            for(int y = 0; y < m_Bubbles[x].Length; y++)
            {
                GameObject bubble = new GameObject("Bubble_" + x.ToString() + y.ToString(), new System.Type[] { typeof(RectTransform), typeof(Image), typeof(CircleCollider2D) });
                bubble.transform.SetParent(transform);

                if(y % 2 == 0)
                {
                    bubble.GetComponent<RectTransform>().position = initialPosition + new Vector3(x * m_BubbleSize, -y * rowsHeight, 0.0f);
                }
                else
                {
                    bubble.GetComponent<RectTransform>().position = initialPosition + new Vector3(0.5f * m_BubbleSize + x * m_BubbleSize, -y * rowsHeight, 0.0f);
                }
                bubble.GetComponent<RectTransform>().sizeDelta = new Vector2(m_BubbleSize, m_BubbleSize);

                bubble.GetComponent<Image>().sprite = m_BubbleSprites[Random.Range(0, m_BubbleSprites.Length)];

                bubble.GetComponent<CircleCollider2D>().radius = m_BubbleSize * 0.5f;
            }
        }
    }
}

要完成游戏,您需要完成以下几个步骤(可能不是详尽的列表):

  • 填充潜在&#34;单元格的列表&#34;气泡可以
  • 创建一个要被解雇的泡泡池(随机改组)
  • 写出射击+篮板动态(Unity 2D Physic可以提供帮助)
  • 在发生气泡后检测碰撞
  • 找到最近的&#34;单元格&#34;
  • 搜索是否连接了足够的气泡(如果已经破坏了它们)
  • 搜索某些气泡是否已经连接(如果是这样,也将其删除)
  • 可选实施评分系统(并保存评分)
  • 可选实施每个X气泡发布时新气泡排的显示
  • ...

希望这有帮助,