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. 弹出页面第一次加载可以生成table和方法的绑定,第二次点击进来不能生成table和方法的帮定

    问题原因: 弹出页面的写法是每次点击都会在原有页面基础之上新添加一个将其覆盖,原有页面不关闭.我用的生成table和点击事件的绑定是id选择器.页面中只绑定第一次的页面,第二次的页面作用不上. 解决: ...

  2. idea单元测试junit

    参考文章地址地址:http://blog.csdn.net/u011138533/article/details/52165577 本文按以下顺序讲解JUnit4的使用 下载jar包 单元测试初体验 ...

  3. IOS Quarzt2D 手动的释放

    - (void)drawRect:(CGRect)rect { // 1.获取上下文 CGContextRef ctx = UIGraphicsGetCurrentContext(); // 2.绘制 ...

  4. python之列表推导、迭代器、生成器

    http://blog.chinaunix.net/uid-26722078-id-3484197.html 1.列表推导 看几个例子,一切就明白了. #!/usr/bin/python number ...

  5. 转:Python集合(set)类型的操作

    转自:http://blog.csdn.net/business122/article/details/7541486 python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系 ...

  6. Bootstrap 历练实例 - 折叠(Collapse)插件方法

    方法 下面是一些折叠(Collapse)插件中有用的方法: 方法 描述 实例 Options:.collapse(options) 激活内容为可折叠元素.接受一个可选的 options 对象. $(' ...

  7. Javascript的数据类型和转换

    JavaScript 数据类型 在 JavaScript 中有 5 种不同的数据类型: string number boolean object function 3 种对象类型: Object Da ...

  8. mysql 存储过程 例子

    DROP PROCEDURE IF EXISTS variable_demo; delimiter // CREATE PROCEDURE variable_demo() BEGIN select ' ...

  9. python 输入英语单词,查看汉语意思

    # -*- coding:utf-8 -*- import urllib2 import lxml.html as HTML def get_wordmean(): url = 'http://www ...

  10. Linux-准备工作

    首先安装一个box,安装一个centos7,然后就是xshell,接下来就是 查看ip ifconfig ip addr vi /etc/sysconfig/network-scripts/ifcfg ...