【转】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 ...
随机推荐
- IOS @param view 需要获取层级结构的view
- (void)applicationDidBecomeActive:(UIApplication *)application { NSString *str = [self digView:self ...
- 2018.6.29 JavaScript
一.使用JS数组实现冒泡排序 二.创建Teacher对象,添加(姓名.年龄.地址.学生对象[学生姓名,学生性别])属性 要求: 创建多个老师对象,每个老师下管理多个学生,显示每个老师下所有的学生信息 ...
- 2018. 2.4 Java中集合嵌套集合的练习
创建学生类有姓名学校和年龄 覆盖toString() 1.创建三个学生对象,放到集合ArrayList 2.输出第2名学生的信息 3.删除第1个学生对象 4.在第2个位置插入1个新学生信息 5.判断刘 ...
- python_30_购物车复习
prodcut_list=[ ('Iphone', 5800), ('Mac Pro', 9800), ('Bike', 800), ('Watch', 10600), ('Coffee', 31), ...
- android设备局域网中快速搜索之cling方式
cling方式就像pc端windows局域网工作组刷新显示一样,原来用过扫描ip地址的方式,可以使用就是有点慢,还有一种自己加入组广播,通过发送组广播的方式. android设备局域网中快速搜索之 ...
- Servlet 的生命周期 及 注意事项 总结
Servlet的生命周期 图解Servlet的生命周期 生命周期的各个阶段 实例化 :Servlet 容器创建 Servlet 的实例 初始化 :该容器调用init() 方法 请求处理 :如果请求Se ...
- 十三、MySQL WHERE 子句
MySQL WHERE 子句 我们知道从 MySQL 表中使用 SQL SELECT 语句来读取数据. 如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句中. 语法 以下是 ...
- js浮点数加减乘除
浮点数精确计算 /** ** 加法函数,用来得到精确的加法结果 ** 说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显.这个函数返回较为精确的加法结果. ** 调用:ac ...
- yii2 基本的增删改查
一:添加方法 1.1 使用成员属性的方式 save $user_name = $_POST['user_name']; $password = $_POST['password']; //实例化 $u ...
- 循环(while、for)
写重复的代码是程序员最不耻的行为,那么如何做到不用写重复代码又能让程序重复一段代码多次呢,循环语句就派上用场拉…… 一.while 循环 # while 语法结构 while 条件: 执行代码.... ...