admin 管理员组

文章数量: 887021


2024年1月29日发(作者:update命令的用途是什么)

精心整理

脚本策划LUA基础

(研发中心/抗战项目组张哲)

课程目的

帮助学员认识游戏策划中脚本策划定位、指责,以及工作内容和特点,给新进行业者一个方向性的指引,建立正确的学习途径和工作价值观。

初步讲解LUA语言,让策划最LUA语言有比较清晰的了解,为以后学习、使用LUA语言打下基础

适合对象

应届毕业生、初级策划

前言

本课程的主要目的是帮助学员准确认识脚本策划这一职位的工作内容和特点,帮助其准确理解策划职责,提高自身能力。

脚本策划在游戏策划中比较容易上手,在对于初步进入游戏策划行业的人来说,脚本策划的入手程度要明显比系统策划、数值策划来的快。因为脚本策划初期所学习的对象就是脚本语言,这些语言有成型的规则和教程,有明确的方向可以学习。比如在这里将讲述的LUA语言。

相对于其他方向的策划来说脚本策划的后期发展方向相对单一,工作范围相对狭窄。俗话说“条条大路通罗马”,做某个方向的策划并不能说明以后的发展方向如何,而且事实上很少有策划能只做自己方向的事情不涉及其他方向的内容。

需要郑重声明的是,游戏策划行业里的“脚本”和影视制作中的“脚本”完全是两个不同的概念。游戏策划中的脚本不是剧本。

由于时间仓促以及作者水平有限,文中的错漏之处还请读者批评指正。

脚本策划

1.1 概述

脚本策划主要负责游戏中脚本程序的编写,有些类似于程序员但又不同于程序员,因为会负责游戏概念上的一些设计工作。通常是游戏设计的执行者。因此游戏脚本策划必须要有编程功底。

1.2 职能

脚本策划的工作是任务等的脚本编写,以及管理程序提供的各种需要策划维护的脚本接口。

如果说开发语言是游戏程序得以运行的基石,那么脚本语言就是游戏世界得以运行的基石。一切剧本、图片、音乐、动画等皆是由脚本语言整合在一起并由程序解释执行的。所以可以说脚本是程序与剧本之间的桥梁。脚本策划的职能就是建立起这个桥梁,

1.3 脚本语言

当前脚本语言层出不穷,在网络游戏行业比较流行的脚本语言是LUA和PYTHON。

LUA:Lua是一个小巧的脚本语言。该语言的设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。我们熟知的作品为《魔兽世界》“大话西游系列”

它的主页是。

精心整理

Python:PYTHON也是一款比较灵活的脚本语言,但是这里它不作为重点来论述,有兴趣的人可以去找相关资料进行学习。

LUA语言

1.4 概述

LUA语言是一款灵活的语言,使用它作为脚本的网络游戏很多大家都耳熟能详,比如RO,WOW,梦幻西游系列等。中青宝网的游戏也是使用LUA语言作为游戏脚本语言。

一门语言的学习从来就不可能一蹴而就的,这里也是按照正常的途径一点一点的来教给大家如何学习一门语言。我们将从一个策划对脚本的需求角度来了解LUA语言。

1.5 LUA的基本应用

通过上文对脚本策划的描述,我们可以知道脚本策划的大致工作,那么LUA语言就是进行这些工作的基础。

在我们所见到的游戏中到底有哪些地方使用了脚本?

例:梦幻西游里的跑环任务,魔兽世界里的BOSSAI设计,魔兽世界的副本设计等等,在中青宝网的游戏《抗战》中,UI界面都是使用LUA来进行编写的。

LUA语言是怎样来产生作用的?我们将在下面的学习中一点点来接触。

LUA语言基础

学习一门语言必须掌握一些基础,正如学习英语需要学会26个英文字母,学习汉语需要记住基本字形一样。

LUA语言中也有需要硬性记忆的东西,没有接触过计算机语言的人必须靠自己的记忆把以下的基础内容记住。这些东西可能没有一点用,但是缺少这些东西,你可能会犯严重的错误。

➢ 词汇约定:

LUA中的标识符可以是任何字符串,数字和下划线,但不能是数字开头。这符合大多数语言的标识符定义规则。(字符的定义依赖于当前的位置:任何字母排序的字符可以做为标识符被使用)。

以下的字符串是作为关键字被保留的,不能定义为标识符:

and break do else elseif end false for function if

in local nil not or repeat return then true until

while

LUA是大小写敏感的语言:and是一个保留字,但And和AND是不同的,合法的标识符。作为一个约定,标识符以下划线开头并紧跟大写字母(如:_VERSION)是LUA作为内部变量保留的。

下面的字符串指出另外一些标号:

+ - * / ^ = ~= <= >= < > == ( ) { } [ ] ;

: , . .. ...

斜体的字符串是被使用匹配的单引号或双引号定界的。它可以包括类型于C的转义符:

➢ 值和类型

LUA是一种动态类型语言,这意味着变量没有类型,只有值。在这个语言里没有类型定义,所有的值传达自已拥有的类型。

在LUA中有八种基本类型:nil、boolean、number、string、function、userdata、thread、table。.Nil是空值(nil)的类型。

没有语言基础的人理解起以上东西可能比较吃力,但是这些东西必须要记住,这是基础。

除此之外,还有很多基础性的知识需要掌握,这些东西需要花费时间去理解,记忆,例如:变量,强制等等

LUA脚本实例

在了解LUA基础后,这里我们先看一个LUA实例。

精心整理

Speaknum=4 --------随机对白的数量

Speak={} --------NPC给出的第一句随机对白,参数一对白,参数二几率

Speak[1]={'同志们!我们失去了许多英雄!这意味着我们失败了吗?不!这只是个开始!',25}

Speak[2]={'日寇的国力和军力是我中国的数倍之多!是什么使我们坚持到现在?!这是因为,我们进行的是一场正义的战争!',50}

Speak[3]={'大家的兄弟姐妹们,父老乡亲们,多少人死在了日寇的屠刀下!?我们绝不可忘记这悲痛和愤怒!',75}

Speak[4]={'同志们,同胞们,站起来吧!将悲痛和愤怒化作力量!站起来吧!中国万岁!',100}

functionClick(npc,player) --点击NPC

temp=GetSpeakNum(Speaknum,Speak)

locals=''..Speak[temp][1]..'/n/n/n<0>离开<0>'

player:InitChoose(s,'Cancel')

end

functionCancel()

end

这是一个从“抗战”游戏里拿出的脚本,该脚本的功能是当你点击NPC的时候随机出现三句对话,这三句对话出现的几率通过脚本作出规定。

Click是一个程序给出的函数接口,这个接口的作用是:当你点击NPC的时候会调用这个函数。这是NPC和玩家的交互切入点。

Speak={}这是一个表结构,在这个结构里我们可以定义一系列的想使用的东西。进行预先储存。

Locals这是定义一个局部变量,在LUA语言里,变量有着非常广泛的作用,它可以被赋值成数字,字符,字符串等几乎所有的常用值。

而InitChoose也是一个程序给出的接口,通过这个接口我们可以让游戏中的玩家和NPC对话。

这个脚本只是给出一个前提印象。暂时不深入讨论。

LUA常用结构

1.6 逻辑运算,算术运算

逻辑运算和算术运算比较简单,可以轻松掌握,这里不在冗述。

1.7 函数

在LUA脚本制作中,函数是非常重要的内容,它是构成所有脚本的主要构件。如上例中的Click函数。实际脚本多数就是这些函数间的调用。

函数有两种用途:1.完成指定的任务,这种情况下函数作为调用语句使用;2.计算并返回值,这种情况下函数作为赋值语句的表达式使用。

在我们编写脚本的时候这两类函数都经常使用。比如你想让做完某个任务的玩家获得奖励。那么可以给出一个奖励玩家的函数。例如在抗战里的奖励函数。

functionPrize(player)

ifplayer:FinshTask(‘失恋的海豚’)==1then

player:AddIteName(‘蔷薇种子’,0)

player:Addmoney(1000)

end

end

这里player是指针,我们可以通过函数对指针来进行一系列的操作。这个函数是判断玩家指针有没有完成“失恋的海豚”这个任务,如果完成了就给他一颗“蔷薇种子”同时奖励1000的钱

精心整理

一般来说,游戏脚本使用LUA语言都是对指针进行操作。例如对玩家进行奖励,判断玩家是否在做任务,判断玩家是否有某些物品,判断NPC是否存活等等。这里提到的“玩家”“NPC”实际都是指针。(指针的概念请没有程序基础的人参考相关资料进行理解)

在LUA语言中函数是有两部分构成:函数名和参数。

在上边的例子中Prize是函数的名称,而player是函数的参数。在刚接触脚本的时候经常会有些人不明白这些参数到底用来做什么,什么时候会出现参数这个概念。一般来说脚本语言中函数有两种出现方式:1.程序按需求给出的接口2.脚本策划自定义的函数。

程序按需求给出的接口:在这个接口里程序规定了函数的名称、数值、使用对象等等,这样的函数里参数是固定不变的。比如在抗战中Click(NPC,PLAYER)这个点击触发函数就有两个参数第一个参数是npc指针,第二个是player指针。无论这两个参数是被写成什么样子它们都依然代表这两个指针。在这样的函数里所有的参数是固定的,我们可以省略掉不使用的那部分。

自定义函数:在这里我们可以随意写函数名称,任意传递参数,例如上边的Prize函数。

1.8 表构造器

表是Lua特有的功能强大的东西。最简单的构造函数是{},用来创建一个空表。可以直接初始化数组。

表结构在LUA脚本语言中是非常常用的的一个结构,在这个结构里可以储存大量的数据,而这些数据可以用来进行一系列的操作。

例如如果我们游戏里进行PK,想对获得比赛的前10名发一些物品,那么就可以用表格来纪录这些名单。

PrizeName={}

PrizeName[1]=‘蓝色多瑙河’

PrizeName[2]=‘我是冠军’

精心整理

PrizeName[3]=‘挪威的森林’

PrizeName[4]=‘江湖’

PrizeName[5]=‘白色恐怖’

PrizeName[6]=‘轻纱漫舞’

PrizeName[7]=‘雪儿’

PrizeName[8]=‘王三力’

PrizeName[9]=‘我只是想看看名字对多能起多长’

PrizeName[10]=‘帅猫’

当玩家点击领奖NPC的时候我们可以得到当前玩家的名字,如果他的名字是表格里存的名字就可以获得奖品,并设置好不能再次领取,如果不是则可以通过对话告诉玩家“你没获得奖励资格。”之类的话来回复。

在这个表里PrizeName={}是初始化表格,而PrizeName[4]=‘江湖’这是在表格的第四个位置存入一个字符串“江湖”。

这个表格是基础的一元表,如果需要还可以构造多元表格例如

PrizeName={}

PrizeName[1]={name=‘蓝色多瑙河’,number=1}

PrizeName[2]={name=‘我是冠军’,number=2}

精心整理

PrizeName[3]={name=‘挪威的森林’,number=3}

PrizeName[4]={name=‘江湖’,number=4}

PrizeName[5]={name=‘白色恐怖’,number=5}

PrizeName[6]={name=‘轻纱漫舞’,number=6}

PrizeName[7]={name=‘雪儿’,number=7}

PrizeName[8]={name=‘王三力’,number=8}

PrizeName[9]={name=‘我只是想看看名字对多能起多长’,number=9}

PrizeName[10]={name=‘帅猫’,number=10}

这样就可以既记载玩家的角色名又记载玩家的名次。对得获得奖励的玩家近一部细分。

LUA的表格有两种书写形式比如PrizeName[3][name]和PrizeName[3].name所表示的都是“挪威的森林”这个字符串。

1.9 FOR

在LUA中FOR有两种作用,一个是循环,一个是迭代。

FOR循环也是脚本语言中经常使用的结构。比如上面的表格,如果想一次性的打印所有获得奖励的人的角色名就可以这样写:

Locals=‘’

fori=1,10do

ifplayer:GetName==PrizeName[i].namethen

s=s..PrizeName[i].name

end

print(s)

如果这个脚本在抗战游戏中运行,得到的结果是:“蓝色多瑙河我是冠军挪威的森林江湖……帅猫”这一系列的字符串。

从这里我们可以看到FOR循环在脚本中两个最主要的功能:1.遍历列表,2.叠加,当然这个结构还可以做迭代器,比如在抗战中用到的按队伍名称遍历队伍

fork,o

end

这就是按名称遍历玩家队伍列表,属于迭代结构,有关更深入的迭代和循环大家可以深入学习LUA语言。这里不再多述。

LUA语言实现目标和逻辑

实际在LUA脚本中,最重要的并不是如何去使用该语言去写一个脚本,大家都应该明白,一个最蹩脚的程序员恐怕也能够比脚本策划更熟练的应用这个脚本语言。

那么作为一个脚本策划具体工作该做什么?实际最具体的工作就是设计一个流程并明确它的逻辑。

比如很简单的一个对话,什么条件下出现这个对话?对话的几率是多少?再复杂点的就是任务。玩家在什么情况下可以接到任务?做过该任务能不能接,已经接了该任务但是没完成能不能接,接了任务又放弃了能不能接?完成了这个任务还没有领取奖励的时候能不能接?这就需要一系列的流程判断。

任务判断是一个最简单,最基础的流程,大的任务流程是由许多这样的流程来完成的比如现在很多游戏里都有的连续性做任务获得经验。就是由一系列连续的任务构成的而且这些任务可以重复做,这里边的逻辑就要比单一任务复杂很多。

有些比较大的系统实际都是一系列复杂的流程判断,所以在这些系统里不但要写出玩法,奖励,更重要的是这中的流程。尽量形成流程图。

需求接口的提出和使用

精心整理

光有脚本语言,不能形成脚本,脚本语言只能进行逻辑性的判断或者运算。这些运算和判断如果想在游戏里产生效果就需要把脚本和游戏引擎连接起来。这就是程序接口。

当我们想实现一个功能的时候,首先要让程序给出一个程序接口,然后按这些接口来扩展,最终实现指定的功能。

所以脚本策划要明白自己想干什么,能不能实现,然后让向程序提出需求,得到对应的接口。

结束语

脚本策划初期非常容易发展。你有明确的学习努力目标——学习并应用脚本语言,这就比系统策划和数值策划都要容易上手。但是如果只局限在脚本的范围内不进去到后期就没有发展空间。所以脚本策划不能一心只想写好自己的脚本。宽阔的思路厚重的积累都是做好一个脚本策划并发展自身的必要条件。

脚本策划是最有意思,作为脚本策划你可以亲自动手实现很多想法,比如界面,比如BOSS设计,比如副本,或者是战场等等。

脚本语言是脚本策划的工具,如果想做好自己的工作,如果想在脚本策划方面发展,那么请熟练应用基础的LUA语言。

重点推荐《LUA学习手册》

谢谢大家!


本文标签: 脚本 策划 语言 游戏