iT邦幫忙

1

Unity 如何將圖片隨機更改位置(九宮格)

  • 分享至 

  • xImage

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System;

public class Game_10946032 : MonoBehaviour
{
public GameObject img1;
public GameObject img2;
public GameObject img3;
public GameObject img4;
public GameObject img5;
public GameObject img6;
public GameObject img7;
public GameObject img8;
public GameObject img9;
public GameObject txt_count;

public Sprite pic1;
public Sprite pic2;
public Sprite pic3;
public Sprite pic4;
public Sprite pic5;
public Sprite pic6;
public Sprite pic7;
public Sprite pic8;
public Sprite pic9;

// Start is called before the first frame update
void Start()
{
    global.result = "拼圖失敗"; //預設為失敗

    Sprite[] list = new Sprite[8];
    list[0] = pic1; //將圖片放入陣列
    list[1] = pic2;
    list[2] = pic3;
    list[3] = pic4;
    list[4] = pic5;
    list[5] = pic6;
    list[6] = pic7;
    list[7] = pic8;
}

// Update is called once per frame
void Update()
{
    if (img1.GetComponent<Image>().sprite == pic1 && img2.GetComponent<Image>().sprite == pic2 && img3.GetComponent<Image>().sprite == pic3 && img4.GetComponent<Image>().sprite == pic4 && img5.GetComponent<Image>().sprite == pic5 && img6.GetComponent<Image>().sprite == pic6 && img7.GetComponent<Image>().sprite == pic7 && img8.GetComponent<Image>().sprite == pic8)
    {
    img9.GetComponent<Image>().sprite = Resources.Load<Sprite>("圖_09"); //放入圖9
    global.result = "拼圖成功";
    }
}

public void Move1()
{
    if (img2.GetComponent<Image>().sprite == null || img4.GetComponent<Image>().sprite == null)
    {
        if (img2.GetComponent<Image>().sprite == null) //如果圖2是空位置
        {
            img2.GetComponent<Image>().sprite = img1.GetComponent<Image>().sprite; //圖1跑到圖2的位置
            img1.GetComponent<Image>().sprite = null; //圖1就變空位置
            global.count++; //移動次數加一
            txt_count.GetComponent<Text>().text = global.count.ToString(); //將移動次數顯示在text上
        }
        else
        {
            img4.GetComponent<Image>().sprite = img1.GetComponent<Image>().sprite; //圖1跑到圖4的位置
            img1.GetComponent<Image>().sprite = null; //圖1就變空位置
            global.count++; //移動次數加一
            txt_count.GetComponent<Text>().text = global.count.ToString(); //將移動次數顯示在text上
        }
    }
}
public void Move2()
{
    if (img1.GetComponent<Image>().sprite == null || img3.GetComponent<Image>().sprite == null || img5.GetComponent<Image>().sprite == null)
    {
        if (img1.GetComponent<Image>().sprite == null) //如果圖1是空位置
        {
            img1.GetComponent<Image>().sprite = img2.GetComponent<Image>().sprite; //圖2跑到圖1的位置
            img2.GetComponent<Image>().sprite = null; //圖2就變空位置
            global.count++; //移動次數加一
            txt_count.GetComponent<Text>().text = global.count.ToString(); //將移動次數顯示在text上
        }
        else if (img3.GetComponent<Image>().sprite == null) //如果圖3是空位置
        {
            img3.GetComponent<Image>().sprite = img2.GetComponent<Image>().sprite; //圖2跑到圖3的位置
            img2.GetComponent<Image>().sprite = null; //圖2就變空位置
            global.count++; //移動次數加一
            txt_count.GetComponent<Text>().text = global.count.ToString(); //將移動次數顯示在text上
        }
        else
        {
            img5.GetComponent<Image>().sprite = img2.GetComponent<Image>().sprite; //圖2跑到圖5的位置
            img2.GetComponent<Image>().sprite = null; //圖2就變空位置
            global.count++; //移動次數加一
            txt_count.GetComponent<Text>().text = global.count.ToString(); //將移動次數顯示在text上
        }
    }
}
public void Move3()
{
    if (img2.GetComponent<Image>().sprite == null || img6.GetComponent<Image>().sprite == null)
    {
        if (img2.GetComponent<Image>().sprite == null)
        {
            img2.GetComponent<Image>().sprite = img3.GetComponent<Image>().sprite; //圖3跑到圖2的位置
            img3.GetComponent<Image>().sprite = null; //圖3就變空位置
            global.count++; //移動次數加一
            txt_count.GetComponent<Text>().text = global.count.ToString(); //將移動次數顯示在text上
        }
        else
        {
            img6.GetComponent<Image>().sprite = img3.GetComponent<Image>().sprite; //圖3跑到圖6的位置
            img3.GetComponent<Image>().sprite = null; //圖3就變空位置
            global.count++; //移動次數加一
            txt_count.GetComponent<Text>().text = global.count.ToString(); //將移動次數顯示在text上
        }
    }
}
public void Move4()
{
    if (img1.GetComponent<Image>().sprite == null || img5.GetComponent<Image>().sprite == null || img7.GetComponent<Image>().sprite == null)
    {
        if (img1.GetComponent<Image>().sprite == null) //如果圖1是空位置
        {
            img1.GetComponent<Image>().sprite = img4.GetComponent<Image>().sprite; //圖4跑到圖1的位置
            img4.GetComponent<Image>().sprite = null; //圖4就變空位置
            global.count++; //移動次數加一
            txt_count.GetComponent<Text>().text = global.count.ToString(); //將移動次數顯示在text上
        }
        else if (img5.GetComponent<Image>().sprite == null) //如果圖5是空位置
        {
            img5.GetComponent<Image>().sprite = img4.GetComponent<Image>().sprite; //圖4跑到圖5的位置
            img4.GetComponent<Image>().sprite = null; //圖4就變空位置
            global.count++; //移動次數加一
            txt_count.GetComponent<Text>().text = global.count.ToString(); //將移動次數顯示在text上
        }
        else
        {
            img7.GetComponent<Image>().sprite = img4.GetComponent<Image>().sprite; //圖4跑到圖7的位置
            img4.GetComponent<Image>().sprite = null; //圖4就變空位置
            global.count++; //移動次數加一
            txt_count.GetComponent<Text>().text = global.count.ToString(); //將移動次數顯示在text上
        }
    }
}
public void Move5()
{
    if (img2.GetComponent<Image>().sprite == null || img4.GetComponent<Image>().sprite == null || img6.GetComponent<Image>().sprite == null || img8.GetComponent<Image>().sprite == null)
    {
        if (img2.GetComponent<Image>().sprite == null) //如果圖2是空位置
        {
            img2.GetComponent<Image>().sprite = img5.GetComponent<Image>().sprite; //圖5跑到圖2的位置
            img5.GetComponent<Image>().sprite = null; //圖5就變空位置
            global.count++; //移動次數加一
            txt_count.GetComponent<Text>().text = global.count.ToString(); //將移動次數顯示在text上
        }
        else if (img4.GetComponent<Image>().sprite == null) //如果圖4是空位置
        {
            img4.GetComponent<Image>().sprite = img5.GetComponent<Image>().sprite; //圖5跑到圖4的位置
            img5.GetComponent<Image>().sprite = null; //圖5就變空位置
            global.count++; //移動次數加一
            txt_count.GetComponent<Text>().text = global.count.ToString(); //將移動次數顯示在text上
        }
        else if (img6.GetComponent<Image>().sprite == null) //如果圖6是空位置
        {
            img6.GetComponent<Image>().sprite = img5.GetComponent<Image>().sprite; //圖5跑到圖6的位置
            img5.GetComponent<Image>().sprite = null; //圖5就變空位置
            global.count++; //移動次數加一
            txt_count.GetComponent<Text>().text = global.count.ToString(); //將移動次數顯示在text上
        }
        else
        {
            img8.GetComponent<Image>().sprite = img5.GetComponent<Image>().sprite; //圖5跑到圖8的位置
            img5.GetComponent<Image>().sprite = null; //圖5就變空位置
            global.count++; //移動次數加一
            txt_count.GetComponent<Text>().text = global.count.ToString(); //將移動次數顯示在text上
        }
    }
}
public void Move6()
{
    if (img3.GetComponent<Image>().sprite == null || img5.GetComponent<Image>().sprite == null || img9.GetComponent<Image>().sprite == null)
    {
        if (img3.GetComponent<Image>().sprite == null) //如果圖3是空位置
        {
            img3.GetComponent<Image>().sprite = img6.GetComponent<Image>().sprite; //圖6跑到圖3的位置
            img6.GetComponent<Image>().sprite = null; //圖6就變空位置
            global.count++; //移動次數加一
            txt_count.GetComponent<Text>().text = global.count.ToString(); //將移動次數顯示在text上
        }
        else if (img5.GetComponent<Image>().sprite == null) //如果圖5是空位置
        {
            img5.GetComponent<Image>().sprite = img6.GetComponent<Image>().sprite; //圖6跑到圖5的位置
            img6.GetComponent<Image>().sprite = null; //圖6就變空位置
            global.count++; //移動次數加一
            txt_count.GetComponent<Text>().text = global.count.ToString(); //將移動次數顯示在text上
        }
        else
        {
            img9.GetComponent<Image>().sprite = img6.GetComponent<Image>().sprite; //圖6跑到圖9的位置
            img6.GetComponent<Image>().sprite = null; //圖6就變空位置
            global.count++; //移動次數加一
            txt_count.GetComponent<Text>().text = global.count.ToString(); //將移動次數顯示在text上
        }
    }
}
public void Move7()
{
    if (img4.GetComponent<Image>().sprite == null || img8.GetComponent<Image>().sprite == null)
    {
        if (img4.GetComponent<Image>().sprite == null) //如果圖4是空位置
        {
            img4.GetComponent<Image>().sprite = img7.GetComponent<Image>().sprite; //圖7跑到圖4的位置
            img7.GetComponent<Image>().sprite = null; //圖7就變空位置
            global.count++; //移動次數加一
            txt_count.GetComponent<Text>().text = global.count.ToString(); //將移動次數顯示在text上
        }
        else
        {
            img8.GetComponent<Image>().sprite = img7.GetComponent<Image>().sprite; //圖7跑到圖8的位置
            img7.GetComponent<Image>().sprite = null; //圖7就變空位置
            global.count++; //移動次數加一
            txt_count.GetComponent<Text>().text = global.count.ToString(); //將移動次數顯示在text上
        }
    }
}
public void Move8()
{
    if (img5.GetComponent<Image>().sprite == null || img7.GetComponent<Image>().sprite == null || img9.GetComponent<Image>().sprite == null)
    {
        if (img5.GetComponent<Image>().sprite == null) //如果圖5是空位置
        {
            img5.GetComponent<Image>().sprite = img8.GetComponent<Image>().sprite; //圖8跑到圖5的位置
            img8.GetComponent<Image>().sprite = null; //圖8就變空位置
            global.count++; //移動次數加一
            txt_count.GetComponent<Text>().text = global.count.ToString(); //將移動次數顯示在text上
        }
        else if (img7.GetComponent<Image>().sprite == null) //如果圖7是空位置
        {
            img7.GetComponent<Image>().sprite = img8.GetComponent<Image>().sprite; //圖8跑到圖7的位置
            img8.GetComponent<Image>().sprite = null; //圖8就變空位置
            global.count++; //移動次數加一
            txt_count.GetComponent<Text>().text = global.count.ToString(); //將移動次數顯示在text上
        }
        else
        {
            img9.GetComponent<Image>().sprite = img8.GetComponent<Image>().sprite; //圖8跑到圖9的位置
            img8.GetComponent<Image>().sprite = null; //圖8就變空位置
            global.count++; //移動次數加一
            txt_count.GetComponent<Text>().text = global.count.ToString(); //將移動次數顯示在text上
        }
    }
}
public void Move9()
{
    if (img6.GetComponent<Image>().sprite == null || img8.GetComponent<Image>().sprite == null)
    {
        if (img6.GetComponent<Image>().sprite == null) //如果圖6是空位置
        {
            img6.GetComponent<Image>().sprite = img9.GetComponent<Image>().sprite; //圖9跑到圖6的位置
            img9.GetComponent<Image>().sprite = null; //圖9就變空位置
            global.count++; //移動次數加一
            txt_count.GetComponent<Text>().text = global.count.ToString(); //將移動次數顯示在text上
        }
        else
        {
            img8.GetComponent<Image>().sprite = img9.GetComponent<Image>().sprite; //圖9跑到圖8的位置
            img9.GetComponent<Image>().sprite = null; //圖9就變空位置
            global.count++; //移動次數加一
            txt_count.GetComponent<Text>().text = global.count.ToString(); //將移動次數顯示在text上
        }
    }
}

}

你可以改用陣列來寫
像是GameObject[] imageSlots
並且每個GameObject加上內含X Y座標的自訂類別
或用transform的XY座標
隨機調換圖片時會用到

移動圖片的方法加個參數
比方Click(GameObject clicked)
假設GameObject位置是這樣:
1 2 3
4 5 6
7 8 9
1號當原點 座標0,0
2號座標1,0
4號座標0,1
9號座標3,3
然後5號是空格的話
當你click點擊4號的時候
要檢查是不是跟目前的5號空格
只有X座標或只有Y座標差1
是的話就可以交換圖片(移動空格)

遊戲一開始可以先放上正確答案
然後馬上多次隨機挑選圖片移動
以便打亂圖片排列

以上只是很粗淺的說明
雖然你問的是怎麼隨機更改圖片位置
但我覺得更大的問題是
你需要先學好C#的基本功
像是陣列或者有參數的方法
直接挑戰做小遊戲雖然進步比較快
但過程可能很痛苦
簡單說就是不建議越級打怪啦
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友回答

立即登入回答