Restaurant & Cooking Starter Kit v1.2.1 学习
项目:
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
Restaurant & Cooking Starter Kit v1.2.1 学习的更多相关文章
- Restaurant & Cooking Starter Kit v1.2.1
项目: using UnityEngine; using System.Collections; namespace VoidGame { public class Constant : MonoBe ...
- asp.net的3个经典范例(ASP.NET Starter Kit ,Duwamish,NET Pet Shop)学习资料
asp.net的3个经典范例(ASP.NET Starter Kit ,Duwamish,NET Pet Shop)学习资料 NET Pet Shop .NET Pet Shop是一个电子商务的实例, ...
- Window 64bit环境搭建Web Starter Kit
最近在学习https://developers.google.com/web/fundamentals/这里的内容,其中就有一部分是安装Web Starter Kit的教程,我总结一下自己的安装过程. ...
- 介绍使用Cordova和Web Starter Kit开发Android
介绍 如今,每个人都想制作移动应用程序,为什么不呢?世界上有更多的移动设备比任何其他用户设备.Android尤其流行,但是为什么不从一个众所周知的跨平台应用的基础开始呢?Android的开发显然比其他 ...
- Microsoft IoT Starter Kit 开发初体验
1. 引子 今年6月底,在上海举办的中国国际物联网大会上,微软中国面向中国物联网社区推出了Microsoft IoT Starter Kit ,并且免费开放1000套的申请.申请地址为:http:// ...
- Microsoft IoT Starter Kit 开发初体验-反馈控制与数据存储
在上一篇文章<Microsoft IoT Starter Kit 开发初体验>中,讲述了微软中国发布的Microsoft IoT Starter Kit所包含的硬件介绍.开发环境搭建.硬件 ...
- React Starter Kit 中文文档
最近没事又翻译了个玩意. Github上的一个Star 非常高的 React 样板程序. 由Node.js,Express,GraphQL和React构建,可选加入Redux等,并可以包含Webpac ...
- Unity Game Starter Kit for Windows Store and Windows Phone Store games
原地址:http://digitalerr0r.wordpress.com/2013/09/30/unity-game-starter-kit-for-windows-store-and-window ...
- Microsoft IoT Starter Kit
Microsoft IoT Starter Kit 开发初体验 1. 引子 今年6月底,在上海举办的中国国际物联网大会上,微软中国面向中国物联网社区推出了Microsoft IoT Starter K ...
随机推荐
- jstree使用新的
1.首先准备jstree树的dom元素 <p id="flowList_ul" class="flowList_ul"></p> 2.初 ...
- Cracking The Coding Interview 9.7
//原文: // // A circus is designing a tower routine consisting of people standing atop one another's s ...
- 全栈框架mk-js
今天听朋友说,才知道原来还有全栈框架这么一说. 厉害了. meteor EggBorn.js mk-js cordova 记录下,后面研究研究.
- mybatis Condition查询
Condition condition = new Condition(ACurrentTotal.class); condition.createCriteria().andCondition(&q ...
- matlab一行太长
太长了,一行写不下,所以用...接下一行 例子: x=[ mvnrnd( mu_real(:,1) , cov_real(:,:,1) , round(N*a_real(1)) )' ,... mvn ...
- GCC栈溢出保护
逆向过elf程序都知道,GCC的canary,x86_64下从fs:0x28偏移处获取,32位下从gs:0x14偏移处获取.但知道canary如何产生,为什么在这里取的人比较少. 下面以x86_64平 ...
- mac os x lipo 工具
lipo是管理Fat文件的工具,可以查看平台列表,提取.重新打包 dreamdeMac-mini:test dream$ lipo -info libtest001.a Architectures i ...
- TCP三次握手及释放连接详解(转)
一.TCP头部简介 ACK :即确认字符,在数据通信中,接收站发给发送站的一种传输类控制字符.表示发来的数据已确认接收无误.TCP报文格式中的控制位由6个标志比特构成,其中一个就是ACK,ACK为1表 ...
- MongDB篇,第一章:数据库知识1
MongDB 数据库知识1 程序 = 数据结构 + 算法 数据存储阶段 1,文件管理阶段 (.txt .doc .xls) 优点: 数据可以长期保存:可以存储大量的数据:使用简单 缺点 ...
- tinyxml2使用
项目中遇到一个问题,C/C++需要与JAVA通信,JAVA方已经使用了XML序列化传输.本可以考虑JSON/GOOGLE PROTOCOL BUFFER的,但为了使JAVA方不做过多改动,坚持使用XM ...