项目:
using UnityEngine; using System.Collections; namespace VoidGame { public class Constant : MonoBehaviour { public static string m_plateTag = "Plate"; //碟标签 public static string m_ingredientTag = "Ingredient"; //原材料标签 public static string m_trashBinTag = "TrashBin"; //垃圾桶标签 public static string m_customerTag = "Customer"; //客户标签 public static string m_dragTag = "Drag"; //拖动的标签 public static string m_dragSortingLayer = "Drag"; //拖动的排序层 public static string m_uiSortingLayer = "UI"; //UI的排序层 ; //在盘子中的原材料上限 } }
Constant
using UnityEngine; using System.Collections; namespace VoidGame { public class Customer : MonoBehaviour { public Product m_product; //客户需要的产品 public AudioClip m_deliverySuccessAudioClip; //交付成功音乐 public AudioClip m_deliveryFailedAudioClip; //交付失败音乐 private GameManager m_gameManager; private SpriteRenderer m_customerSpriteRenderer; //客户精灵渲染器 private SpriteRenderer m_productSpriteRenderer; //产品精灵渲染器 private SpriteRenderer[] m_ingredientSpriteRenderers; //原料精灵渲染器 private AudioSource m_audioSource; //音乐 void Start() { m_gameManager = GameManager.m_instance; m_audioSource = GetComponent<AudioSource>(); InitProduct(); LoadProductAndIngredientsImage(); } //初始化产品 void InitProduct() { m_product = new Product(); m_product.m_productID = Random.Range(,); m_product.m_productPrice = Random.Range(,); ,); m_product.m_totalIngredients = new int[ingredientCount]; ;i < ingredientCount;i++) { m_product.m_totalIngredients[i] = Random.Range(,); } } //加载产品和原料图片 void LoadProductAndIngredientsImage() { m_ingredientSpriteRenderers = new SpriteRenderer[m_product.m_totalIngredients.Length]; SpriteRenderer[] spriteRenderers = transform.GetComponentsInChildren<SpriteRenderer>(); m_customerSpriteRenderer = spriteRenderers[]; m_productSpriteRenderer = spriteRenderers[]; m_productSpriteRenderer.sprite = m_gameManager.m_productSprites[m_product.m_productID - ]; ;i < m_product.m_totalIngredients.Length;i++) { m_ingredientSpriteRenderers[i] = spriteRenderers[i + ]; } ;i < spriteRenderers.Length;i++) { spriteRenderers[i].sprite = null; } ;i < m_ingredientSpriteRenderers.Length;i++) { m_ingredientSpriteRenderers[i].sprite = m_gameManager.m_ingredientSprites[m_product.m_totalIngredients[i]]; m_ingredientSpriteRenderers[i].transform.localScale = ); } } void OnTriggerEnter2D(Collider2D other) { //盘子移动到客户上 if(other.CompareTag(Constant.m_plateTag)) { m_gameManager.m_dragPlateArrivedCustomer = true; Color newColor = m_customerSpriteRenderer.material.color; newColor.a = 0.5f; m_customerSpriteRenderer.material.color = newColor; } } void OnTriggerExit2D(Collider2D other) { //盘子离开客户 if(other.CompareTag(Constant.m_plateTag) && m_gameManager.m_dragPlateArrivedCustomer) { m_gameManager.m_dragPlateArrivedCustomer = false; Color newColor = m_customerSpriteRenderer.material.color; newColor.a = 1f; m_customerSpriteRenderer.material.color = newColor; } } //客户检查原料是否正确 public void CheckPlate() { //获取盘子里的原料列表 Ingredient[] ingredients = FindObjectOfType<Plate>().GetComponentsInChildren<Ingredient>(); bool isMatch = true; if(ingredients.Length == m_product.m_totalIngredients.Length) { ;i < ingredients.Length;i++) { ;j < m_product.m_totalIngredients.Length;j++) { if(ingredients[i].m_ingredientID == m_product.m_totalIngredients[j]) { Debug.Log(); break; } ) { isMatch = false; } } if(!isMatch) { break; } } } else { isMatch = false; } if(isMatch) { if(!m_audioSource.isPlaying) { m_audioSource.clip = m_deliverySuccessAudioClip; m_audioSource.Play(); } } else { if(!m_audioSource.isPlaying) { m_audioSource.clip = m_deliveryFailedAudioClip; m_audioSource.Play(); } } InitProduct(); LoadProductAndIngredientsImage(); ;i >= ;i--) { Destroy(m_gameManager.m_ingredientsInPlate[i]); m_gameManager.m_ingredientsInPlate.RemoveAt(i); } } } }
Customer
using UnityEngine; using System.Collections; using System.Collections.Generic; namespace VoidGame { public class GameManager : MonoBehaviour { public static GameManager m_instance; //单例 public GameObject m_ingredientBackgroundPrefab; //原料背景预设 public List<GameObject> m_ingredients; //原料预设列表 public List<Sprite> m_productSprites; //产品精灵列表 public List<Sprite> m_ingredientSprites; //原料精灵列表 [HideInInspector] public GameObject m_dragIngredient; //拖动中的原材料 [HideInInspector] public bool m_dragIngredientArrived = false; //原材料是否到达碟内 [HideInInspector] public bool m_dragPlateArrivedTrashBin = false; //盘子是否到达垃圾桶 [HideInInspector] public bool m_dragPlateArrivedCustomer = false; //盘子是否到达客户 [HideInInspector] public List<GameObject> m_ingredientsInPlate = new List<GameObject>(); //在盘子中的原材料 private void Awake() { m_instance = this; } private void Start() { GenerateIngredientBackground(); } //生成原料背景和原料 private void GenerateIngredientBackground() { Transform ingredientParentTransform = transform.Find("/Ingredients"); Transform ingredientBackgroundParentTransform = transform.Find("/Background/IngredientsBackground"); Vector3 newPosition = ingredientBackgroundParentTransform.position; newPosition.y = ingredientBackgroundParentTransform.position.y + ; ;i < ;i++) { newPosition.x = ingredientBackgroundParentTransform.position.x - ; newPosition.y--; ;j < ;j++) { newPosition.x++; GameObject ingredientBackground = GameObject.Instantiate(m_ingredientBackgroundPrefab,newPosition,Quaternion.identity,ingredientBackgroundParentTransform) as GameObject; GameObject.Instantiate(m_ingredients[i * + j],newPosition,Quaternion.identity,ingredientParentTransform); } } } } }
GameManager
using UnityEngine; using System.Collections; namespace VoidGame { public class Ingredient : MonoBehaviour { public int m_ingredientID; //原料ID private AudioSource m_audioSource; private GameManager m_gameManager; private void Start() { m_gameManager = GameManager.m_instance; m_audioSource = GetComponent<AudioSource>(); } protected void Update() { if(m_gameManager.m_dragIngredient != null) { FollowCursor(); } } //点击原材料,创建一个相同的可拖动的原材料 private void OnMouseDown() { if(m_gameManager.m_ingredientsInPlate.Count < Constant.m_maxIngredientsInPlate) { CreateDragIngredient(); } } //抬起鼠标时原料在盘子里,将原料设置为盘子的子对象. //抬起鼠标时原料不在盘子里,删除这个原料 private void OnMouseUp() { if(m_gameManager.m_dragIngredient != null && m_gameManager.m_dragIngredientArrived) { GameObject plate = GameObject.FindGameObjectWithTag(Constant.m_plateTag); m_gameManager.m_dragIngredient.transform.SetParent(plate.transform); m_gameManager.m_dragIngredient.transform.position = plate.transform.position; m_gameManager.m_dragIngredient.GetComponent<BoxCollider2D>().enabled = false; m_gameManager.m_dragIngredient.transform.localScale = ); m_gameManager.m_ingredientsInPlate.Add(m_gameManager.m_dragIngredient); m_gameManager.m_dragIngredient = null; m_gameManager.m_dragIngredientArrived = false; } else { Destroy(m_gameManager.m_dragIngredient); m_gameManager.m_dragIngredient = null; } } //创建可拖动的原材料 private void CreateDragIngredient() { Vector3 newPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition); newPosition.z = ; m_gameManager.m_dragIngredient = Instantiate(gameObject,newPosition,Quaternion.identity) as GameObject; m_gameManager.m_dragIngredient.GetComponent<SpriteRenderer>().sortingLayerName = Constant.m_dragSortingLayer; //m_gameManager.m_dragIngredient.GetComponent<SpriteRenderer>().tag = Constant.m_dragTag; if(!m_audioSource.isPlaying) { m_audioSource.Play(); } } //原材料跟随鼠标 private void FollowCursor() { Vector3 newPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition); newPosition.z = ; m_gameManager.m_dragIngredient.transform.position = newPosition; } } }
Ingredient
using UnityEngine; using System.Collections; namespace VoidGame { public class Plate : MonoBehaviour { private Vector3 m_originPosition; //原始位置 private GameManager m_gameManager; private SpriteRenderer m_spriteRenderer; private void Start() { m_gameManager = GameManager.m_instance; m_spriteRenderer = GetComponent<SpriteRenderer>(); m_originPosition = transform.position; } private void OnTriggerEnter2D(Collider2D other) { //原料移动到盘子上 if(other.CompareTag(Constant.m_ingredientTag)) { m_gameManager.m_dragIngredientArrived = true; //盘子移动到垃圾桶上 } else if(other.CompareTag(Constant.m_trashBinTag)) { Color newColor = m_spriteRenderer.material.color; newColor.a = 0.5f; m_spriteRenderer.material.color = newColor; //盘子移动到客户身上 } else if(other.CompareTag(Constant.m_customerTag)) { Color newColor = m_spriteRenderer.material.color; newColor.a = 0.5f; m_spriteRenderer.material.color = newColor; } } private void OnTriggerExit2D(Collider2D other) { //原料离开盘子 if(other.CompareTag(Constant.m_ingredientTag) && m_gameManager.m_dragIngredientArrived) { m_gameManager.m_dragIngredientArrived = false; //盘子离开垃圾桶 } else if(other.CompareTag(Constant.m_trashBinTag)) { Color newColor = m_spriteRenderer.material.color; newColor.a = 1f; m_spriteRenderer.material.color = newColor; //盘子离开客户 } else if(other.CompareTag(Constant.m_customerTag)) { Color newColor = m_spriteRenderer.material.color; newColor.a = 1f; m_spriteRenderer.material.color = newColor; } } //如果盘子里有原料,修改排序层. private void OnMouseDown() { ) { m_spriteRenderer.sortingLayerName = Constant.m_dragSortingLayer; } } //如果盘子里有原料,可以拖动.如果盘子里没材料,不可以拖动 private void OnMouseDrag() { ) { Vector3 newPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition); newPosition.z = ; transform.position = newPosition; } } //如果盘子在垃圾桶里,删除盘子里的原料 private void OnMouseUp() { if(m_gameManager.m_dragPlateArrivedTrashBin) { TrashBin trashBin = FindObjectOfType<TrashBin>(); trashBin.ClearIngredientInPlate(); } else if(m_gameManager.m_dragPlateArrivedCustomer) { Customer customer = FindObjectOfType<Customer>(); customer.CheckPlate(); } transform.position = m_originPosition; m_spriteRenderer.sortingLayerName = Constant.m_uiSortingLayer; } } }
Plate
using UnityEngine; using System.Collections; namespace VoidGame { [System.Serializable] public class Product { public int m_productID; //产品ID public int m_productPrice; //产品价格 public int[] m_totalIngredients; //产品需要的原料ID } }
Product
using UnityEngine; using System.Collections; namespace VoidGame { public class TrashBin : MonoBehaviour { private GameManager m_gameManager; private GameObject m_plate; //盘子 private AudioSource m_audioSource; private SpriteRenderer m_spriteRenderer; private void Start() { m_gameManager = GameManager.m_instance; m_audioSource = GetComponent<AudioSource>(); m_spriteRenderer = GetComponent<SpriteRenderer>(); m_plate = GameObject.FindGameObjectWithTag(Constant.m_plateTag); } //盘子移动到垃圾桶上 private void OnTriggerEnter2D(Collider2D other) { if(other.CompareTag(Constant.m_plateTag)) { m_gameManager.m_dragPlateArrivedTrashBin = true; Color newColor = m_spriteRenderer.material.color; newColor.a = 0.5f; m_spriteRenderer.material.color = newColor; } } //盘子离开垃圾桶 private void OnTriggerExit2D(Collider2D other) { if(other.CompareTag(Constant.m_plateTag) && m_gameManager.m_dragPlateArrivedTrashBin) { m_gameManager.m_dragPlateArrivedTrashBin = false; Color newColor = m_spriteRenderer.material.color; newColor.a = 1f; m_spriteRenderer.material.color = newColor; } } //清除盘子里的原材料 public void ClearIngredientInPlate() { ;i >= ;i--) { Destroy(m_gameManager.m_ingredientsInPlate[i]); m_gameManager.m_ingredientsInPlate.RemoveAt(i); } if(!m_audioSource.isPlaying) { m_audioSource.Play(); } } } }
TrashBin