d1mons Дата: Четверг, 18 Апреля 2013, 23:42 | Сообщение # 1
был не раз
Сейчас нет на сайте
Нашёл в Интернете скрипт
Код
/** * DominantDirectionalLightDayNight * * Creation date: 24.08.2012 19:25 * Copyright 2012, Boris Novikov */ class DominantDirectionalLightDayNight extends DominantDirectionalLightMovable ClassGroup(Lights,DirectionalLights) placeable; var (DayNight) float DayNightFreq; var (DayNight) int DayNightStep; var (DayNight) float Correction; var (DayNight) int TurnOffHour; var (DayNight) int TurnOnHour; var (DayNight) array <float> SunBrightness; var (DayNight) float BrightnessInterpolationSpeed; var (DayNight) bool ConstBrightnessInterpolationSpeed; var (DayNight) array <Color> SunColor; var (DayNight) float ColorInterpolationSpeed; var (DayNight) bool ConstColorInterpolationSpeed; var (DayNight) InterpActor SkyActor; var (DayNight) array <MaterialInterface> SkyMaterials; var (DayNight) array <Name> ScalarParamNames; var (DayNight) float ScalarInterpolationSpeed; var (DayNight) bool ConstScalarInterpolationSpeed; var (DayNight) array <Name> ColorParamNames; var (DayNight) float VectorInterpolationSpeed; var (DayNight) bool ConstVectorInterpolationSpeed; var float TimeStamp; var bool MatInstanced; var repnotify rotator SunRotation; var int Days, Hours, Minutes, i; replication { if (bNetInitial) SunRotation; } simulated event ReplicatedEvent(name VarName) { if (VarName == 'SunRotation') { //`log(self@"REPLICATED"@SunRotation); SetRotation(SunRotation); } else if (VarName == 'bEnabled') { LightComponent.SetEnabled(bEnabled); } else { Super.ReplicatedEvent(VarName); } } simulated event PostBeginPlay() { super.PostBeginPlay(); TimeStamp = WorldInfo.TimeSeconds; SetTimer(DayNightFreq, true, 'DayNightTimer'); } simulated function DayNightTimer() { local Rotator R; local MaterialInterface NewMaterial, OldMaterial; local MaterialInstance CurrentMaterial; local float fOldScalarParam, fScalarParam, fCurrentParam; local LinearColor vOldParam, vParam; local color cColor, cNextColor; local int index, NextIndex, Progress, TotalProgress; local float DeltaTime; DeltaTime=WorldInfo.TimeSeconds-TimeStamp; TimeStamp = WorldInfo.TimeSeconds; R=self.Rotation; R.Pitch += DayNightStep; SunRotation=R; if (Role == Role_Authority){ SunRotation=R; } self.SetRotation(R); //`Log(self@Role@SunRotation); Days = (Rotation.Pitch + Correction*(65536/24)) / 65536; Hours = ( ( (Rotation.Pitch - (Days*65536) ) / 65536.) * 24.)+Correction; Minutes = ( ( (Rotation.Pitch+(Correction*(65536/24)) - (Days*65536) ) ) - (Hours*(65536/24) ) ) / 45.51; //HERE YOU CAN SET CALCULATED TIME SOMEWHERE TO WorldInfo //XGame(WorldInfo.Game).DayTimeHours = ( ( (Rotation.Pitch - (Days*65536) ) / 65536.) * 24.)+Correction; //WorldInfo.Game.Broadcast(self, "Day"@Days@"Hours ="@Hours@"Minutes= "@Minutes ); if (Hours == TurnOffHour && LightComponent.bEnabled) { bEnabled=FALSE; LightComponent.SetEnabled(FALSE); //WorldInfo.Game.Broadcast(self, "Day"@Days@"Hours ="@Hours@"Minutes= "@Minutes ); //WorldInfo.Game.Broadcast(self, "TURN OFF" ); } if (Hours == TurnOnHour && !LightComponent.bEnabled) { bEnabled=TRUE; LightComponent.SetEnabled(TRUE); LightComponent.BloomScale=LightComponent.Default.BloomScale; LightComponent.BloomThreshold=LightComponent.Default.BloomThreshold; LightComponent.BloomScreenBlendThreshold=LightComponent.Default.BloomScreenBlendThreshold; LightComponent.SetLightProperties(LightComponent.Default.Brightness, LightComponent.Default.LightColor, ); LightComponent.UpdateLightShaftParameters(); LightComponent.UpdateColorAndBrightness(); //WorldInfo.Game.Broadcast(self, "Day"@Days@"Hours ="@Hours@"Minutes= "@Minutes ); //WorldInfo.Game.Broadcast(self, "TURN ON" ); } TotalProgress=( (self.Rotation.Pitch+Correction*(65536/24)) % 65536); i = SunBrightness.Length; if (i !=0 ) { index = TotalProgress*i / 65536; Progress = TotalProgress - ( index * (65536 / i) ); fOldScalarParam = SunBrightness[ index ]; NextIndex=( index+1 )%i; if (NextIndex > -1 && NextIndex < SunBrightness.Length) { fScalarParam = SunBrightness[ NextIndex ]; if (fOldScalarParam != fScalarParam) { //`Log(fOldScalarParam@"["$index$"]"@"->"@fScalarParam@"["$NextIndex$"]"@" = "@LightComponent.Brightness ); //`Log( Progress@"/"@(ABS(fScalarParam - fOldScalarParam) / (65536 / SunBrightness.Length)) ); if (ConstBrightnessInterpolationSpeed) fCurrentParam= FInterpConstantTo(fOldScalarParam, fScalarParam, Progress, ABS(fScalarParam - fOldScalarParam) / (65536 / SunBrightness.Length) ); else fCurrentParam= FInterpTo(LightComponent.Brightness, SunBrightness[ Hours/( 24 / i ) ], DeltaTime, BrightnessInterpolationSpeed); LightComponent.SetLightProperties(fCurrentParam); //WorldInfo.Game.Broadcast(self, fOldScalarParam@" => "@fScalarParam@"="@fCurrentParam@"progress="$Progress@"speed="$ABS(fScalarParam-fOldScalarParam)/(65536 / SunBrightness.Length)@" step="$(ABS(fScalarParam-fOldScalarParam)/(65536 / SunBrightness.Length))*Progress ); } } } i=0; i = SunColor.Length; if (i !=0 ) { index = TotalProgress*i / 65536; cColor = SunColor[index]; NextIndex=( index+1 )%i; cNextColor = SunColor[NextIndex]; //WorldInfo.Game.Broadcast(self, "R="$cColor.R@"G="$cColor.G@"B="$cColor.B@" => "@"R="$cNextColor.R@"G="$cNextColor.G@"B="$cNextColor.B); Progress = TotalProgress - ( index * (65536 / i) ); if (ConstColorInterpolationSpeed) { cColor.R += (cNextColor.R - cColor.R) * Progress / (65536 / i); cColor.G += (cNextColor.G - cColor.G) * Progress / (65536 / i); cColor.B += (cNextColor.B - cColor.B) * Progress / (65536 / i); } else { cColor.R=FInterpTo( cColor.R, cNextColor.R, DeltaTime, ABS(cNextColor.R - cColor.R) / (65536 / i) ); cColor.G=FInterpTo( cColor.G, cNextColor.G, DeltaTime, ABS(cNextColor.G - cColor.G) / (65536 / i) ); cColor.B=FInterpTo( cColor.B, cNextColor.B, DeltaTime, ABS(cNextColor.B - cColor.B) / (65536 / i) ); } //WorldInfo.Game.Broadcast(self, "R="$cColor.R@"G="$cColor.G@"B="$cColor.B); LightComponent.BloomTint = cColor; LightComponent.SetLightProperties( ,cColor ); } i=0; index=0; if (SkyActor != none && SkyMaterials.Length > 0) { i = SkyMaterials.Length; if (i !=0 ) { index = TotalProgress*i / 65536; Progress = TotalProgress - ( index * (65536 / i) ); OldMaterial = SkyMaterials[index]; NextIndex=( index+1 )%i; NewMaterial = SkyMaterials[NextIndex]; //WorldInfo.Game.Broadcast(self, "SkyMat"@index@SkyMaterials[index] ); if (!MatInstanced){ CurrentMaterial=SkyActor.StaticMeshComponent.CreateAndSetMaterialInstanceConstant(0); MatInstanced=TRUE; } else CurrentMaterial=MaterialInstance(SkyActor.StaticMeshComponent.GetMaterial(0)); i=0; while ( i < ScalarParamNames.Length ) { NewMaterial.GetScalarParameterValue(ScalarParamNames[i], fScalarParam); OldMaterial.GetScalarParameterValue(ScalarParamNames[i], fOldScalarParam); if (fOldScalarParam != fScalarParam) { if (ConstScalarInterpolationSpeed){ fCurrentParam=FInterpConstantTo(fOldScalarParam, fScalarParam, Progress, ABS(fScalarParam-fOldScalarParam)/(65536 / SkyMaterials.Length) ); } else fCurrentParam=FInterpTo(fOldScalarParam, fScalarParam, DeltaTime, ScalarInterpolationSpeed); CurrentMaterial.SetScalarParameterValue(ScalarParamNames[i], fCurrentParam); } //WorldInfo.Game.Broadcast(self, ScalarParamNames[i]@fOldScalarParam@" => "@fScalarParam@"="@fCurrentParam@"progress="$Progress@"speed="$ABS(fScalarParam-fOldScalarParam)/(65536 / SkyMaterials.Length)@" step="$(ABS(fScalarParam-fOldScalarParam)/(65536 / SkyMaterials.Length))*Progress ); //`log(ScalarParamNames[i]@fOldScalarParam@" => "@fScalarParam@"="@fCurrentParam@"progress="$Progress@"speed="$ABS(fScalarParam-fOldScalarParam)/(65536 / SkyMaterials.Length)@" step="$(ABS(fScalarParam-fOldScalarParam)/(65536 / SkyMaterials.Length))*Progress ); i++; } i=0; //WorldInfo.Game.Broadcast(self, "ColorParamNames.Length="@ColorParamNames.Length ); while ( i < ColorParamNames.Length ) { NewMaterial.GetVectorParameterValue(ColorParamNames[i],vParam); OldMaterial.GetVectorParameterValue(ColorParamNames[i], vOldParam); if (ConstVectorInterpolationSpeed) { //WorldInfo.Game.Broadcast(self, ColorParamNames[i]@"R="$vOldParam.R@" => "@"R="$vParam.R@"progress="$Progress@"speed="$ABS(vParam.R-vOldParam.R)/(65536 / SkyMaterials.Length)@" diff="$(ABS(vParam.R-vOldParam.R)/(65536 / SkyMaterials.Length))*Progress); //`log(ColorParamNames[i]@"R="$vOldParam.R@" => "@"R="$vParam.R@"progress="$Progress@"speed="$ABS(vParam.R-vOldParam.R)/(65536 / SkyMaterials.Length)@" diff="$(ABS(vParam.R-vOldParam.R)/(65536 / SkyMaterials.Length))*Progress); //`log(ColorParamNames[i]@"G="$vOldParam.R@" => "@"G="$vParam.R@"progress="$Progress@"speed="$ABS(vParam.G-vOldParam.G)/(65536 / SkyMaterials.Length)@" diff="$(ABS(vParam.G-vOldParam.G)/(65536 / SkyMaterials.Length))*Progress); //`log(ColorParamNames[i]@"B="$vOldParam.R@" => "@"B="$vParam.R@"progress="$Progress@"speed="$ABS(vParam.B-vOldParam.B)/(65536 / SkyMaterials.Length)@" diff="$(ABS(vParam.B-vOldParam.B)/(65536 / SkyMaterials.Length))*Progress); //`log(ColorParamNames[i]@"A="$vOldParam.R@" => "@"A="$vParam.R@"progress="$Progress@"speed="$ABS(vParam.A-vOldParam.A)/(65536 / SkyMaterials.Length)@" diff="$(ABS(vParam.A-vOldParam.A)/(65536 / SkyMaterials.Length))*Progress); vParam.R = FInterpConstantTo(vOldParam.R, vParam.R, Progress, ABS(vParam.R-vOldParam.R)/(65536 / SkyMaterials.Length) ); vParam.G = FInterpConstantTo(vOldParam.G, vParam.G, Progress, ABS(vParam.G-vOldParam.G)/(65536 / SkyMaterials.Length) ); vParam.B = FInterpConstantTo(vOldParam.B, vParam.B, Progress, ABS(vParam.B-vOldParam.B)/(65536 / SkyMaterials.Length) ); vParam.A = vOldParam.A; //WorldInfo.Game.Broadcast(self, ColorParamNames[i]@"STEP="$ (Progress*ABS(vParam.B-vOldParam.B)/(65536 / SkyMaterials.Length) ) ); } else { vParam.R=FInterpTo(vOldParam.R, vParam.R, DeltaTime, VectorInterpolationSpeed); vParam.G=FInterpTo(vOldParam.G, vParam.G, DeltaTime, VectorInterpolationSpeed); vParam.B=FInterpTo(vOldParam.B, vParam.B, DeltaTime, VectorInterpolationSpeed); vParam.A=FInterpTo(vOldParam.A, vParam.A, DeltaTime, VectorInterpolationSpeed); } //WorldInfo.Game.Broadcast(self,ColorParamNames[i]@"R="$vParam.R@"G="$vParam.G@"B="$vParam.B); //CurrentMaterial.SetVectorParameterValue(ColorParamNames[i], vParam); //`log(ColorParamNames[i]@"R="$vParam.R@"G="$vParam.G@"B="$vParam.B@"A="$vParam.A); CurrentMaterial.SetVectorParameterValue(ColorParamNames[i], vParam); i++; } i=0; } } } defaultproperties { bHidden=FALSE //REPLICATION NEEDS THIS bNoDelete=TRUE bRouteBeginPlayEvenIfStatic=FALSE bEdShouldSnap=FALSE Begin Object Name=DominantDirectionalLightComponent0 ModShadowFadeoutExponent=3.0 bRenderLightShafts=True LightAffectsClassification=LAC_DYNAMIC_AND_STATIC_AFFECTING CastShadows=TRUE CastStaticShadows=TRUE CastDynamicShadows=TRUE bForceDynamicLight=FALSE UseDirectLightMap=FALSE bAllowPreShadow=TRUE LightingChannels=(BSP=TRUE,Static=TRUE,Dynamic=TRUE,bInitialized=TRUE) LightmassSettings=(LightSourceAngle=.2) End Object bStatic=FALSE bHardAttach=TRUE bMovable=TRUE Physics=PHYS_Interpolating RemoteRole=ROLE_SimulatedProxy Role=ROLE_Authority bNetInitialRotation=TRUE bUpdateSimulatedPosition=TRUE bReplicateMovement=TRUE Correction=22; DayNightStep = 1; DayNightFreq = 0.001; TurnOffHour=-1; TurnOnHour=-1; SkyMaterials[0]=MaterialInstanceConstant'MapTemplates.Sky.M_Procedural_Sky_Night' SkyMaterials[1]=MaterialInstanceConstant'MapTemplates.Sky.M_Procedural_Sky_Morning' SkyMaterials[2]=MaterialInstanceConstant'MapTemplates.Sky.M_Procedural_Sky_Daytime' SkyMaterials[3]=MaterialInstanceConstant'MapTemplates.Sky.M_Procedural_Sky_Afternoon' ScalarParamNames[0]=CloudBrightness ScalarParamNames[1]=CloudDarkness ScalarParamNames[2]=CloudOpacity ScalarParamNames[3]=Desaturation ScalarParamNames[4]=RimBrightness ScalarParamNames[5]=SkyBrightness ScalarParamNames[6]=Speed ColorParamNames[0]=HorizonColor ColorParamNames[1]=RimColor ColorParamNames[2]=Sun ColorParamNames[3]=ZenithColor BrightnessInterpolationSpeed=1.; ColorInterpolationSpeed=100.; ScalarInterpolationSpeed=1.; VectorInterpolationSpeed=1.; }
Подскажите пожалуйста: 1. Расширение файла же должно быть ".uc"? 2. Куда его копировать нужно? 3. Как его использовать на сцене в UDK? Подскажите пожалуйста, буду очень благодарен... Спасибо заранее!
Сообщение отредактировал d1mons - Четверг, 18 Апреля 2013, 23:42
lentinant Дата: Пятница, 19 Апреля 2013, 00:40 | Сообщение # 2
ленивый программист
Сейчас нет на сайте
1. Да. 2. В <папка с UDK>\Development\Src\<Название твоей игры>\Classes 3. Открываешь браузер контента, переходишь на вкладку "Actor Browser", ищешь свой актор и перетаскиваешь на сцену. Но ты его там не найдешь, поскольку, судя по вопросам, со скриптами в UDK ты не умеешь работать в принципе, и не знаешь, что сначала этот скрипт надо скомпилировать, а для этого нужно прописать твою игру в конфиге. И не стоит забывать о названии скрипта. Так что сначала лучше освойся в основах.
Когда-то тут будут ссылки на крутые проекты. Или нет.
Сообщение отредактировал lentinant - Пятница, 19 Апреля 2013, 00:47
d1mons Дата: Пятница, 19 Апреля 2013, 14:32 | Сообщение # 3
был не раз
Сейчас нет на сайте
Цитата (lentinant )
1. Да. 2. В <папка с UDK>\Development\Src\<Название твоей игры>\Classes 3. Открываешь браузер контента, переходишь на вкладку "Actor Browser", ищешь свой актор и перетаскиваешь на сцену.
Спасибо большое! Репутация +1 Цитата (lentinant )
Но ты его там не найдешь, поскольку, судя по вопросам, со скриптами в UDK ты не умеешь работать в принципе, и не знаешь, что сначала этот скрипт надо скомпилировать, а для этого нужно прописать твою игру в конфиге. И не стоит забывать о названии скрипта. Так что сначала лучше освойся в основах.
Я знаю что нужно компилировать через "UnrealFrontend", в конфиге уже всё прописал, файл подписал как нужно "DominantDirectionalLightDayNight.uc"