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 ...
随机推荐
- tp配置
<?php// +----------------------------------------------------------------------// | ThinkPHP [ WE ...
- ui-router ng-router
开发中常用ui-router来设置路由: ui-router使用很简单,延续了之前ngRoute的特点. 1.首先得注入ui.router模块. 接下来就是简单的配置 2.$stateProvider ...
- rancher中使用ingress-lbs做负载均衡
rancher 相关资料 http://rancher.com/docs/rancher/v1.6/zh/kubernetes/ingress/ lvs, haproxy, nginx负载均衡器比较 ...
- python+requests+excel 接口自动化框架
一.项目框架如图: 1.common :这个包都是一些公共的方法,如:手机号加解密,get/post接口请求的方法封装,接口鉴权,发邮件,读写excel文件方法等等 2.result:存放每次运行的l ...
- day 55 前端
前端JQuery 语法 1 关于表格基数偶数背景颜色变换的 2 关于has后代 和not非 3 jQuery 和dom的转换 dom 转换成jQuery 用$(包起来) 不加引号 4 关于 n ...
- WebService的一种简单应用方式入门
1.什么是WebService? WebService即Web服务,简单来讲,他就是一种跨编程语言和跨操作平台的远程调用技术. 2.Web服务: Web服务是基于HTTP和XML的技术:HTTP是互联 ...
- setcookie
cookie 中值的部分在发送的时候会被自动用 urlencode 编码并在接收到的时候被自动解码并把值赋给与自己同名的 cookie 变量 首先声明,浏览的Cookie操作都是通过HTTP Head ...
- 识别图片验证码的三种方式(scrapy模拟登陆豆瓣网)
1.通过肉眼识别,然后输入到input里面 from PIL import image Image request.urlretrieve(url,'image') #下载验证码图片 image = ...
- 2D转换下的zoom和transform:scale的区别
一.什么是zoom 在我们做项目和查看别人的网页的时候总会在一些元素的样式里,看到有一个家伙孤零零的待在那里,它到底是谁呢? 它的名字叫zoom,zoom的意思是“变焦”,虽然在摄影的领域经常被提到, ...
- HDU 2147 kiki's game(博弈经典题)
题目传送:http://acm.hdu.edu.cn/showproblem.php?pid=2147 Problem Description Recently kiki has nothing to ...