【转】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 ...
随机推荐
- 如何在SAP Server Side JavaScript里消费destination
在SAP云平台里打开SAP HANA Web-Based Development Workbench进行服务器端JavaScript的开发. 创建一个新的package: 创建一个新的applicat ...
- php之header的不同用法
1.header()函数的作用是:发送一个原始 HTTP 标头[Http Header]到客户端. header(string,replace,http_response_code) /*string ...
- Windows环境下的Chocolatey安装使用
Chocolatey是一个软件包管理工具,类似于Ubuntu下面的apt-get,不过是运行在Windows环境下面 电脑 Powershell 方法/步骤 安装 Chocolatey的安装需要: P ...
- Android(java)学习笔记83:各种边距设置
1. 各种边距设置: (1)android:layout_paddingLeft 内边距,对谁用,指的是谁的内部内容边距 (2)android:layout_marginLeft 外边距,对谁用,指的 ...
- python_54_函数调用函数
logger函数的定义要放在函数调用之前,在test1(1,2)前边,一下两种都可以 def test1(x,y): print(x,y) logger('Test1') def logger(sou ...
- Python实现购物小程序
一.需求 1.登录 { ‘xxx1’:{'passwd':'123','role':1,'moeny':10000,"carts":['mac']}, 'xxx1':{'passw ...
- PAT (Advanced Level) Practise - 1095. Cars on Campus (30)
http://www.patest.cn/contests/pat-a-practise/1095 Zhejiang University has 6 campuses and a lot of ga ...
- display :inline-block 处理点小障碍
使用inline-block之前先处理点小障碍:inline-block元素会有4px左右的空隙,这个是因为我们写代码时候的换行符所致. 解决办法很简单:在inline-block的父元素中设置样式f ...
- select * 比select column快很多奇怪案例分析
遇到MYSQL傻傻的地方,下面给个案例,大家感受下: 注意以下两个sql只有select *和select g.id区别. SQL1:SELECT g.idFROM table1 gINNER JOI ...
- pytthon + Selenium+chrome linux 部署
1,centos7 安装 google-chrome (1) 添加chrome的repo源 vi /etc/yum.repos.d/google.repo [google] name=Google-x ...