【转】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 ...
随机推荐
- POJ 3057 Evacuation(二分匹配)
分析: 这是一个时间和门的二元组(t,d)和人p匹配的问题,当我们固定d0时,(t,d0)匹配的人数和t具有单调性. t增加看成是多增加了边就行了,所以bfs处理出p到每个d的最短时间,然后把(t,d ...
- 2018.5.30 Oracle数据库PLSQL编程---游标的使用
显示游标的步骤 /* 显示游标处理步骤 1.声明游标 语法结构:cursor 游标名称 is SQL 语句; 2.打开游标 语法结构:open游标名称; 3.提取数据 语法结构:fetch 4.关闭游 ...
- CUDA开发:了解设备属性
原文链接 今天介绍一下CUDA设备的相关属性,只有熟悉了硬件是相关属性,是怎么工作的,就能写出更适合硬件工作的代码.cudaDeviceProp这个结构体记录了设备的相关属性. struct cuda ...
- Java Web Application使Session永不失效(利用cookie隐藏登录)
在做 Web Application 时,因为 Web Project 有 session 自动失效的问题,所以如何让用户登录一次系统就能长时间运行三个月,就是个问题. 后来,看到 session 失 ...
- final关键字,static关键字
Final final的意思为最终,不可变.final是个修饰符,它可以用来修饰类,类的成员,以及局部变量.不能修饰构造方法. 注意: 被final修饰的类不能被继承但可以继承别的类 class Yy ...
- 学习sqlserver的函数方法
http://www.w3school.com.cn/sql/func_datediff.asp SQL Server DATEDIFF() 函数 SELECT DATEDIFF(day,'2008- ...
- MySql-8.0.12 安装教程随笔
下载地址: https://www.mysql.com/downloads/ 现在最下边的社区版本,也就是免费版本 之后我们会看到有两个选择的下载,一个为zip压缩包格式,一个是Install版本,个 ...
- java算法面试题:从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序 ;读取docx 读取doc 使用poi 相关jar包提集提供下载
从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序 1,张三,28 2,李四,35 3,张三,28 4,王五,35 5,张三,28 6,李四,35 7,赵六,28 ...
- 在React中使用Redux数据流
问题:数据流是什么呢?为什么要用数据流? 答案:1.数据流是我们的行为与相应的抽象 2.使用数据流帮助我们明确了行为的对应的响应 问题: React与数据流的关系 1.React是纯 V 层的前端框架 ...
- 【原创】数据处理中判断空值的方法(np.isnan、is np.nan和pd.isna)比较
转载请注明出处:https://www.cnblogs.com/oceanicstar/p/10869725.html 1.np.isnan(只有数组数值运算时可使用) 注意:numpy模块的i ...