如何在Sprite Image达到90度时更改?

时间:2017-10-30 16:05:47

标签: c# unity3d unity5 leantween

我说我是初学者。

我在项目期间有一个问题。

我目前正在实施卡片匹配游戏。

当我开始游戏时,图像从外部路径(D:/ ..)加载。

我的问题在下面的代码中。

 public void createCardList()
        {
            int count_x = 0;
            int count_y = 0;

            GameObject parent_area = GameObject.Find("GameMain");
            List<int> num = createRandomIndex(createArrayIndex());

            for (int i = 0; i < card_list.Count; ++i)
            {
                if ((i % CARD_ROWS) == 0 && i > 0)
                {
                    count_y += 1;
                    count_x = 0;
                }

                GameObject card_prefab_load = Resources.Load("Prefabs/card") as GameObject;
                GameObject card_prefab_instantiate = Instantiate(card_prefab_load, card_prefab_load.transform.position, Quaternion.identity);

                float card_position_x = (CARD_WIDTH + CARD_SPACE) * (i % CARD_ROWS) - 290f;
                //Debug.Log("card_position_x" + card_position_x);
                float card_position_y = count_y * (CARD_HEIGHT + CARD_SPACE) - 280f;
                //Debug.Log("card_position_y" + card_position_y);

                card_prefab_instantiate.transform.SetParent(parent_area.transform);
                card_prefab_instantiate.transform.name = "card_" + num[i];
                card_prefab_instantiate.transform.localScale = new Vector3(1f, 1f, 1f);
                card_prefab_instantiate.transform.localPosition = new Vector3(card_position_x, card_position_y, 1f);

                StartCoroutine(firstRotateOriginalImage());
            }
        }

        // Rotate image
        private IEnumerator firstRotateOriginalImage()
        {
            yield return new WaitForSeconds(2f);

            GameObject findCardList = GameObject.Find("GameMain");

            for (int i = 0; i < findCardList.transform.childCount; ++i)
            {
                // I don't know what code to put in this part.
            }
        }

我想要实现的内容如下。

  1. 当卡片旋转值达到90度时,如何将外部导入的图像更改为子GameObject的Sprite图像?

  2. 如何在第一个任务完成后将子对象旋转360度?

  3. 例如,下图。 enter image description here

    箭头表示翻转卡片的顺序。 另外,在12个GameObjects中,六个GameObjects试图实现一个共同的图像。

    我不太了解。我需要你的帮助。

2 个答案:

答案 0 :(得分:0)

有很多方法可以做到这一点......

  1. transform.Rotate(...)
  2. transform.RotateAround(...)
  3. transform.localEulerAngles = transform.localEulerAngles.X|Y|Z + amount
  4. transform.localRotation = transform.localRotation*relativeRotation /*= a Quaternion*/
  5. 其他完全......

答案 1 :(得分:0)

我很怀疑我对你的问题有多了解...... 但似乎你想简单地将卡片翻过来不是吗?

我采取的方法是将每张卡片作为脸部(在Y中旋转180度)和背面的组合,两者都是空游戏对象的孩子。

这样您只需使用transform.Rotate(0, 180, 0)

旋转卡片对象即可

要在协程中使用它,你可以做到

//Speed of animation (here 0.55 seconds)
float degreesPerSecond = 200f;

//The amount you want to rotate
float maxDegrees = 180f;

//Animate
for (float f = maxDegrees; f < 0;)
{
    //How much to rotate
    float rot = degreesPerSecond * Time.deltaTime;

    //Rotate children
    foreach(var child in transform)
        child.Rotate(0, rot, 0);

    //Record rotation
    f -= rot;

    //Wait next frame
    yield return null;
}

//Round to desired rotation
foreach(var child in transform)
        child.position = new Vector3(child.position.x, maxDegrees, child.position.z);