【0.990】【SE插件制作】6. 情景脚本(SCENARIO SCRIPTS)
spaceengine吧
全部回复
仅看楼主
level 11
翻译自官网手册,
lz
自己翻译的,拒绝机翻[滑稽]
2019年03月03日 07点03分 1
level 11
第一篇:情景脚本(SCENARIO SCRIPTS)
SpaceEngine 控制台和*.se文件
SpaceEngine 0.990引入了一种全新的文件*.se文件,这便是情景脚本文件,它们包含有SE可以执行的代码,这个教程很好的说明了0.990引入的场景脚本能够干什么,默认的*.se存放目录是data/scripts/或是addons/*/scripts/。
你可以在SpaceEngine中打开控制台(默认是按下键盘上的[~])并且输入:run filename 执行*.se文件。
如果这个文件filename.se存在与上述的文件夹中,那么他就会被运行了,另一种执行*.se文件的方法是在你的系统里把*.se文件的打开方式选择为SpaceEngine.exe,这样,双击se文件便会启动SpaceEngine,然后在游戏中执行,如果当前已经有一个SpaceEngine在运行中,那么双击打开se文件后,*.se脚本便会在当前的SE游戏中被执行。
有一些命令可以(或者必须)含有附加的参数(additional parameters)(被包含在大括号里)
Goto
{
Time 5.5
Dist 25000
}
附加的参数也可以全部写在一行中:
Goto { Time 5.5 Dist 25000 }
使用单行格式有时候可以使你的脚本更加紧凑,同时也更易于阅读和被人理解。
所有的命令都以他们的功能被划分为组(groups)。详情见下文。
2019年03月03日 07点03分 2
忘了说了,貌似这是0.990引入的全新功能[滑稽]
2019年03月03日 08点03分
第二篇被折叠[喷]
2019年03月03日 13点03分
level 14
看得我以为0990已经发布了[滑稽][心碎]
2019年03月03日 07点03分 3
[滑稽]
2019年03月03日 08点03分
level 11
第二篇:脚本控制命令
Run命令
运行一个*.se脚本,从一个脚本中启动另外一个脚本也是可行的,我们最多允许16个这样的嵌套,这对于执行多个命令或是在另一个脚本中添加一个相机样本(cameraspline path)路径很有用。语法:
Run filename
运行存在于data/scripts/或是addons/*/scripts/目录中的filename这个脚本。
Run “path/filename.sc”
运行一个在提供的目录中的脚本,这个脚本坐在位置应该在SE的安装目录内。
Break命令:
停止当前运行的脚本,如果当前运行有多个脚本,那么他们都将会被停止运行,主要是直接在控制台中执行这个命令,但是也可以写在*.se脚本里。
语法:
Break
Wait命令:
根据所指定的事件,延迟运行脚本,所用时间的单位是秒
语法:
Wait 3.5
即推迟3.5秒执行脚本,这个命令是SE脚本中最有用的命令之一,很多命令需要等待上一个命令运行完后再运行,因此你将会经常使用到它。例如,当你使用带有参数Time 10(飞行时间:10秒)的Goto命令以后,那你可以使用Wait 10命令推迟脚本后部内容的执行,直到Goto命令运行完。
CheckVersion命令:
检查当前的SE版本是否是符合命令运行的版本,如果不适合,那么以下内容将会展示给用户:This script was designed for a different version of SpaceEngine. Itcannot be run in the current version, sorry”
语法:
CheckVersion 990
检查当前SE版本是否是0.990
if, elif, else, endif
这些是条件执行语句,语法:
if { Variable == 1.0 }
if_commands
elif { Variable >= 2.0 }
elif_commands
else
else_commands
endif
其中的Variable是在SE中的一个变量名(详情请查看“变量“这一章),==是比较运算符,还可以使用: !=(不等于) < (小于) > (大于) <= (小于等于) >= (大于等于)
运算符两边的变量可以是整形(integer),单精度浮点(float),双精度浮点(double)或者是0或1,亦或是true或false。
如果例中的第一个if语句中的条件成立,那么if_commands处的内容将会执行,一直到endif为止。如果其中有elif{……},那么如果第一个if{……}中的内容不成立的话,程序将会判断elif中的条件是否成立,诺成立,那么elif_commands处的内容将被执行。
如果if语句中还存在有else,那么在它之前的if和elif条件都不满足前,else_commands出的内容将被执行。
你必须使用大括号将if,elif后的条件语句括起来,否则会出现“Syntax Error”,elif,else都是可选使用的。
重要提示:暂未支持多重if语句,也就是说:if { Var1 == 1 } if { Var2 == 0 } command endif endif无法运行且会有错误信息:Nested IF statement is not supported
Loop,EndLoop
这是一个简单的循环语句,语法是:
Loop
commands
EndLoop
这将会使得例中commands处的内容无限次循环的被执行,其中还可以使用Wait命令延迟运行。
2019年03月03日 08点03分 4
level 14
内置Lua才是明智之选[滑稽]
2019年03月03日 08点03分 5
level 11
相机控制命令
FOV命令:设置可视角度,语法:
FOV 90
Select 命令:选择一个太空物体,飞船,航路点(飞行或航海每一阶段的坐标点)(waypoint)或是样本路径(spline path)。相当于用鼠标点击一个对象,或者通过搜索工具选择,如果该命令成功执行,那么选择箭头(指针)就会被切换为已选的物体,如果命令执行失败,那么控制台将会报错,从而使得脚本后的命令执行失败。语法:
Select Earth –通过名称选中一个太空中的物体,如果物体名称中间没有空格,那么可以不用双引号将其引起。
Select “RS 8474-2738-5-27954-210 1” – 通过名称选中太空中的物体,名称中间有空格的情况下要加双引号。
Select “Pandora|Sol” – 通过对象的名和母星名选中一个对象,对于对象名冲突时很有用。
Select “Waypoint 1” – 选中一个之前定义好的航路点。(详情请看”航路点”一章)
Select “Path 1“– 选中一个之前定义好的样本路径。(详情请看”样本路径“一章)
Unselect命令:取消选中任何已选的对象,选择箭头(指针)会消失。语法:
Unselect
Goto命令:将相机移动到已选择处,如果没有任何已选中的对象,控制台中将报错,脚本后部的命令可能出错。语法:
Goto – 开始以默认参数航行
Goto {……} – 以自定义的参数开始航行,例如:
{
Time 15.0 – 飞行历时15秒.
Dist 0.001 – 在距离对象以秒差距为单位的位置处停止,无默认值.
DistKm 12500.0 – 在距离对象以千米为单位的位置处停止; 无默认值.
DistRad 2.5 – 在距离对象以对象半径倍数为单位的位置处停止;默认值取决于对象类型,行星该值默认为2.
HeightKm 150.0 – 停止处的高度; 无默认值.
Lon 86.4 – 在86.4度的纬度处停止,单位:度; 无默认值.
Lat 13.5 – 在13.5度的经度处停止,单位:度,无默认值
Up ( 0.871, 0.124, -0.355) – 停止点上升矢量;无默认值lt.
(以下设定飞行物体停止时的姿势(欧拉角))
Yaw 60.3 – 在偏航角60.3度处停止; 无默认值.
Pitch 21.6 – 在俯仰角21.6度处停止;无默认值.
Roll 35.5 – 在翻滚角35.5度处停止;无默认值 .
}
如果Lon和Lat中的其中一个参数(或两个参数同时)被提供,那么停止点的绑定模式将是“SyncRot“(貌似有“在同步轨道上的意思?”)。
如果没有提供停止点的转动(貌似是绕着什么东西公转)参数(rotation-parameters)提供,那么相机最后停止时围绕着选中对象的中心公转。
如果选中的对象是样本路径(spline path),相机将会运动到路径的第一个节点位置,然后将自己的方向变为这个节点的方向。
如果你想立即传送到选中的位置,使用Time 0即可。
如果要将相机位置在结束时对准对象,不需要设置任何相机方向的参数或者使用Yaw 0Pitch -90 Roll 0。
重要:下一个命令会在Goto运行以后立即被运行,诺在Goto中指定了时间,那么应该在其结束之后使用Wait命令,它的值应该与之前指定的时间的值相同。
Center命令:
开始转向所选的对象,如果没有对象选中,一个错误信息就会显示在控制台,进而之后的命令也可能会运行错误。
语法:
Center – 以默认参数开始转向
Center {……} – 以自定义的参数转向,比如:
{
Time15.0 // 转向历时15秒,默认是2秒
}
重要:下一个命令会在Center运行以后立即被运行,诺在Center中指定了时间,那么应该在其结束之后使用Wait命令,它的值应该与之前指定的时间的值相同。
Horizon命令:
开始向着选中对象的地平线转向。如果没有对象选中,那么控制台中将会显示一个错误信息,进而之后的命令也可能会运行出错。
语法:
Horizon – 以默认的参数向地平线转向
Horizon {
Time15.0 // 转向历时15秒,默认是2秒
}
重要:下一个命令会在Horizon运行以后立即被运行,诺在Horizon中指定了时间,那么应该在其结束之后使用Wait命令,它的值应该与之前指定的时间的值相同。
2019年03月07日 14点03分 6
这里的相机,指的是屏幕显示的内容,屏幕显示的内容就是“相机”看到的内容
2019年03月07日 14点03分
level 11
GotoLocation
立即把摄像机移动(传送)到指定地点,根据具体场景不同,加载时间可能稍长。你可以使用 FadeOut/FadeIn 和 WaitTrigger “LoadingComplete” 来隐藏加载过程。如果当前的SE版本与Location属性中指定的版本不符,将会出现一条错误信息。
语法:
GotoLocation “Volcano under rings” - 转到一个位置(双引号内的是从(f6菜单中)位置浏览器里的地点名字)
GotoLocation “Location name” { … } 转到一个位置,此位置的具体代码写在大括号{ }中。
如果一个位置不存在于默认的SE中,一定要使用这个方法,否则你的场景脚本不能在其他用户的游戏里起效。要生成一个具体位置代码,只需将这个位置添加到位置菜单中(按f6打开位置菜单),然后点击“share”->”Copy script code to clipboard”,然后把具体的位置代码复制进脚本,最后把Place改成GotoLocation即可。
注意:保存位置时保存的永远是当前立体基础(stereobase???说的时当前显示的画面吗[汗]sense of a scale in 3D/VR modes),你可以自定义一个立体基础(stereobase),使用Stereobase变量(命令:Set Stereobase XXXX)。
GotoURL
和GotoLocation很像,但是使用的是位置url而不是位置代码,如果当前的SE版本和URL中所使用的版本不同会出现错误信息。语法:
GotoLocation “se://v=981&m=1&n=%CB%F3%ED%E0%20%C3%…” ——到达这个地点。这个命令可以看作是GotoLocation的便捷版本。
要生成位置URL,只需将当前位置添加到位置浏览器,再点击“share”->“Copy URL to clipboard”,然后把位置url粘贴进来就好了。
Follow
将相机的绑定模式更改为Follow——相机将会同选定的物体中心一起运动,即忽略对象旋转,如果一个新的物体被选中了,那么当前follow的对象就会变成那个新的对象,否则该命令仅仅改变了相机绑定模式。语法:
Follow
SyncRot
将相机绑定模式更改为SyncRot,相机将会与选中的物体的表面一起运动,即与选择的旋转表面保持相对静止,如果一个新的物体被选中,那么当前跟踪的物体就会变成新选中的物体,否则这个命令只改变相机绑定模式,语法:
SyncRot
Free
将相机绑定模式更改为Free——不绑定任何物体,改变选中的物体也不会改变相机的绑定模式,语法:
Free
Track
启用追踪选定的对象,相机将会旋转以便追踪选定的物体,并使其保持在屏幕中央,改变选中对象不会改变Track,语法:
Track
Untrack
关闭Track模式,语法:
Untrack
MoveMode
改变相机的运动模式(free/spacecraft/aircraft),语法:
MoveMode 2
可用的值有:
1 – 自由模式(无惯性,飞行方向跟随目标方向)
2 – 飞船模式(运动+转动惯量,飞行方向与目标方向无关)
3 – 飞机模式(运动+转动惯量,飞行方向跟随目标方向)
Speed
以秒差距每秒为单位设置相机速度,语法:
Speed 2.5 – 将在参考运动模式(Spectator motion mod)下的相机移动速度改为2.5 pc/s,否则将会把加速度设置成0.25pc/s^2(相机模式是惯性的时候:例如设置的是飞船或者飞机速度)
SpeedKm
以千米每秒为单位设置相机速度,语法:
SpeedKm 123.4 - 将在参考运动模式(Spectator motion mod)下的相机移动速度改为123.4km/s,否则将会把加速度设置成0.01234 km/s^2(当相机模式是惯性的时候:例如设置的是飞船或者飞机速度)
Fly
将相机沿视图方向移动,语法:
Move {……} – 开始以默认的参数移动
{
Axis(0, 0.707, 0.707) - 相对于当前相机方向的运动方向向量;默认值为(0、0、1)即向前飞行
Speed 5.5 - 每秒的运动速度(以秒为单位);无默认值
SpeedKm 17.6 - 以公里/秒为单位的运动速度;默认值为100
FadeTime 1.5 - 平滑启动持续时间(秒);默认值为2
Func “Cubic” - 平滑启动类型,默认为线性“linear”,可用的值还有:“Quadric”, “Cubic”, “Sin”
}
重要:下一条脚本命令会在此命令结束以后立即运行,你必须在此命令后增加一条Wait命令以及设置一些等待时间以便查看动作效果。
2019年05月26日 01点05分 7
level 11
StopFly
在具有惯性的运动模式下平滑地停止相机运动,或取消“移动”。语法:
StopFly

StopFly – 开始以下列自定义参数运行:
{
FadeTime 1.5 平滑停止时间,单位:秒; 默认值 2.
Func “Cubic” – 平滑类型; 默认是 “Linear”, 还可以使用: “Quadric”, “Cubic”, “Sin”.
}
Turn
令相机开始以自身的某一轴转动(旋转),语法:
Turn – 开始以默认参数运动

Turn – 开始以下列自定义参数运动:
{
AngularSpeed 45.0 – 以角度每秒为单位旋转,默认值 10.
Axis (0, 0.707, 0.707) – 旋转轴偏移角度; 默认值 (0, 1, 0) 即轴垂直与相机。
FadeTime 1.5 – 以秒为单位平滑开始运动时间; 默认值 2.
Func “Cubic” – 平滑类型; 默认是 “Linear”, 还可以使用: “Quadric”, “Cubic”, “Sin”.
}
重要:下一条脚本命令会在此命令结束以后立即运行,你必须在此命令后增加一条Wait命令以及设置一些等待时间以便查看动作效果。
StopTurn
取消Turn命令,语法:
StopTurn – 以默认参数停止

StopTurn
{
FadeTime 1.5 – 平滑停止时间,单位:秒; 默认值 2,
Func “Cubic” – 平滑类型; 默认是 “Linear”, 还可以使用: “Quadric”, “Cubic”, “Sin”.
}
Orbit
以轨道环绕做圆周运动(围绕着)选定的物体,语法:
Orbit – 以默认参数开始

Orbit
{
AngularSpeed 45.0 – 环绕速度,单位角度每秒; 默认值 10。
Axis (0, 0.707, 0.707) – 轨道环绕的轴的偏转角度; 默认值 (0, 1, 0) ,轨道环绕的轴即选定物体的极轴。
FadeTime 1.5 – 以秒为单位平滑开始运动时间; 默认值 2。
Func “Cubic” – 平滑类型; 默认是 “Linear”, 还可以使用: “Quadric”, “Cubic”, “Sin”。
}
重要:下一条脚本命令会在此命令结束以后立即运行,你必须在此命令后增加一条Wait命令以及设置一些等待时间以便查看动作效果。
StopOrbit
取消以轨道环绕命令,语法::
StopOrbit

StopOrbit
{
FadeTime 1.5 – 平滑停止时间,单位:秒; 默认值 2。
Func “Cubic” – 平滑类型; 默认是 “Linear”, 还可以使用: “Quadric”, “Cubic”, “Sin”.
}
2019年05月26日 05点05分 8
1