Kullanıcıların bu dünyada yaşadığı gibi uzay istasyonunda bilgi tüketmesine izin veren etkileşimli bir harita arayüzü eklemek istedik.Deneyimi üzerine yayılan bir ekranda yerine 3B uzayın içinde haritayı oluşturmaya karar verdik.Bu tür bir diegetik görselleştirme, dünya ile daha fazla etkileşime izin verir, böylece kendini tamamen ayrı bir deneyim olarak hissetmek yerine.
Haritayı tasarla
Haritayı tasarlamak için:
Dışarıdan bir uygulamada UI'yi alay ettik ve nasıl görünmesini istediğimize dair kaba bir fikir bulduk.
Haritanın bireysel parçalarını .png olarak ihraç ettik ve bunları Studio'ya aktardık.
Haritayı oluştur
Stüdyo içinde harita oluşturmak, Parts ve SurfaceGuis kullanarak yapıldı.
Etkileşimli olmayan elemanlar için, tek yapmamız gereken parçaya bir SurfaceGui nesne eklemek.
Etkileşimli elemanlar için, ayrıca 3B çalışma alanındaki uygun parçaya bağlı özelliği ile içinde olması gerekir.Böyle yapmak, düğme olayları eklemenize izin verir.
Bir paralaks etkisi elde etmek için, üç ayrı ScreenGui örneği üç eşsiz Parts ile farklı X değerleri verilen üç farklı kullanıma verdik.
Sonra SurfaceGui.LightInfluence özelliği ile bir parıltı efekti ekledik.Özellik değerini 1'den daha az bir şeye ayarlarsanız, SurfaceGui.Brightness özelliğini etkinleştirir.Parlaklığı ayarlayarak, görüntüden yayılan parlamayı artırabilirsiniz.
Kullanıcıların haritanın görüntülenmesini değiştirmesine izin vermek için, bir 3B modeline bağlı bir ProximityPrompt kullandık.Bu, kullanıcının dünya öğeleriyle etkileşimine izin vermenin kolay bir yoludur.
Son olarak, ReplicatedStorage içinde bir UITweenModule ModülScript kullanarak, arayüzü TweenService ve devletin belirlenmesi için biraz mantık ile gizledik ve gösterdik.Kullanıcının neye tıkladığını izleyerek, alfa, konum ve boyut gibi çeşitli özellikler aracılığıyla elemanları gizleyip gösterebiliriz.
UITweenModule ModülScriptulocal TweenService = game:GetService("TweenService")local UITween = {}-- solgun görüntüler içinfunction UITween.fadePart(object, amount, time, delay)local tweenAlpha = TweenInfo.new(time, --SüreEnum.EasingStyle.Quad, --Kolaylaştırma StiliEnum.EasingDirection.Out, --Kolaylaştırma Yönü0, --Tekrarlama sayısıfalse, --Doğruysa tersine dönerdelay --Gecikme süresi)local tween = TweenService:Create(object, tweenAlpha, {Transparency = amount})tween:Play()endfunction UITween.fade(object, amount, time, delay)local tweenAlpha = TweenInfo.new(time, --SüreEnum.EasingStyle.Quad, --Kolaylaştırma StiliEnum.EasingDirection.Out, --Kolaylaştırma Yönü0, --Tekrarlama sayısıfalse, --Doğruysa tersine dönerdelay --Gecikme süresi)local tween = TweenService:Create(object, tweenAlpha, {ImageTransparency = amount})tween:Play()end-- solgun görüntüler içinfunction UITween.fadeBackground(object, amount, time, delay)local tweenAlpha = TweenInfo.new(time, --SüreEnum.EasingStyle.Quad, --Kolaylaştırma StiliEnum.EasingDirection.Out, --Kolaylaştırma Yönü0, --Tekrarlama sayısıfalse, --Doğruysa tersine dönerdelay --Gecikme süresi)local tween = TweenService:Create(object, tweenAlpha, {BackgroundTransparency = amount})tween:Play()end-- solgun metin içinfunction UITween.fadeText(object, amount, time, delay)local tweenAlpha = TweenInfo.new(time, --SüreEnum.EasingStyle.Quad, --Kolaylaştırma StiliEnum.EasingDirection.Out, --Kolaylaştırma Yönü0, --Tekrarlama sayısıfalse, --Doğruysa tersine dönerdelay --Gecikme süresi)local tween1 = TweenService:Create(object, tweenAlpha, {TextTransparency = amount})tween1:Play()end-- metin ve görüntüleri hareket ettirmek içinfunction UITween.move(object, position, time, delay)task.wait(delay)object:TweenPosition(position, Enum.EasingDirection.Out, Enum.EasingStyle.Quint, time)end-- boyutu değiştirmek içinfunction UITween.size(object, size, time, delay, override, callback)local tweenSize = TweenInfo.new(time, --SüreEnum.EasingStyle.Quint, --Kolaylaştırma StiliEnum.EasingDirection.Out, --Kolaylaştırma Yönü0, --Tekrarlama sayısıfalse, --Doğruysa tersine dönerdelay, --Gecikme süresioverride,callback)local tween = TweenService:Create(object, tweenSize, {Size = size})tween:Play()endfunction UITween.rotate(object, rotation, time, delay, override, callback)local tweenSize = TweenInfo.new(time, --SüreEnum.EasingStyle.Quint, --Kolaylaştırma StiliEnum.EasingDirection.Out, --Kolaylaştırma Yönü0, --Tekrarlama sayısıfalse, --Doğruysa tersine dönerdelay, --Gecikme süresioverride,callback)local tween = TweenService:Create(object, tweenSize, {Rotation = rotation})tween:Play()end-- oyun kamerasını bulanmak içinfunction UITween.blur(object, amount, time)local tweenInfo = TweenInfo.new(time, Enum.EasingStyle.Linear, Enum.EasingDirection.Out, 0, false, 0)local tween = TweenService:Create(object, tweenInfo, {Size = amount})tween:Play()end-- oyun kamerasını bulanmak içinfunction UITween.turnOn(object, amount, time)local tweenInfo = TweenInfo.new(time, Enum.EasingStyle.Linear, Enum.EasingDirection.Out, 0, false, 0)local tween = TweenService:Create(object, tweenInfo, {Brightness = amount})tween:Play()endreturn UITweenNesneler için UI Tween'i uygulamalocal ReplicatedStorage = game:GetService("ReplicatedStorage")-- UITween Modülü Eklelocal UITween = require(ReplicatedStorage.UITweenModule)-- Oyuncu Guileri ve UI nesnelerini bullocal playerGui = game:GetService('Players').LocalPlayer:WaitForChild('PlayerGui')local screenGuiMapUIFrame = playerGui:WaitForChild("ScreenGuiMapUIFrame").SurfaceGuilocal mapUIFrameStroke = screenGuiMapUIFrame.FrameStrokelocal mapUIFrameFill = screenGuiMapUIFrame.FrameFill-- Gençleştirme için kullanılan boyutlarlocal frameSizeStart = UDim2.new(0, 0, 0, 0)local frameSizeMid = UDim2.new(1, 0, 0.05, 0)local frameSizeEnd = UDim2.new(1, 0, 1, 0)-- Örnek GeçişUITween.fade(mapUIFrameStroke, 0, 2, 0)UITween.size(mapUIFrameStroke, frameSizeMid, 0.4, 0)UITween.fade(mapUIFrameFill, 0, 2, 0.5)UITween.size(mapUIFrameFill, frameSizeEnd, 0.4, 0.25)task.wait(0.25)UITween.size(mapUIFrameStroke, frameSizeMid, 0.4, 0)UITween.size(mapUIFrameFill, frameSizeMid, 0.4, 0.25)task.wait(0.25)UITween.size(mapUIFrameStroke, frameSizeEnd, 0.4, 0)UITween.size(mapUIFrameFill, frameSizeEnd, 0.4, 0.25)
İşte etkileşimli haritanın sonuçları: