相机示例

镜头操控

除了基本的 camera customization (镜头自定义) 之外,你可以操作游戏镜头来创建特定的玩家/角色视图系统、将镜头锁定到某个世界位置、创建独特的镜头效果等。

镜头属性

迷你世界 Studio Camera 有几个内置属性,其中包括:

属性描述
Camera.PickPosition摄像机跟随鼠标在游戏内指向的三维坐标。此属性通常用于在游戏中定位和移动镜头。
Camera.LookFocus3D 空间中镜头所看到的点。将镜头指向特定方向时,应更新此属性,因为某些视觉效果将根据其与焦点的距离而更加详细。
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将使镜头向下倾斜来直接观察对象。

Last Updated: