http://www.jianshu.com/p/68637029e9df

游戏中小地图的实现(场景用简单Cube组成先搭建如下图场景,真实场景实现方法也是一样)

图1-1小地图效果图

1.创建好场景后先添加一个摄像机鼠标右键出现如图1-2所示选择Camera就建好了一个摄像机

图1-2

2.新建如图1-5所示的Render Texture(纹理渲染)

图1-3

3.选中摄像机在右边出来的组件Camera中设置如图1-4所示的Culling Mask属性为Default

图1-4

4.在将如图1-4所示的Camera组件中的Projection 属性设置为正交视图(如图1-5所示并调整好他的位置让他的视图对准要显示的物体)

图1-5

5.将第二步建的Render Texture(纹理渲染)拖到图1-4所示组件的Taget Texture属性中.

6.删除图1-4所示组件中Audio Listener属性(不然运行起来会一直输出东西)

7.加入一个Image右键UI --->Image并给该Image添加遮障如图1-6所示添加遮障(Mask)

图1-6

8.在该Image下添加一个RawImage组件把如图1-3所建Render Texture(纹理渲染)拖在如图1-7所示的Texture上(表示指向掩码图片)

图1-7

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-1

布局层次如图2-2所示

Seal:背景图片

Grid:控制显示出来的网格布局

Title:显示关卡选则界面

LeverItem:Image组件控制点击后实现高亮状态

Icon:显示图片

startGrid:显示小红点(下面的start1分别表示三个)

LeverInfo:关卡名字与关卡数

图2-2

1.添加一个一个Image作为背景图(Seal 显示背景颜色)

2.在背景图下面添加一个空物体(Grid)控制显示出来的关卡图片布局所以添加Grid Layout Group组件与Toggle Group组件(控制选中后高亮状态只有一张会亮,其他为暗)如图2-3所示

图2-3

3.添加一个Image控件 :LeverItem来控制显示单个关卡的图片状态的切换,高亮状态(nomal_BG)与非高亮状态(Hight_side),就是添加俩个Image背景分别设为暗一点与亮一点就行

在添加一张图片(Icon)背景为显示关卡的图片尺寸比那俩张图片要小一点

为LeverItem添加Toggle组件(图2-4)

在(1)处拉入LeverItem

在(2)处拉入当前默认的非高亮状态

在(3)处拉入Gird

在脚本中可以通过Is On来控制俩种状态的切换

图2-4

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(小地图的实现)与游戏关卡选择的简单实现的更多相关文章

  1. cocos2d-x游戏开发系列教程-坦克大战游戏关卡选择场景的编写下

    上篇文章写了Paddle类来处理精灵的点击.触摸事件,现在我们在Paddle的基础上 写一个MyPaddle类,来处理上一关.下一关.开始游戏按钮的点击事件. 1.类声明如下: class MyPad ...

  2. cocos2d-x 3.0游戏实例学习笔记《卡牌塔防》第一步---開始界面&amp;关卡选择

    /* 说明: **1.本次游戏实例是<cocos2d-x游戏开发之旅>上的最后一个游戏,这里用3.0重写并做下笔记 **2.我也问过木头本人啦.他说:随便写,第一别全然照搬代码:第二能够说 ...

  3. CCScrollView 实现帮助界面、关卡选择

    本文出自[无间落叶]:http://blog.leafsoar.com/archives/2013/07-27.html 本文介绍了 CCScrollView 来编写帮助界面和关卡选择界面的方法,在编 ...

  4. Cocos2d-x 3.2 大富翁游戏项目开发-第五部分 单机游戏-级别选择ScrollView

    于MenuScene.cpp 点击单机游戏后会调用 Director::getInstance()->pushScene(MapChooseScene::createScene()); 进入到关 ...

  5. 使用Unity制作游戏关卡的教程(三)

    转自:http://gamerboom.com/archives/75593 作者:Matthias Zarzecki 本文是“使用Unity制作<The Fork Of Truth>的关 ...

  6. 使用Unity制作游戏关卡的教程(二)

    转自:http://gamerboom.com/archives/75554 作者:by Matthias Zarzecki 本文是“使用Unity制作<The Fork Of Truth> ...

  7. 使用Unity制作游戏关卡的教程(一)

    转自: http://gamerboom.com/archives/74131 作者:Matthias Zarzecki 我正在制作<Looking For Group – The Fork O ...

  8. UE4从零搭建CF游戏关卡(蓝图篇)

    一 往关卡中放置物体 二 Static Mesh 和 BSP 从今天开始我们要建立一个类似CF游戏的场景,不写一句代码,纯蓝图实现. 三 英语学习 今天早上开会,经理说了一件让我震惊的事情,她说最近大 ...

  9. cocos2d-x 3.0 游戏关卡滑动 弹动 不会出现黑边效果

    #pragma once #include "cocos2d.h" #include "ShopScene.h" using namespace cocos2d ...

随机推荐

  1. <已解决>使用selector设置Button按下松开的样式以及 <item> tag requires a 'drawable' attribute or child tag defining a drawable 报错

    <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="ht ...

  2. pycharm 安装插件 支持markdown

    github项目中的README文件通常是md格式的,但是pycharm默认是不支持的,需要安装插件 进入settings中搜索plugins,然后在plugins中搜索markdown suppor ...

  3. Nginx学习记录(一)

    1. 什么是nginx Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器.由俄罗斯的程序设计师Igor Sysoev所开发,官方测试nginx能够支支 ...

  4. 使用jquery实现获取除this(当前选定)以外的元素

    今天做项目时,要求完成功能评价的分类,即好评,差评,中评.遇到一个问题,如何在选定一个评论类型时,该div颜色改变,其他评论类型的div颜色不变. 在使用$(this).attr()时,表示当前元素的 ...

  5. Mint UI文档

    Mint UI文档:http://elemefe.github.io/mint-ui/#/ 一.Mint UI的安装和基本用法. 1.NPM :npm i mint-ui -S 建议使用npm进行安装 ...

  6. vue学习之路 - 1.初步感知

    一.安装 这里使用node的npm包管理工具进行操作.操作前请先下载node. 在工程文件夹中使用以下命令安装vue: npm install vue 如下图所示:我在 helloworld 文件夹中 ...

  7. 一、Shell 教程

    Shell 教程 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Shell 是指一种应用程序,这个应用程序提供了一个 ...

  8. js跨域及解决办法

    1.什么是跨域 我们经常会在页面上使用ajax请求访问其他服务器的数据,此时,客户端会出现跨域问题. 跨域问题是由于javascript语言安全限制中的同源策略造成的. 简单来说,同源策略是指一段脚本 ...

  9. JZOJ 3461. 【NOIP2013模拟联考5】小麦亩产一千八(kela)

    3461. [NOIP2013模拟联考5]小麦亩产一千八(kela) (Standard IO) Time Limits: 1000 ms  Memory Limits: 262144 KB  Det ...

  10. centos6.4编译hadoop2.4源码

    4.1.环境: 1)Linux 64 位操作系统,CentOS 6.4 版本,VMWare 搭建的虚拟机 2)虚拟机可以联网 4.2.官方编译说明: 解压命令:tar -zxvf hadoop-2.4 ...