从零开始制作基于Unity引擎的宝石消消乐(二)
前言
上一篇文章說到游戲的設計,現在就來講一講游戲內操作方法的實現。
實現方法
1. Jewel.cs
在Jewel.cs中,主要是通過實現UnityEventSystem中的三個接口:IPointerEnterHandler,IPointerExitHandler,IPointerClickHandler,在OnPointerEnter與OnPointerExit中,控制光標在Jewel的移進或者移出時,選擇框Select的顯示或者消失。
public void OnPointerEnter(PointerEventData eventData){if(!isSelected)transform.Find("Select").gameObject.SetActive(true);}public void OnPointerExit(PointerEventData eventData){if(!isSelected)transform.Find("Select").gameObject.SetActive(false);}接著是OnPointerClick的作用就是控制Jewel的選中以及取消選中,在Jewel選中的時候判斷JewelManager中的lastSelected是否為空,是則賦值給lastSelected。如果lastSelected不為空則賦值給currentSelected。
PS:這里的本意是通過JewelManager來保存兩個Jewel對象,來實現兩個Jewel的交換。
最后是兩個Jewel交換的時候的Move方法以及Move的協程MoveCoroutine,通過使用協程來控制,移動交換的時間間隔。控制具體操作是先找到該對象的子對象,再把該子對象賦值給目標對象,最后再調用DOTween插件的DOLocalMove方法把該子對象移動到目標對象的Vector3.zero位置。
public void Move(GameObject obj){if(moveCoroutine!=null){StopCoroutine(moveCoroutine);}moveCoroutine = MoveCoroutine(obj);StartCoroutine(moveCoroutine);}private IEnumerator MoveCoroutine(GameObject obj){GameObject childObj = gameObject.transform.Find("JewelPicture").gameObject;childObj.transform.SetParent(obj.transform);childObj.transform.DOLocalMove(Vector3.zero, GameManager.Instance.moveDownTime);yield return new WaitForSeconds(GameManager.Instance.moveDownTime);}2. JewelManager.cs
JewelManager主要是用來管理Jewel的操作的,主要的操作方法有交換ExchangeJewel,判斷倆Jewel是否相鄰的IsConnected,恢復兩個Jewel的原始位置ResetOriginJewel,以及重置所有Jewel的選擇ResetAllJewelSelected。
先說ExchangeJewel,我把它設計成一個協程來控制Jewel移動時候的動畫時間間隔,不然會出現閃現的效果。它通過CallExchangeJewel喚醒,在CallExchangeJewel的方法中,通過調用IsConnected判斷JewelManager中的currentSelected以及lastSelected是否相鄰來決定是否啟用協程,若不相鄰,則重置所有Jewel的選中。若兩者相鄰,則啟用協程ExchangeJewel。
最后強調一下里面的isReset就是判斷是否調用過了ResetOriginJewel,因為調用了,ResetOriginJewel就證明了兩者是不匹配的,所以不需要調用到GameManager中的MatchRule匹配方法了。
public void ResetOriginJewel(){isReset = true;AudioManager.Instance.PlayAudio("Audio/sfx_lock");//啟用協程,讓兩個Jewel回到原來的位置StartCoroutine(ExchangeJewel(lastSelected, currentSeleted));ResetAllJewelSelected();GameManager.Instance.canSelect = true;}接下來是ResetAllJewelSelected以及IsConnected的具體方法。ResetAllJewelSelected是用來重置所有選擇的,IsConnected是判斷兩個對象是否相鄰。
public void ResetAllJewelSelected(){lastSelected = currentSeleted = null;GameManager.Instance.SetAllJewelSelectedIsFalse();}public bool IsConnected(GameObject obj1,GameObject obj2){Vector3 obj1Position = GameManager.Instance.GetJewelPosition(obj1);Vector3 obj2Position = GameManager.Instance.GetJewelPosition(obj2);return ((obj1Position.x == obj2Position.x && Mathf.Abs(obj1Position.y - obj2Position.y) == 1) || (obj1Position.y == obj2Position.y && Mathf.Abs(obj1Position.x - obj2Position.x) == 1)) ? true : false;}總結
以上就是游戲具體操作的實現方法,接下來將要講游戲核心玩法的實現。
總結
以上是生活随笔為你收集整理的从零开始制作基于Unity引擎的宝石消消乐(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Code Pratice】—— 递增三
- 下一篇: 【c语言】链表(完整版)