相机示例
镜头操控
除了基本的 camera customization (镜头自定义) 之外,你可以操作游戏镜头来创建特定的玩家/角色视图系统、将镜头锁定到某个世界位置、创建独特的镜头效果等。
镜头属性
迷你世界 Studio Camera 有几个内置属性,其中包括:
属性 | 描述 |
---|---|
Camera.PickPosition | 摄像机跟随鼠标在游戏内指向的三维坐标。此属性通常用于在游戏中定位和移动镜头。 |
Camera.LookFocus | 3D 空间中镜头所看到的点。将镜头指向特定方向时,应更新此属性,因为某些视觉效果将根据其与焦点的距离而更加详细。 |
Camera.FieldOfView | 屏幕上可以看到的可观察到的游戏世界的范围,垂直方向的测量值介于 1–120 度之间(默认值为 70)。 |
编写镜头脚本
在脚本中,游戏镜头可以通过 CurrentCamera 对象来访问:
获取当前镜头
local camera = workspace.CurrentCamera
每个玩家的镜头都处于其本地设备上,因此应当将自定义镜头代码放置至StarterPlayerScripts或StarterPack内的LocalScript中。若将这些脚本置于别处,则代码将无法正确地控制镜头。
越肩视角
基本的越肩视角镜头,通常位于第三人称射击游戏中,可以使用下面的脚本来实现。此镜头将锁定在角色的背后,玩家使用鼠标来转动(非定向输入)。
注意:可以通过调整第 7 行上的镜头偏移值改变镜头相对于角色的位置。例如,将其放在角色的左肩膀上 (-2, 2, 8) 或者是将镜头拉到离玩家更远的位置 (2, 2, 15)。
缩近/拉远
使用下面的脚本可以实现一种简单的缩近/拉远镜头系统。本例中使用鼠标中间来进行放大和缩小,使用 ContextActionService 来在移动设备上创建虚拟的缩放按钮。
缩近与拉远的速度可以通过第 9 行上 TweenInfo.New() 的第一个参数进行调整,并且作用域缩放力可以使用第 60 行上的 FieldOfView 值(介于 10 和 20 之间最佳)进行调整。
绕着对象旋转
若要让镜头全部或部分围绕镜头旋转,请尝试使用以下脚本。该脚本具有可调整镜头偏移、旋转时间、重复计数、过渡类型等功能。
local array_point={ --初始摄像机点位
{0,-600},--1
{300,-519.615},--2
{519.615,-300},--3
{600,0},--4
{519.615,300},--5
{300,519.615},--6
{0,600},--7
{-300,519.615},--8
{-519.615,300},--9
{-600,0},--10
{-519.615,-300},--11
{-300,-519.615},--12
}
local TweenService = game:GetService('TweenService');
local workspace = game:GetService("WorkSpace")
local spawnLocation=workspace.SpawnLocation1
local spawnLocationX=spawnLocation.Position.X+50
local spawnLocationZ=spawnLocation.Position.Z+50
eular=0
-- local goal={}
-- goal.Position = Vector3.New(spawnLocationX+array_point[1][1],spawnLocation.Position.Y+200,spawnLocationZ+array_point[1][2])
-- goal.Rotation = Quaternion.FromEuler(0,eular,0)
-- runCameraTableRotation(goal)
-- eular=-30
local PlayeObj=game:GetService("Players").LocalPlayer.Character
PlayeObj.Position=Vector3.New(spawnLocationX,spawnLocation.Position.Y+100,spawnLocationZ)
local CameraObject = workspace.CurrentCamera
CameraObject.Position=Vector3.New(spawnLocationX+array_point[1][1],spawnLocation.Position.Y+200,spawnLocationZ+array_point[1][2])
CameraObject.Euler=Vector3.New(0,eular,0)
for j=1,500 do --相机旋转500圈
for i=1,12 do
local goal={}
-- r=600
goal.Position = Vector3.New(spawnLocationX+array_point[i][1],spawnLocation.Position.Y+200,spawnLocationZ+array_point[i][2]) -- 170.19,6877.54,4049.26 -4,-91.47
goal.Rotation = Quaternion.FromEuler(0,eular,0)
if(j==1 and i==1)then
--context.delayTick(1,goal)
else
context.delayTick(20*(i-1)+(12*20*(j-1))-19,goal)
end
if eular==-180 then
eular=180
end
eular=eular-30
-- if(i==13)then
-- eular=0
-- end
end
end
调整第 10 至 14 行上的变量可以控制脚本的行为表现。举例来说,如果镜头位于目标对象上方比较高的位置,如 cameraOffset 矢量值为 0, 30, 12,将 lookAtTarget 设为true将使镜头向下倾斜来直接观察对象。