unity3d-学习笔记10-卡牌游戏制作(实现点击卡片消失,并将后面的卡片填充的功能)
实现点击卡片消失,并将后面的卡片填充的功能
这里需要一点小逻辑,我没有看大佬们的,完全是自己手敲(膨胀了),花了一个下午的时间,只能勉强完成这个功能,还有很多写的时候就知道不严谨,还可以优化的地方有很多,时间关系还是先写上去了
上代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using DG.Tweening;
public class Desktop : MonoBehaviour
{
// Start is called before the first frame update
public CanvasGroup all;
public Transform MianTrasfrom;
private float way;
private GameObject go;
public static List<string> des = new List<string>();
private int index;
void Start()
{
all.DOFade(0, 0);
way = 1f;
StartCoroutine(ShowScene());
foreach (string text in StaticRes.texts)
{
des.Add(text);
}
}
// Update is called once per frame
void Update()
{
UpdateData();
}
IEnumerator ShowScene()
{
yield return new WaitForSeconds(1f);
all.DOFade(1, 1);
yield return new WaitForSeconds(1f);
for (int i = 0; i <= 2; i++)
{
go = (GameObject)Instantiate(Resources.Load("Events/Events"), MianTrasfrom.position, MianTrasfrom.rotation);
go.transform.parent = MianTrasfrom;//设置实例化对象的父级
go.transform.localScale = Vector3.one;//设置缩放比例1,1,1
way += 4.5f;
go.transform.Translate(new Vector3(MianTrasfrom.position.x + way, 0, 0));
Image[] image = go.GetComponentsInChildren<Image>();
int pic = i + 1;
image[1].sprite = Resources.Load("Events/" + pic, typeof(Sprite)) as Sprite;
Text text = go.GetComponentInChildren<Text>();
text.DOText(des[i], 1);
}
way = 1f;
}
void UpdateData()
{
if (Clip.isUpdate && des.Count>=3)
{
for (int i = 0;i<GameObject.Find("EventsController").transform.childCount;i++)
{
Destroy(GameObject.Find("EventsController").transform.GetChild(i).gameObject);
}
for (int i = 0; i <= 2; i++)
{
GameObject go = (GameObject)Instantiate(Resources.Load("Events/Events"), MianTrasfrom.position, MianTrasfrom.rotation);
go.transform.parent = MianTrasfrom;//设置实例化对象的父级
go.transform.localScale = Vector3.one;//设置缩放比例1,1,1
way += 4.5f;
go.transform.Translate(new Vector3(MianTrasfrom.position.x + way, 0, 0));
Image[] image = go.GetComponentsInChildren<Image>();
image[1].sprite = Resources.Load("Events/" +Clip.pics[i], typeof(Sprite)) as Sprite;
Text text = go.GetComponentInChildren<Text>();
text.DOText(des[i], 1);
index++;
}
Clip.isUpdate = false;
way = 1f;
}
if (Clip.isUpdate && des.Count == 2)
{
for (int i = 0; i < GameObject.Find("EventsController").transform.childCount; i++)
{
Destroy(GameObject.Find("EventsController").transform.GetChild(i).gameObject);
}
for (int i = 0; i <= 1; i++)
{
GameObject go = (GameObject)Instantiate(Resources.Load("Events/Events"), MianTrasfrom.position, MianTrasfrom.rotation);
go.transform.parent = MianTrasfrom;//设置实例化对象的父级
go.transform.localScale = Vector3.one;//设置缩放比例1,1,1
way += 7f;
go.transform.Translate(new Vector3(MianTrasfrom.position.x + way, 0, 0));
Image[] image = go.GetComponentsInChildren<Image>();
image[1].sprite = Resources.Load("Events/" + Clip.pics[i], typeof(Sprite)) as Sprite;
Text text = go.GetComponentInChildren<Text>();
text.DOText(des[i], 1);
index++;
}
Clip.isUpdate = false;
way = 1f;
}
if (Clip.isUpdate && des.Count == 1)
{
for (int i = 0; i < GameObject.Find("EventsController").transform.childCount; i++)
{
Destroy(GameObject.Find("EventsController").transform.GetChild(i).gameObject);
}
GameObject go = (GameObject)Instantiate(Resources.Load("Events/Events"), MianTrasfrom.position, MianTrasfrom.rotation);
go.transform.parent = MianTrasfrom;//设置实例化对象的父级
go.transform.localScale = Vector3.one;//设置缩放比例1,1,1
way += 10f;
go.transform.Translate(new Vector3(MianTrasfrom.position.x + way, 0, 0));
Image[] image = go.GetComponentsInChildren<Image>();
image[1].sprite = Resources.Load("Events/" + Clip.pics[0], typeof(Sprite)) as Sprite;
Text text = go.GetComponentInChildren<Text>();
text.DOText(des[0], 1);
index++;
Clip.isUpdate = false;
way = 1f;
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using DG.Tweening;
public class Clip : MonoBehaviour
{
// Start is called before the first frame update
private CanvasGroup one;
private int index;
public static bool isUpdate;
public static List<int> pics = new List<int>();
private string text;
void Start()
{
isUpdate = false;
pics.Add(1);
pics.Add(2);
pics.Add(3);
pics.Add(4);
pics.Add(5);
pics.Add(6);
pics.Add(7);
pics.Add(8);
pics.Add(9);
pics.Add(10);
pics.Add(11);
pics.Add(12);
pics.Add(13);
pics.Add(14);
pics.Add(15);
}
// Update is called once per frame
void Update()
{
}
public void SelectAndRemove()
{
one = GetComponent<CanvasGroup>();
text = one.GetComponentInChildren<Text>().text;
index = Desktop.des.IndexOf(text);
StartCoroutine(Disappear());
}
IEnumerator Disappear()
{
one.DOFade(0, 1);
yield return new WaitForSeconds(1f);
Desktop.des.RemoveAt(index);
Clip.pics.RemoveAt(index);
isUpdate = true;
if (text == "“你们上当了呢”")
{
SceneManager.LoadScene("FightScene");
}
}
}
实现更换unity启动的图标
这里一通乱点就可以了
匆匆结尾,还有打牌的逻辑没实现,加油!