【转】UGUI(小地图的实现)与游戏关卡选择的简单实现
http://www.jianshu.com/p/68637029e9df
游戏中小地图的实现(场景用简单Cube组成先搭建如下图场景,真实场景实现方法也是一样)
1.创建好场景后先添加一个摄像机鼠标右键出现如图1-2所示选择Camera就建好了一个摄像机
2.新建如图1-5所示的Render Texture(纹理渲染)
3.选中摄像机在右边出来的组件Camera中设置如图1-4所示的Culling Mask属性为Default
4.在将如图1-4所示的Camera组件中的Projection 属性设置为正交视图(如图1-5所示并调整好他的位置让他的视图对准要显示的物体)
5.将第二步建的Render Texture(纹理渲染)拖到图1-4所示组件的Taget Texture属性中.
6.删除图1-4所示组件中Audio Listener属性(不然运行起来会一直输出东西)
7.加入一个Image右键UI --->Image并给该Image添加遮障如图1-6所示添加遮障(Mask)
8.在该Image下添加一个RawImage组件把如图1-3所建Render Texture(纹理渲染)拖在如图1-7所示的Texture上(表示指向掩码图片)
9.为运动物体添加移动脚本实现物体移动就可以实现简单的小地图功能脚本内容如下
void Update () {
float h = Input.GetAxis("Horizontal");
float z = Input.GetAxis("Vertical");
transform.Translate(new Vector3(h, 0, z) * 6);//speed为速度
}
游戏关卡选择的简单实现
效果图如图2-1所示
布局层次如图2-2所示
Seal:背景图片
Grid:控制显示出来的网格布局
Title:显示关卡选则界面
LeverItem:Image组件控制点击后实现高亮状态
Icon:显示图片
startGrid:显示小红点(下面的start1分别表示三个)
LeverInfo:关卡名字与关卡数
1.添加一个一个Image作为背景图(Seal 显示背景颜色)
2.在背景图下面添加一个空物体(Grid)控制显示出来的关卡图片布局所以添加Grid Layout Group组件与Toggle Group组件(控制选中后高亮状态只有一张会亮,其他为暗)如图2-3所示
3.添加一个Image控件 :LeverItem来控制显示单个关卡的图片状态的切换,高亮状态(nomal_BG)与非高亮状态(Hight_side),就是添加俩个Image背景分别设为暗一点与亮一点就行
在添加一张图片(Icon)背景为显示关卡的图片尺寸比那俩张图片要小一点
为LeverItem添加Toggle组件(图2-4)
在(1)处拉入LeverItem
在(2)处拉入当前默认的非高亮状态
在(3)处拉入Gird
在脚本中可以通过Is On来控制俩种状态的切换
4.startGrid与LeverInfo就是设置一下关卡与名字的显示布局与星级的显示布局
脚本实现
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using System.Collections.Generic;
public class shijianbuju : MonoBehaviour {
Canvas _mainCanvas;
AsyncOperation _state;
SelctLeverIUI _guankaid;
void Start () {
CreatLeverItem();
}
public int level_id;//关卡ID
Transform _ItemPareten;
GameObject _leverIItem;
ListdataGruop = new List();
public void Awake() {
CreatTempData();
DontDestroyOnLoad(gameObject);//不销毁物体在场景加载的时候,或切换时
_ItemPareten = transform.Find("Seal/Grid");
_leverIItem = transform.Find("Seal/LeverItem").gameObject; }
//创建临时数据
void CreatTempData() {
dataGruop.Clear();
LeveIData leveldata = new LeveIData();
leveldata.level_id = 1;
leveldata._levelName = "小树林";
leveldata._Nolevel = 1;
leveldata._starNum = 3;
leveldata._IconRes = "1 (1)";
dataGruop.Add(leveldata);
LeveIData leveldata1 = new LeveIData();
leveldata1.level_id = 2;
leveldata1._levelName = "土地庙";
leveldata1._Nolevel = 2;
leveldata1._starNum = 2;
leveldata1._IconRes = "1 (2)";
dataGruop.Add(leveldata1);
LeveIData leveldata2 = new LeveIData();
leveldata2.level_id = 3;
leveldata2._levelName = "神仙阁";
leveldata2._Nolevel = 3;
leveldata2._starNum = 3;
leveldata2._IconRes = "1 (3)";
dataGruop.Add(leveldata2);
LeveIData leveldata3 = new LeveIData();
leveldata3.level_id = 4;
leveldata3._levelName = "少林寺";
leveldata3._Nolevel = 4;
leveldata3._starNum = 1;
leveldata3._IconRes = "1 (4)";
dataGruop.Add(leveldata3);
LeveIData leveldata4 = new LeveIData();
leveldata4.level_id = 5;
leveldata4._levelName = "黑木崖";
leveldata4._Nolevel = 5;
leveldata4._starNum = 3;
leveldata4._IconRes = "1 (5)";
dataGruop.Add(leveldata4); }
//根据数据创建关卡
GameObject _tempItem;
void CreatLeverItem() {
if (dataGruop.Count > 0) {
for (int i = 0; i < dataGruop.Count; i++)
{
_tempItem = Instantiate(_leverIItem) as GameObject; _tempItem.transform.SetParent(_ItemPareten);
_tempItem.transform.localPosition = Vector3.zero;
_tempItem.transform.localScale = Vector3.one;
_tempItem.transform.localRotation = new Quaternion();
//处理数据
LeverItem _InstItem = _tempItem.AddComponent();
_InstItem.InstValue(dataGruop[i].level_id);
_InstItem._name.text = dataGruop[i]._levelName;
_InstItem._NoLevel.text = dataGruop[i]._Nolevel.ToString();
string path = string.Format("{0}{1}", "Icon/", dataGruop[i]._IconRes);
_InstItem._icon.sprite = Resources.Load(path, typeof(Sprite)) as Sprite; ShowStar(dataGruop[i]._starNum, _InstItem);
//增加监听
_tempItem.GetComponent().onValueChanged.AddListener(delegate (bool ischange) { OntoggleChngeFunc(ischange, _InstItem); });
}
}
}
void OntoggleChngeFunc(bool ison, LeverItem item)
{
if (ison)
{
// Debug.Log("my level_id=" + item.level_id);
SceneManager.LoadScene(item.level_id);
}
}
void ShowStar(int num, LeverItem item)
{
if (num == 1)
{
item._star_one.gameObject.SetActive(true);
item._star_two.gameObject.SetActive(false);
item._star_thr.gameObject.SetActive(false);
}
else if (num == 2)
{
item._star_one.gameObject.SetActive(true);
item._star_two.gameObject.SetActive(true);
item._star_thr.gameObject.SetActive(false);
}
else if (num == 3)
{
item._star_one.gameObject.SetActive(true);
item._star_two.gameObject.SetActive(true);
item._star_thr.gameObject.SetActive(true);
}
}
【转】UGUI(小地图的实现)与游戏关卡选择的简单实现的更多相关文章
- cocos2d-x游戏开发系列教程-坦克大战游戏关卡选择场景的编写下
上篇文章写了Paddle类来处理精灵的点击.触摸事件,现在我们在Paddle的基础上 写一个MyPaddle类,来处理上一关.下一关.开始游戏按钮的点击事件. 1.类声明如下: class MyPad ...
- cocos2d-x 3.0游戏实例学习笔记《卡牌塔防》第一步---開始界面&关卡选择
/* 说明: **1.本次游戏实例是<cocos2d-x游戏开发之旅>上的最后一个游戏,这里用3.0重写并做下笔记 **2.我也问过木头本人啦.他说:随便写,第一别全然照搬代码:第二能够说 ...
- CCScrollView 实现帮助界面、关卡选择
本文出自[无间落叶]:http://blog.leafsoar.com/archives/2013/07-27.html 本文介绍了 CCScrollView 来编写帮助界面和关卡选择界面的方法,在编 ...
- Cocos2d-x 3.2 大富翁游戏项目开发-第五部分 单机游戏-级别选择ScrollView
于MenuScene.cpp 点击单机游戏后会调用 Director::getInstance()->pushScene(MapChooseScene::createScene()); 进入到关 ...
- 使用Unity制作游戏关卡的教程(三)
转自:http://gamerboom.com/archives/75593 作者:Matthias Zarzecki 本文是“使用Unity制作<The Fork Of Truth>的关 ...
- 使用Unity制作游戏关卡的教程(二)
转自:http://gamerboom.com/archives/75554 作者:by Matthias Zarzecki 本文是“使用Unity制作<The Fork Of Truth> ...
- 使用Unity制作游戏关卡的教程(一)
转自: http://gamerboom.com/archives/74131 作者:Matthias Zarzecki 我正在制作<Looking For Group – The Fork O ...
- UE4从零搭建CF游戏关卡(蓝图篇)
一 往关卡中放置物体 二 Static Mesh 和 BSP 从今天开始我们要建立一个类似CF游戏的场景,不写一句代码,纯蓝图实现. 三 英语学习 今天早上开会,经理说了一件让我震惊的事情,她说最近大 ...
- cocos2d-x 3.0 游戏关卡滑动 弹动 不会出现黑边效果
#pragma once #include "cocos2d.h" #include "ShopScene.h" using namespace cocos2d ...
随机推荐
- 【BZOJ4698】[SDOI2008] Sandy的卡片(后缀数组+二分)
点此看题面 大致题意: 给你\(N\)个序列,若定义两个相同子串为一个子串内所有数加上一个数后能变成另一个串,求所有序列中的最长相同子串的长度. 简单的转化 首先,我们对题目进行一个简单的转化. 要求 ...
- 【转】Nginx搭建反向代理服务器过程详解
阅读目录 1.1 反向代理初印象 1.2 反向代理的作用 2.1 Nginx是神马? 2.2 Nginx的应用现状 2.3 Nginx的核心特点 3.1 准备一个ASP.NET网站部署到IIS服务器集 ...
- wu2198:难得的波段抄底机会
很好的波段抄底机会 个人浅见看,目前染料股跌出的机会明显,养殖股波段机会明显,芯片.半导体.集成电路.北导.软件.国产操作系统等科技股短线机会不错.另外,大盘指数2856/2806区域的波段操作机会不 ...
- 在RichTextBox控件中显示RTF格式文件
实现效果: 知识运用: RichTextBox控件的LoadFile方法 //将文件内容加载到RichTextBox控件中 public void LoadFile(string path,Ri ...
- kubernetes-ingress(十)
ingress https://kubernetes.io/docs/concepts/services-networking/ingress/ pod与ingress的关系 •通过label-sel ...
- DLM分布式锁的实现机制
1.AST简介 DLM进程(LMON.LMD)之间的跨实例通信是使用高速互联上的IPC层实现的.为了传递锁资源的状态,DLM使用了异步陷阱(AST),它在操作系统处理程序例程中实现为中断.纯粹主义者可 ...
- Python——函数入门(三)
一.变量作用域 当程序定义一个变量时,这个变量是有它的作用范围的,变量的作用范围称为变量的作用域.根据变量的位置,分为两种: 局部变量:局部变量就是在函数中定义的变量,包括参数,都是局部变量,局部离开 ...
- 架构图(拓扑图)画图工具分析整理(静态,动态,可交互图.层级tu)
最近要画架构图. 一方面有图片洁癖,另外一方面又不想不停的挪动图片. 一开始想用脑图软件. 发现脑图是树状的,架构模块依赖图是网状的.(也可以简化为层级图,不画交互关系.类似 dubbo 的架构图. ...
- WebViewJavaScriptBridge的原理解析
理解WebViewJavaScriptBridge原理 前提条件都是需要bridge在OC实例化,然后二者的互调才可以进行下去 _bridge = [WebViewJavascriptBridge b ...
- JSP出现"属性值[request.getParameter("myMessage")]引用["],在值内使用时必须被转义"的解决方法
写JSP时出现属性值[request.getParameter("myMessage")]引用["],在值内使用时必须被转义. 源代码: <jsp:setPrope ...