2018-03-09 23:29:28 qq_25678319 阅读数 3347

1.创建多个button(关卡数)->创建Button数组存button(代码)+目前达到第几关卡(默认为1)levelReached->达到那一关,那一关的Button才可用levelReached=button可用

public class LevelSelect : MonoBehaviour {
    public Button[] levelButton;//关卡数组
    
	// Use this for initialization
	void Start () {
         int levelReached = PlayerPrefs.GetInt("levelReach",1);//获取值,不存在返回1(初始第一关)
        for (int i = 0; i < levelButton.Length; i++)
        {
            if (i > levelReached-1)//达到那一关,那一关的Button才可用
            {
                levelButton[i].interactable = false; //Interactable(是否可用)
            }
        }
	}

2.UI(另起一个场景存)

添加UI->Scroll View->

 ->content加两个组件->Content Size Fitter会根据多少内容来调整Scroll的大小,Grid根据什么方式排布

 

->在content里面加Button,作为关卡选项

http://blog.csdn.net/gcs6564157/article/details/54884809

注:Scroll View的大小在此处调(调一下上下左右的边距)


Button的脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class LvButtonInfo : MonoBehaviour {
    public Image[] stars;
    public string lvName;
	void Start () {
        PlayerPrefs.SetInt(lvName,0);
        int lvStarNumber = PlayerPrefs.GetInt(lvName);

        for (int i = 0; i < stars.Length; i++)
        {
            stars[i].enabled = false;
        }

        for(int i=0;i<lvStarNumber;i++)
        {
            stars[i].enabled = true;
        }
	}
    public void EnterLv()
    {
        SceneManager.LoadScene(lvName);
    }
} 

lvName在Inspect面板写即可。

2012-07-10 22:26:38 ariel7321 阅读数 10652

目标:实现关卡选择界面



这一篇里没有新的内容,全是前面5讲知识点的综合,如何用GUITexture做背景,如何用GUISkin做个性化的按钮,如何添加游戏背景音乐,如何修改鼠标样式,这些都是前面提到的知识点,在这里大家用这个界面把之前的都巩固下吧。

#pragma strict

var customSkin : GUISkin;

function Start () {

}

function Update () {

}

function OnGUI () {
	GUI.matrix = Matrix4x4.TRS(Vector3.zero, Quaternion.identity, 
		Vector3(Screen.width / 800.0, Screen.height / 600.0, 1));
	
	GUI.skin = customSkin;
	
	if (GUI.Button(Rect(125, 100, 150, 150), "", "Level1")) {
		Application.LoadLevel(3);
	}
	
	if (GUI.Button(Rect(325, 100, 150, 150), "", "Level2")) {
	}
	
	if (GUI.Button(Rect(525, 100, 150, 150), "", "Level3")) {
	}
	
	if (GUI.Button(Rect(125, 300, 150, 150), "", "Level4")) {
	}
	
	if (GUI.Button(Rect(325, 300, 150, 150), "", "Level5")) {
	}
	
	if (GUI.Button(Rect(525, 300, 150, 150), "", "Level6")) {
	}
	
	if (GUI.Button(Rect(70, 500, 100, 80), "", "Back")) {
		Application.LoadLevel(1);
	}
}

OK,运行下试试吧!


源码下载地址: http://download.csdn.net/detail/ariel7321/4421702



2015-02-28 22:38:35 book_longssl 阅读数 2699
过关类游戏在单机类游戏中出现会比较多,但多以休闲为主,比如《Candy Crush》、《Angry Birds》、《P V Z》、《小鳄鱼顽皮爱洗澡》、《Tiny Thief》等经典休闲游戏,鉴于很多圈内人士预测2014年是手游爆发年,且重点在ARPG类型,似乎会冒出很多横版过关或者全3D的过关动作类游戏,我们就针对此类型的游戏进行分析。

首先,此类型的游戏需要关注的是每关卡的独立玩家数量,即玩家ID数量,目的是为了监测玩家主要集中在哪个阶段。比如,游戏刚推出阶段,玩家主要集中在前面部分的关卡(如图一所示);推出一段时间之后,玩家主要集中在中部关卡阶段,如果期间有拉新活动推出,不排除前、中部分关卡处于一个玩家数量比较持平的表现(如图二所示);如果运营很久,玩家主要都会集中在关卡中后期,或者是一个缓慢上升的曲线,又或者是一个较持平的曲线(如图三所示)。以上假设的前提都是游戏在运营状况比较良好的情况下进行分析的。

图一

图二

图三

其次,我们需要关注的是关卡难度的节奏问题,如果设计的难度太低,玩家很快就会因为游戏毫无挑战性而流失;如果设计的难度太大,会带给玩家挫败感太强,也会容易因为灰心丧气而流失。所以,我们一定要把握好每个关卡内以及关卡与关卡之间的难度节奏。那么,这两个方面的难度节奏怎么从数据方面来统计和展现呢.



为了解决这个问题,首先要找到哪些关卡阻止了玩家继续前进。我们的解决方式是把每次玩家在某个关卡失败后退出游戏的行为进行记录,找出玩家在哪个关卡失败后不继续进行游戏而是选择退出游戏,并把这个指标定义为“关卡退出率”,计算公式为:

关卡退出率=此关卡失败后退出玩家游戏的次数÷游戏启动次数

除了这个指标,还要统计每关卡的失败率,目的是为了与上个指标对比查看此关卡是不是设计的难度太高,计算公式为:

关卡失败率=当前关卡未成功通过的次数÷此关卡的总启动次数

这两个指标进行对比后,我们就可以看出关卡的难度是不是设计的太高而不合理。如下图所示:

[size=0.83em]4.jpg (9.48 KB, 下载次数: 0)
下载附件  [url=]保存到相册[/url]
[color=rgb(153, 153, 153) !important]2015-2-10 19:55 上传




过关类游戏的难度曲线(也就是关卡失败率)理论上应该是波浪曲线逐渐上升的形状,但游戏刚开始运营的时候肯定会有偏差,需要根据上图的实际表现情况来不断进行调整。
2015-01-03 19:03:44 dreamsnow127 阅读数 1447


客户端游戏,用户需要拥有全部的游戏安装包才能开始游戏。而网页游戏则不需要。

用户在网页上打开游戏,实际上是在下载游戏。用户不必等待整个游戏下载完成,而是仅下载

一部分即可开始游戏,同时在游戏中又去下载另一部分。


大部分Unity游戏由很多关卡组成,例如一共有10个关卡,平均每个关卡有1MB,用户只需下载1MB左右的关卡就可以开始游戏了。


以下示例,共有2个关卡,加载完第一个后,即可开始游戏。游戏中会下载另一个关卡。


1  Build Setting 勾选 Streamed



2 First Streamed Level 设置0




3 发布后,网页中打开该应用,首先加载场景1,场景1加载完成后,就可以开始游戏了。

   场景1加载后会连续加载场景2。


4 代码如下:

using UnityEngine;
using System.Collections;
using UnityEngine.UI;


//测试WebPlayer
public class CWebPlayerTest : MonoBehaviour {

    //显示进度文本
    public Transform m_tProgressText;
	//下载标识符
    bool m_bLoadingFlag = false;
    //下载完成比例
    float m_fLoadProgress = 0;

	void Update () {
        if (m_bLoadingFlag)
        {
            //获取下载比例
            m_fLoadProgress = Application.GetStreamProgressForLevel("WebPlayer2");
            //显示下载比例
            m_tProgressText.GetComponent<Text>().text = m_fLoadProgress.ToString();
            //如果关卡已经下载完成
            if (Application.CanStreamedLevelBeLoaded("WebPlayer2"))
            {
                //读取下一关
                Application.LoadLevel("WebPlayer2");
            }
        }
	}

    //开始加载
    public void StartLoad() {
        m_bLoadingFlag = true;
    }
}




2016-10-24 11:33:50 virus2014 阅读数 3615

json文件:LevelInfo.txt

{
  "levelList": [
    {
      "Number": 1,
      "IsLock": 0,
      "Star": 0,
      "Timer": 30,
      "TargetScore": 4
    }, {
      "Number": 2,
      "IsLock": 1,
      "Star": 0,
      "Timer": 29,
      "TargetScore": 4
    }, {
      "Number": 3,
      "IsLock": 1,
      "Star": 0,
      "Timer": 28,
      "TargetScore": 6
    }, {
      "Number": 4,
      "IsLock": 1,
      "Star": 0,
      "Timer": 27,
      "TargetScore": 6
    }, {
      "Number": 5,
      "IsLock": 1,
      "Star": 0,
      "Timer": 26,
      "TargetScore": 8
    }, {
      "Number": 6,
      "IsLock": 1,
      "Star": 0,
      "Timer": 25,
      "TargetScore": 8
    }, {
      "Number": 7,
      "IsLock": 1,
      "Star": 0,
      "Timer": 24,
      "TargetScore": 9
    }, {
      "Number": 8,
      "IsLock": 1,
      "Star": 0,
      "Timer": 23,
      "TargetScore": 10
    }
  ]
}

Unity 中C#脚本:LevelJsonPrase.cs

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using LitJson;

public class LevelJsonPrase : MonoBehaviour {

    #region class
    [System.Serializable]
    class Level {
        public int Number = 0;
        public int IsLock = 0;
        public int Star = 0;
        public int TargetScore = 0;
        public float Timer = 0f;
    }
    [System.Serializable]
    class LevelList {
        public List<Level> levelList = new List<Level>();
    }
    #endregion

    #region variables
    [SerializeField]
    private TextAsset textJson;
    [SerializeField]
    private LevelList listInfo = null;
    #endregion

    // Use this for initialization
    void Start () {
        textJson = Resources.Load("LevelInfo") as TextAsset;
        listInfo = JsonMapper.ToObject<LevelList>(textJson.text);
    }
}
没有更多推荐了,返回首页