Skip to content

cuiwenchu

chu
查看 21856 推荐 0 ?? 0
?

Shortcut

Prev上一页 文章

Next下一页 文章

Larger Font Smaller Font 向上 向下 Go comment 打印
?

Shortcut

Prev上一页 文章

Next下一页 文章

Larger Font Smaller Font 向上 向下 Go comment 打印

升级这些怪兽

在下图中,能看到在更高级别中怪兽看起来有多恐怖。

它太松软了!不过如果尝试去偷它的曲奇,怪兽就会变成杀手。

脚本作为执行怪兽登记系统的基础。它追踪在每一个等级怪兽拥有的力量,当然有怪兽的当前等级。
现在创建这个脚本。

在ProjectBrowser中选择Prefabs/Monster ,添加C# 脚本并命名为MonsterData。在MonoDevelop中打开脚本并在MonsterData 类上方添加以下代码。

[System.Serializable]
public class MonsterLevel{
    public int cost;
    public GameObject visualization;
}

这个创建了MonsterLevel。它将花费(金币,以后将会支持)和特定怪兽级别的视觉形象归为一组。

在顶部添加 [System.Serializable] 来使类的实例可以在检视面板中编辑。这样允许快速更改Level类中的所有值——及时游戏正在运行。这个对于平衡游戏非常有用。

定义怪兽等级

这种情况下,将预先定义的MonsterLevel 存储在一个List里。

为什么不仅仅用MonsterLevel[]?因为这里多次需要特定MonsterLevel 对象的索引。当然为这个写代码并不难,使用执行 Lists功能的IndexOf()。这里就不用重复工作了。

重组轮子通常是一个坏主意(来自Michael Vroegop)

在MonsterData.cs顶部添加下边的using声明:

using System.Collections.Generic;

这使你可以访问通用数据结构,因此可以在脚本中使用List 类型。

注:泛型是C#中非常强大的一部分。它们允许你在没有指定类型的情况下定义一个类型安全的数据结构。这个对于像列表和集合这种容器类型非常实用。想学更多关于泛型的知识,看一下Introduction to C# Generics。

现在在MonsterData 中添加以下变量来存储MonsterLevel的列表:

public List<MonsterLevel> levels;

如果使用泛型,请确保 levels List 只包含了MonsterLevel 对象。

保存文件并切换到unity来配置每个阶段。

在Project Browser中选择Prefabs/Monster 。在 Inspector中,可以在MonsterData (Script) 组件中看到一个Levels 字段。将它的size 设置为3.

接下来,将每个等级的cost 设置为以下值:

Element 0: 200
Element 1: 110
Element 2: 120

现在分配可视化区域值。

在项目浏览视口展开Prefabs/Monster 以便看到它的子集。将子集 Monster0拖拽到Element 0的visualization 区域。重复将Monster1 分配到 Element 1 并将Monster2 分配到 Element 2。看下边演示这个过程的GIF。

当选择 Prefabs/Monster时,预制件看起来应该是这样的:

监视面板中怪兽等级的定义。

定义当前等级

切换回MonoDevelop中的MonsterData.cs ,并为MonsterData添加另一个变量。

private MonsterLevel currentLevel;

在私有变量currentLevel 中将会存储怪兽的当前等级。我确信你没有看到那个到来:]
现在设置currentLevel 并使它可以被其他脚本访问。将下边代码随着实例变量声明加入到MonsterData中:

//1
public MonsterLevel CurrentLevel{
//2
  get {
    return currentLevel;
    }
//3
  set {
    currentLevel= value;
    int currentLevelIndex=levels.IndexOf(currentLevel);
    GameObject levelVisualization= levels[currentLevelIndex].visualization;
    for(int i=0;i<levels.Count;i++){
        if(levelVisualization!=null){
            if(i==currentLevelIndex){
                levels[i].visualization.SetActive(true);[/i]
            }else{
                levels[i].visualization.SetActive(false);
            }
            }
        }
    }
}

有太多的C#?按顺序看一下:

  1. 为私有变量currentLevel定义一个属性。随着属性的定义就,就可以像其他变量一样呼叫了:像CurrentLevel (从类的内部)或monster.CurrentLevel(从类的外部)一样。在属性的getter或 setter方法里可以定义自定义行为,通过仅仅使用一个getter,setter或者两者同时使用,可以控制属性是只读,只写,还是读写。
  2. 在getter中,返回currentLevel值。
  3. 在setter中,为currentLevel分配新的值。接下来获取现有等级的索引。最后依据currentLevelIndex迭代所有的levels 并设置可视化是否为激活状态。这样写太棒了,因为这意味着无论什么时候设置了currentLevel,精灵都会自动更新。属性确实很方便使用。

Add the following implementation of OnEnable:

添加以下OnEnable实现。

void OnEnable(){
    CurrentLevel= levels[0];
}

根据位置设置CurrentLevel ,确保它只显示正确的精灵。

注:在OnEnable 中取代OnStart中初始化属性很重要,因为当预制件被实例化时才呼叫命令方法。创建预制件时(如果预制件被存为可用状态了)OnEnable 会被立刻呼叫,不过OnStart 只有当对象作为场景的一部分开始运行时才被呼叫。

在放置怪兽之前需要检查这个数据,所以要在OnEnable中初始化。

保存文件并切换带unity。运行项目并放置怪兽;现在他们显示正确的而且是最低级的精灵。


List of Articles
编号 分类 标题 作者 日期 查看
20 모바일 구글플레이 웹에서 국가별로 이동 chu 2020.11.19 399
19 모바일 rollingostrich 隐私条款 chu 2020.04.20 3369
18 모바일 安卓应用在各大应用市场上架方法整理 chu 2018.05.03 8890
17 모바일 如何在unity中制作塔防游戏 —— 完结篇 10 chu 2017.02.13 20010
16 모바일 如何在unity中制作塔防游戏 —— 瞄准敌人 09 chu 2017.02.13 19741
15 모바일 如何在unity中制作塔防游戏 —— 完善敌人 08 chu 2017.02.13 20063
14 모바일 如何在unity中制作塔防游戏——通知系统 07 chu 2017.02.13 22603
13 모바일 如何在unity中制作塔防游戏——学会转向 06 chu 2017.02.13 18472
12 모바일 如何在unity中制作塔防游戏——敌人来了 05 chu 2017.02.13 20497
11 모바일 如何在unity中制作塔防游戏——继续升级怪兽 04 chu 2017.02.13 18452
» 모바일 如何在unity中制作塔防游戏——升级怪兽 03 chu 2017.02.13 21856
9 모바일 如何在unity中制作塔防游戏——放置怪兽 02 chu 2017.02.13 18825
8 모바일 如何在unity中制作塔防游戏——搭建场景 01 chu 2017.02.13 22846
7 모바일 可视化游戏制作软件 chu 2016.03.11 23800
6 모바일 쇼미 훙미note3 한글화 하기 file chu 2016.03.09 41527
5 모바일 cocoapods 安装 chu 2015.10.08 25325
4 모바일 这个导演用iPhone拍了一部电影 然后就火了 chu 2015.04.27 26175
3 모바일 iphone에 메일 세팅 file chu 2015.03.09 26173
2 모바일 앱 개발자 시장 조사 보고서 - Developer Economics 1Q 2014 chu 2015.02.13 26124
1 모바일 iphone으로 영화 촬영 chu 2015.02.02 35980
Board Pagination Prev 1 Next
/ 1