【转】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 ...
随机推荐
- Exceptions and Errors on iOS
异常:程序缺陷导致:不可恢复:给开发者使用: 错误:资源受限导致:可恢复:提示给用户. https://blog.jayway.com/2010/10/13/exceptions-and-errors ...
- java之接口相关知识
1.接口用interface来声明 //定义一个动物接口 public interface Animal{ public void eat(); public void travel(); } 2.接 ...
- 第22题:链表中倒数第k个结点
题目描述 题目:输入一个链表,输出该链表中倒数第k个结点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点.例如一个链表有6个结点,从头结点开始它们的值依次是1.2.3.4.5 ...
- 牛客小白月赛1 G あなたの蛙は旅⽴っています【图存储】【DP】
题目链接:https://www.nowcoder.com/acm/contest/85/G 思路: DP 空间可以优化成一维的, 用一维数组的 0 号单元保存左斜对角的值即可. 存图这里真不好理解 ...
- 二十一、MySQL NULL 值处理
MySQL NULL 值处理 我们已经知道 MySQL 使用 SQL SELECT 命令及 WHERE 子句来读取数据表中的数据,但是当提供的查询条件字段为 NULL 时,该命令可能就无法正常工作. ...
- 2D和3D效果
<style type="text/css"> #div1{ width: 200px; height: 200px; background-color:#aaa; c ...
- 懒人的mysql管理脚本
最近常用到的命令,太懒不想打太多 1,mysql启动,重启,停止脚本 echo '/usr/local/mysql5/support-files/mysql.server $1'>>/us ...
- EventUtil处理js兼容性问题
var EventUtil={ addHandler:function(element,type,handler){ //添加事件 if(element.addEventListener){ elem ...
- .NET 与MVC的区别
.NET MVC与三层架构 二者都是架构模式,并且也有一定的共存度,在实际开发中,严格区分意义不大. 基于最近涉及到这部分知识就在复习下,编程过程中,基础概念更重要,而不是技术. 1.三层架构:即UI ...
- P2485 [SDOI2011]计算器
P2485 [SDOI2011]计算器 题目描述 你被要求设计一个计算器完成以下三项任务: 1.给定y.z.p,计算y^z mod p 的值: 2.给定y.z.p,计算满足xy ≡z(mod p)的最 ...