Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

How to gradually change outdoor ambient color when the player touches a part?

Asked by 3 years ago

I have attempted to change the outdoor ambient color when a player touches a part and make the color change gradually. The color stays the same as the first color and does not gradually change... any idea why? Nothing in output...

script.Parent.Touched:Connect(function(hit)
if hit.Parent:FindFirstChild("Humanoid") then
local Block = game.Lighting
        Block.OutdoorAmbient = Color3.new (185, 0, 0)
        wait(0.1)
        Block.OutdoorAmbient = Color3.new (182, 0, 0)
        wait(0.1)
        Block.OutdoorAmbient = Color3.new (180, 0, 0)
        wait(0.1)
        Block.OutdoorAmbient = Color3.new (178, 0, 0)
        wait(0.1)
        Block.OutdoorAmbient = Color3.new (176, 0, 0)
        wait(0.1)
        Block.OutdoorAmbient = Color3.new (174, 0, 0)
        wait(0.1)
        Block.OutdoorAmbient = Color3.new (172, 0, 0)
        wait(0.1)
        Block.OutdoorAmbient = Color3.new (170, 0, 0)
        wait(0.1)
        Block.OutdoorAmbient = Color3.new (168, 0, 0)
        wait(0.1)
        Block.OutdoorAmbient = Color3.new (166, 0, 0)
        wait(0.1)
        Block.OutdoorAmbient = Color3.new (164, 0, 0)
        wait(0.1)
        Block.OutdoorAmbient = Color3.new (162, 0, 0)
        wait(0.1)
        Block.OutdoorAmbient = Color3.new (160, 0, 0)
        wait(0.1)
        Block.OutdoorAmbient = Color3.new (158, 0, 0)
        wait(0.1)
        Block.OutdoorAmbient = Color3.new (156, 0, 0)
        wait(0.1)
        Block.OutdoorAmbient = Color3.new (154, 0, 0)           
    end
end)

1 answer

Log in to vote
1
Answered by
Roger111 347 Moderation Voter
3 years ago
Edited 3 years ago

ANSWER: You're using Color3.new() when you should be using Color3.fromRGB(). In addition to all this I don't like to repeat code, so I'll help you save time by teaching you Tween as well. Enjoy!

Note: You also require a Debounce to prevent extra .Touched threads from running.

CODE FIX:

local TS = game:GetService("TweenService")

local goal = {}
goal.OutdoorAmbient = Color3.fromRGB(154, 0, 0) 

local tweenInfo = TweenInfo.new(
    1, -- Time
    Enum.EasingStyle.Linear, -- EasingStyle
    Enum.EasingDirection.Out, -- EasingDirection
    -1, -- RepeatCount (when less than zero the tween will loop indefinitely)
    true, -- Reverses (tween will reverse once reaching it's goal)
    0 -- DelayTime
)

local tween = TS:Create(game.Lighting, tweenInfo, goal)

local debounce = true
script.Parent.Touched:Connect(function(hit)
    if debounce and hit.Parent:FindFirstChild("Humanoid") then
        debounce = false
        local L = game.Lighting
        L.OutdoorAmbient = Color3.fromRGB(255, 0, 0)
        tween:Play()
    end
end)

Note: You have also chosen colors that look really similair so I changed them to help you see that my code is working. Feel free to edit them however you like.

Ad

Answer this question