-
Posts
238 -
Joined
-
Last visited
Content Type
Blogs
Forums
Store
Gallery
Videos
Downloads
Everything posted by burgelkat
-
again a question, if i build terrain and build a navmesh in editor. Wy only on Flat Terrain or on Models or Boxes the navmesh will show? if i hav a higher terrain, the navmesh is not build? maybe someone can send / show me an example map (easy build map) with terrain and navmesh . the navmesh box in my map is high enough i think
-
Thx ! works fine . At the moment i have to do fine Tuning with the navmeshs . Sometimes the agent lost the way .
-
I know now what the Problem ist. but i have a question. In Monster.lua in the shooter example there is if self.navmesh then …. where is self.navmesh? In the navmesh api section example navmesh is build in code so self navmesh is found but if i build the navmesh with the Editor the navmesh is not existent Sorry for that question but i don’t understand at the Moment how navmesh in Ultraengine / Leadwerks work in old Leadwerks it was clear but here .. its at the Moment a Mystery 😂 i build an npc lua Script it works good if i build the navmesh for the npc in code like the api example. the navagent works if i use an box as ground and its flat.but if i use it in an world with terrain the waypoints are not working maybe someone has an example in lua .
-
Thx i will check it later. i think the agent is not active. No Print in Navigation is shown i have to think about it ^^ meanwhile i will work on questtext and npc
-
MonsterSkeleton = {} MonsterSkeleton.name = "MonsterSkeleton" MonsterSkeleton.team = 2 MonsterSkeleton.alive = true MonsterSkeleton.nextscanfortargettime = 0 MonsterSkeleton.scanrange = 100 MonsterSkeleton.eyeheight = 1.65 MonsterSkeleton.sound_attack = {} MonsterSkeleton.navmeshindex = 1 MonsterSkeleton.damage = 20 MonsterSkeleton.health = 100 MonsterSkeleton.meleedamage = 20 -- Animationssteuerung für das Skelett MonsterSkeleton.enabled = false MonsterSkeleton.idle = false MonsterSkeleton.animation = false MonsterSkeleton.GetUpPlayed = false MonsterSkeleton.getUpDelay = 0 MonsterSkeleton.getUpStart = 0 MonsterSkeleton.idleDelay = 6000 MonsterSkeleton.combatready = false function MonsterSkeleton:Enable() self.enabled = true self.animation = true self.getUpStart = Millisecs() -- Startzeit für GetUp setzen Component(self):Enable() end function MonsterSkeleton:Start() -- Skelett-Modell laden und in liegender Position starten self.skeleton = LoadModel(world, "Models/Characters/Skeletton/Skeleton_complete.mdl") self.skeleton:SetRotation(0, 0, 0) -- Liegt auf dem Rücken self.skeleton:SetPosition(self.entity:GetPosition()) local entity = Model(self.skeleton) local model = Model(self.skeleton) entity.team = self.team entity.health = self.health self.health = nil -- GetUp Verzögerung setzen self.getUpDelay = math.random(1000, 8000) -- Initiale Animation stoppen self.skeleton:Animate(1, 0.25, 2000, ANIMATION_STOP, 0) -- Sound laden und Lautstärke setzen local soundFile = self.soundPath self.skeletonsound = CreateSpeaker(LoadSound(soundFile)) self.skeletonsound:SetLooping(false) -- Navigation if self.navmesh then self.agent = CreateNavAgent(self.navmesh, 0.5, 1.8) self.agent:SetPosition(entity:GetPosition(true)) self.agent:SetRotation(entity:GetRotation(true).y) entity:SetPosition(0, 0, 0) entity:SetRotation(0, 180, 0) entity:Attach(self.agent) end entity:SetNavObstacle(false) entity:SetCollisionType(COLLISION_PLAYER) entity:SetMass(0) entity:SetPhysicsMode(PHYSICS_RIGIDBODY) entity:AddTag("player") if model then local seq = model:FindAnimation("Attack1") if seq ~= 0 then local count = model:CountAnimationFrames(seq) model.skeleton:AddHook(seq, count - 1, Monster.EndAttackHook, self) end end end function MonsterSkeleton:Load(properties, binstream, scene, flags, extra) if type(properties.alertsound) == "string" then self.sound_alert = LoadSound(properties.alertsound) end for n = 1, 2 do local key = "attacksound" .. tostring(n) if type(properties[key]) == "string" then self.sound_attack[n] = LoadSound(properties[key]) end end self.navmesh = nil if #scene.navmeshes > 0 then self.navmesh = scene.navmeshes[self.navmeshindex] end return true end -- "GetUp" Animation nach zufälliger Verzögerung starten function MonsterSkeleton:GetUp() if not self.GetUpPlayed then local currentTime = Millisecs() if currentTime - self.getUpStart >= self.getUpDelay then self.skeletonsound:Play() self.skeleton:Animate(1, 0.5, 2000, ANIMATION_ONCE) self.GetUpPlayed = true self.startTime = Millisecs() -- Startzeit für Idle-Übergang setzen end end end -- Wechsel zu Idle-Animation function MonsterSkeleton:Idle() if self.GetUpPlayed then self.skeleton:Animate(0, 0.7, 2000, ANIMATION_LOOP) -- if self.idle==false then self.idle=true --end end end function MonsterSkeleton.EndAttackHook(skeleton, monster) local monster = Component(monster) monster.attacking = false end function MonsterSkeleton:Kill() if not self.alive then return end self.alive = false self.skeleton:Animate("Death", 1, 250, ANIMATION_ONCE) if self.agent then self.agent:Stop() self.skeleton:Detach() self.agent = nil end self.skeleton:SetCollisionType(COLLISION_NONE) self.skeleton:SetPickMode(PICK_NONE) self:Disable() end -- Update-Funktion: Steuerung von GetUp und Idle function MonsterSkeleton:Update() local entity = Model(self.skeleton) local model = Model(self.skeleton) if entity.health <= 0 then self:Kill() return end if not self.enabled then return end if self.enabled then if not self.combatready then if self.animation and not self.GetUpPlayed then self:GetUp() end if self.GetUpPlayed and Millisecs() - self.startTime >= self.idleDelay then self:Idle() end if self.GetUpPlayed and self.idle then self.combatready=true end end if self.combatready then if self.combatready then self:ScanForTarget() end -- Stop attacking if target is dead if self.target then if self.target.health ~= nil and type(self.target.health) == "number" and self.target.health <= 0 then self.target = nil if self.agent then self.agent:Stop() end end end if self.attacking and self.target then if self.agent then local a = ATan(entity.matrix.t.x - self.target.matrix.t.x, entity.matrix.t.z - self.target.matrix.t.z) self.agent:SetRotation(a + 180) end if not self.attackfinished then local world = self.entity:GetWorld() if world then if world:GetTime() - self.meleeattacktime > 300 then self.attackfinished = true local pos = entity:GetPosition(true) local dest = self.target:GetPosition(true) + self.target:GetVelocity() local attackrange = 3.0 if pos:DistanceToPoint(dest) < attackrange then self.target.health = self.target.health - self.meleedamage for _, c in ipairs(self.target.components) do if c.Damage and type(c.Damage) == "function" then c:Damage(self.meleedamage, entity) if self.target.health <= 0 and type(c.Kill) == "function" then c:Kill(entity) end end end if self.target.health <= 0 then self.target = nil self:Idle() end end end end end return end --if not self.target and self.combatready then self:ScanForTarget() end if self.target then self.idle=false if self.attacking == false and entity:GetDistance(self.target) > 3.0 then if self.agent then self.agent:Navigate(self.target:GetPosition(true)) self.agent:SetMaxSpeed(10) end if model then model:Animate("Walk") end else if self.agent then self.agent:Stop() end if not self.attacking then local world = entity:GetWorld() if world then self.meleeattacktime = world:GetTime() end local index = Ceil(math.random(1, 1)) if model then model:Animate("Attack" .. tostring(index), 1, 100, ANIMATION_ONCE) end if Ceil(Random(0, 1)) == 0 then index = Ceil(Random(1, 1)) -- if self.sound_attack[index] then entity:EmitSound(self.sound_attack[index]) end end self.attacking = true self.attackfinished = false end end else -- self:Idle() end end end end -- Kampflogik für das Monster bleibt erhalten function MonsterSkeleton:Damage(amount, attacker) if entity.health <= 0 then return end if entity.health <= 0 then local n return end if self.target == nil and attacker ~= Model(self.skeleton) then self.target = attacker end --Make him angry if someone hurts him! end function MonsterSkeleton.RayFilter(entity, extra) local ctype = self.skeleton:GetCollisionType() return ctype == COLLISION_SCENE or ctype == COLLISION_PROP end function MonsterSkeleton:ScanForTarget() local entity = Model(self.skeleton) local world = entity:GetWorld() if world then local now = world:GetTime() if now < self.nextscanfortargettime then return end self.nextscanfortargettime = now + math.random(300, 500) local temp = entity:GetPickMode() entity:SetPickMode(PICK_NONE) local players = world:GetTaggedEntities("good") for _, player in ipairs(players) do if player.health ~= nil and type(player.health) == "number" and player.health > 0 then if player:GetDistance(entity) < self.scanrange then local temp2 = player:GetPickMode() player:SetPickMode(PICK_NONE) local A = entity:GetPosition(true) + Vec3(0, self.eyeheight, 0) local B = player:GetPosition(true) + Vec3(0, 0.5, 0) local pick = world:Pick(A, B, 0, false) player:SetPickMode(temp2) if not pick.success then self.target = player break end end end end entity:SetPickMode(temp) end end function MonsterSkeleton:Save(properties, binstream, scene, flags, extra) properties.health = self.entity.health end RegisterComponent("MonsterSkeleton", MonsterSkeleton) return MonsterSkeleton so far the script is now ok . get up--> idle --> find target--> and attack also if target is not in range walk animation start. Only with navmesh the Model walks on place and dont move to target. i saw this too in the shooter template too. the monster in the room runs in place. The other Monster run to me
-
No it is no prefab
-
MonsterSkeleton = {} MonsterSkeleton.name = "MonsterSkeleton" MonsterSkeleton.team = 2 MonsterSkeleton.alive = true MonsterSkeleton.nextscanfortargettime = 0 MonsterSkeleton.scanrange = 100 MonsterSkeleton.eyeheight = 1.65 MonsterSkeleton.sound_attack = {} MonsterSkeleton.navmeshindex = 1 MonsterSkeleton.damage = 20 MonsterSkeleton.health = 100 MonsterSkeleton.meleedamage = 20 -- Animationssteuerung für das Skelett MonsterSkeleton.enabled = false MonsterSkeleton.idle = false MonsterSkeleton.animation = false MonsterSkeleton.GetUpPlayed = false MonsterSkeleton.getUpDelay = 0 MonsterSkeleton.getUpStart = 0 MonsterSkeleton.idleDelay = 6000 function MonsterSkeleton:Enable() self.enabled = true self.animation = true self.getUpStart = Millisecs() -- Startzeit für GetUp setzen Component(self):Enable() end function MonsterSkeleton:Start() -- Sicherstellen, dass self.entity existiert if not self.entity then DebugLog("Fehler: self.entity ist nil!") return end -- Skelett-Modell laden und in liegender Position starten self.skeleton = LoadModel(world, "Models/Characters/Skeletton/Skeleton_complete.mdl") self.skeleton:SetRotation(0, 180, 0) -- Liegt auf dem Rücken self.skeleton:SetPosition(self.entity:GetPosition()) local entity = Model(self.skeleton) local model = Model(self.skeleton) entity.team = self.team entity.health = self.health self.health = nil -- GetUp Verzögerung setzen self.getUpDelay = math.random(1000, 8000) -- Initiale Animation stoppen self.skeleton:Animate(1, 0.25, 2000, ANIMATION_STOP, 0) -- Sound laden und Lautstärke setzen local soundFile = self.soundPath self.skeletonsound = CreateSpeaker(LoadSound(soundFile)) self.skeletonsound:SetLooping(false) -- Navigation if self.navmesh then self.agent = CreateNavAgent(self.navmesh, 0.5, 1.8) self.agent:SetPosition(entity:GetPosition(true)) self.agent:SetRotation(entity:GetRotation(true).y) entity:SetPosition(0, 0, 0) entity:SetRotation(0, 180, 0) entity:Attach(self.agent) end entity:SetNavObstacle(false) entity:SetCollisionType(COLLISION_PLAYER) entity:SetMass(0) entity:SetPhysicsMode(PHYSICS_RIGIDBODY) entity:AddTag("player") if model then local seq = model:FindAnimation("Attack1") if seq ~= 0 then local count = model:CountAnimationFrames(seq) model.skeleton:AddHook(seq, count - 1, Monster.EndAttackHook, self) end seq = model:FindAnimation("Attack1") if seq ~= 0 then local count = model:CountAnimationFrames(seq) model.skeleton:AddHook(seq, count - 1, Monster.EndAttackHook, self) end end end function MonsterSkeleton:Load(properties, binstream, scene, flags, extra) if type(properties.alertsound) == "string" then self.sound_alert = LoadSound(properties.alertsound) end for n = 1, 2 do local key = "attacksound" .. tostring(n) if type(properties[key]) == "string" then self.sound_attack[n] = LoadSound(properties[key]) end end self.navmesh = nil if #scene.navmeshes > 0 then self.navmesh = scene.navmeshes[self.navmeshindex] end return true end -- "GetUp" Animation nach zufälliger Verzögerung starten function MonsterSkeleton:GetUp() if self.GetUpPlayed then return end -- Falls bereits abgespielt, nichts tun local currentTime = Millisecs() if currentTime - self.getUpStart >= self.getUpDelay then self.skeletonsound:Play() self.skeleton:Animate(1, 0.5, 2000, ANIMATION_ONCE) self.GetUpPlayed = true self.startTime = Millisecs() -- Startzeit für Idle-Übergang setzen end end -- Wechsel zu Idle-Animation function MonsterSkeleton:Idle() if not self.idle then return end if self.idle then self.skeleton:Animate(0, 0.7, 2000, ANIMATION_LOOP) end end function MonsterSkeleton.EndAttackHook(skeleton, monster) -- Uncomment the following block if you want to implement the attack logic -- if not monster.attackfinished then -- monster.attackfinished = true -- local target = monster.target:lock() -- local entity = monster:GetEntity() -- local attackrange = 2.5 -- if entity:GetDistance(target) < attackrange then -- for _, c in ipairs(target.components) do -- local base = c:As("BaseComponent") -- if base then base:Damage(1, entity) end -- end -- end -- end local monster = Component(monster) monster.attacking = false end function MonsterSkeleton:Kill() if not self.alive then return end self.alive = false self.skeleton:Animate("Death", 1, 250, ANIMATION_ONCE) if self.agent then self.agent:Stop() self.entity:Detach() self.agent = nil end self.entity:SetCollisionType(COLLISION_NONE) self.entity:SetPickMode(PICK_NONE) self:Disable() end -- Update-Funktion: Steuerung von GetUp und Idle function MonsterSkeleton:Update() local entity = Model(self.skeleton) local model = Model(self.skeleton) if not self.enabled then return end if self.enabled then if self.animation and not self.GetUpPlayed then self:GetUp() elseif self.GetUpPlayed and not self.target and Millisecs() - self.startTime >= self.idleDelay then self:Idle() self.idle=true --self.ScanForTarget() end if not self.target then self:ScanForTarget() end if entity.health <= 0 then self:Disable() return end local entity = Model(self.skeleton) local model = Model(self.skeleton) -- Stop attacking if target is dead if self.target then if self.target.health ~= nil and type(self.target.health) == "number" and self.target.health <= 0 then self.target = nil if self.agent then self.agent:Stop() self.Idle() self.idle=true --self.ScanForTarget() end end end if self.attacking and self.target then if self.agent then local a = ATan(entity.matrix.t.x - self.target.matrix.t.x, entity.matrix.t.z - self.target.matrix.t.z) self.agent:SetRotation(a + 180) end if not self.attackfinished then local world = self.entity:GetWorld() if world then if world:GetTime() - self.meleeattacktime > 300 then self.attackfinished = true local pos = entity:GetPosition(true) local dest = self.target:GetPosition(true) + self.target:GetVelocity() local attackrange = 3.0 if pos:DistanceToPoint(dest) < attackrange then self.target.health = self.target.health - self.meleedamage for _, c in ipairs(self.target.components) do if c.Damage and type(c.Damage) == "function" then c:Damage(self.meleedamage, entity) if self.target.health <= 0 and type(c.Kill) == "function" then c:Kill(entity) end end end if self.target.health <= 0 then self.target = nil end end end end end return end if not self.target then self:ScanForTarget() end if self.target then self.idle=false if self.attacking == false and entity:GetDistance(self.target) > 3.0 then if self.agent then self.agent:Navigate(self.target:GetPosition(true)) self.agent:SetMaxSpeed(6) end if model then model:Animate("Walk") end else if self.agent then self.agent:Stop() end if not self.attacking then local world = entity:GetWorld() if world then self.meleeattacktime = world:GetTime() end local index = Ceil(math.random(1, 2)) if model then model:Animate("Attack" .. tostring(index), 1, 100, ANIMATION_ONCE) end if Ceil(Random(0, 2)) == 0 then index = Ceil(Random(1, 2)) if self.sound_attack[index] then entity:EmitSound(self.sound_attack[index]) end end self.attacking = true self.attackfinished = false end end else if not self.idle then self:Idle() end end end end -- Kampflogik für das Monster bleibt erhalten function MonsterSkeleton:Damage(amount, attacker) if entity.health <= 0 then return end if entity.health <= 0 then local n --[[for n = 1, #self.entity.components do if type(self.entity.components[n].Kill) == "function" then self.entity.components[n]:Kill(attacker) end end]] return end if self.target == nil and attacker ~= Model(self.skeleton) then self.target = attacker end --Make him angry if someone hurts him! end function MonsterSkeleton.RayFilter(entity, extra) local ctype = entity:GetCollisionType() return ctype == COLLISION_SCENE or ctype == COLLISION_PROP end function MonsterSkeleton:ScanForTarget() local entity = Model(self.skeleton) local world = entity:GetWorld() if world then local now = world:GetTime() if now < self.nextscanfortargettime then return end self.nextscanfortargettime = now + math.random(300, 500) local temp = entity:GetPickMode() entity:SetPickMode(PICK_NONE) local players = world:GetTaggedEntities("good") for _, player in ipairs(players) do if player.health ~= nil and type(player.health) == "number" and player.health > 0 then if player:GetDistance(entity) < self.scanrange then local temp2 = player:GetPickMode() player:SetPickMode(PICK_NONE) local A = entity:GetPosition(true) + Vec3(0, self.eyeheight, 0) local B = player:GetPosition(true) + Vec3(0, 0.5, 0) local pick = world:Pick(A, B, 0, false) player:SetPickMode(temp2) if not pick.success then self.target = player break end end end end entity:SetPickMode(temp) end end function MonsterSkeleton:Save(properties, binstream, scene, flags, extra) properties.health = self.entity.health end RegisterComponent("MonsterSkeleton", MonsterSkeleton) return MonsterSkeleton Hello, maybe someone can help. I tryed to combine monster AI Script with my sceleton get up Script. In the script, the skeleton is activated and immediately executes the Attack function. However, it should first play the GetUp function completely and then execute the Scan for Target function. And, the Attack function only be executed once, and the Walk function run continuously. sometimes the sceleton get up and do nothing . what i do wrong here and or where i get lost in that code 😅 second question. I have a build a nav mesh. But the monster ai don’t use it. Even not if i use josh‘s Monster AI script on my sceleton model . Is there something to pay attention ? (It seems ultraengine is heredifferent to leadwerks ) Sorry but i try to learn all in Ultraengine again 😅
-
-
Little question, is it possible to get this addon in Future again ^^ i liked this kind of water effect
-
Maybe it’s possible that we can rename each animation in the modelviewer . At the Moment it seems that we can only give a name wenn we exract the frames from an Animation . Thanks
-
one little question:) . any chance, that you can waterfallshader to run in Ultra ?
-
Here is another slightly adapted script. I wanted to create the effect of waking up. (alternatively you can use it as a dying effect ) Then you just have to turn the "maxOpenFactor" around. FadeIn.lua
-
wow Thank you for the help. This is the effect I need. I really appreciate this!.
-
FadeIn = { duration = 3.0, -- Dauer des Fade-In in Sekunden elapsed = 0, -- Verstrichene Zeit overlay = nil, -- Das Overlay-Panel isActive = true, -- Status des Fade-In ui = nil, -- UI-Referenz framebuffer = nil, -- Framebuffer für die Größe window = nil -- Fenster-Referenz } function FadeIn:Start() -- Sicherstellen, dass der Framebuffer und das Fenster initialisiert sind if not self.framebuffer then local displays = GetDisplays() self.framebuffer = CreateFramebuffer(window) -- Framebuffer erstellen print("Framebuffer erstellt!") -- Debugging-Ausgabe end local world = self.entity:GetWorld() -- Sicherstellen, dass die UI initialisiert ist if not self.ui then -- Holen der Größe des Framebuffers (Fenstergröße) local sz = self.framebuffer.size local font = LoadFont("Fonts/arial.ttf") -- Benutzeroberfläche mit der Größe des Framebuffers erstellen self.ui = CreateInterface(world, font, sz) print("UI erstellt!") -- Debugging-Ausgabe end -- Overlay-Panel erstellen, das das gesamte Fenster abdeckt local sz = self.framebuffer.size -- Panel im Fensterbereich erstellen (im 2D-Raum des Fensters) self.overlay = CreatePanel(0, 0, sz.x, sz.y, self.ui.background) self.overlay:SetColor(0, 0, 0, 1) -- Vollständig schwarz self.elapsed = 0 self.isActive = true -- Fade-In-Prozess aktivieren print("Fade-In gestartet!") -- Debugging-Ausgabe end function FadeIn:ProcessEvent(ev) -- Ereignisse für die UI verarbeiten (z. B. Maus- oder Tastaturereignisse) if self.ui then self.ui:ProcessEvent(ev) end end function FadeIn:Update() if not self.isActive or not self.overlay then print("Fade-In-Prozess ist nicht aktiv oder Overlay fehlt.") -- Debugging-Ausgabe return end local step = 0.016 -- Zeit aktualisieren self.elapsed = self.elapsed + step if self.elapsed < self.duration then -- Alpha-Wert basierend auf der verstrichenen Zeit berechnen local alpha = math.max(0, 1 - self.elapsed / self.duration) self.overlay:SetColor(0, 0, 0, alpha) else -- Fade-In abgeschlossen, Overlay entfernen self.overlay:SetHidden(true) self.overlay = nil self.isActive = false print("Fade-In abgeschlossen.") -- Debugging-Ausgabe end -- Ereignisse verarbeiten while (PeekEvent()) do local ev = WaitEvent() self:ProcessEvent(ev) -- Ereignis verarbeiten end end RegisterComponent("FadeIn", FadeIn) return FadeIn it already works. somehow. Ha-Ha. but the panel does not cover the existing window.
-
Ah, thank you. I must have deleted that by mistake. However, I don't see the panel. I think I'm missing something.
-
Hi, maybe someone can help me. in this script nothing happens at start. What do i wrong here? FadeIn = { duration = 30.0, -- Dauer des Fade-In in Sekunden elapsed = 0, -- Verstrichene Zeit overlay = nil, -- Das Overlay-Panel isActive = false -- Status des Fade-In } function FadeIn:Start() -- Create User Interface local ui = CreateInterface(window) -- Sicherstellen, dass ein UI existiert if not ui then return end -- Größe des UI-Fensters ermitteln local sz = ui.background:ClientSize() -- Overlay erstellen self.overlay = CreatePanel(0, 0, sz.x, sz.y, ui.background) self.overlay:SetColor(0, 0, 0, 1) -- Vollständig schwarz self.elapsed = 0 self.isActive = true -- Aktiviert den Fade-In-Prozess end function FadeIn:Update() if not self.isActive or not self.overlay then return end local step = 0.016 -- Zeit aktualisieren self.elapsed = self.elapsed + step if self.elapsed < self.duration then -- Alpha-Wert basierend auf der verstrichenen Zeit berechnen local alpha = math.max(0, 1 - self.elapsed / self.duration) self.overlay:SetColor(0, 0, 0, alpha) else -- Fade-In abgeschlossen, Overlay entfernen self.overlay:SetHidden(true) self.overlay = nil self.isActive = false end end return FadeIn
-
I bought and installed the Ultra Engine again, this time as a standalone version (not the Steam version). I don't know why, but now both versions are working. Both the Steam version and the standalone version open again under Beta 0.98e. The only problem now is that when I activate tessellation, and i build a terrain the FPS drops to 10 ( 512x512) in the client 3D view. ( 64x64 fps 39) So, at the moment, I can only work with tessellation turned off. Projects are up to date in the project manager. But for the moment i am happy to work again at my project.
-
Unfortunately, the issue remains unresolved for me, and I don’t know a solution. Here’s my problem again: Since version 0.98e, the "Editor" in UltraEngine no longer opens. When I switch back to version 0.97, everything works as usual. I was previously on the beta, and as mentioned, the beta worked fine until the update to 0.98e. When I start the editor in version 0.97, the editor, including the project manager, opens, and I can start my project as usual. However, when I switch to beta 0.98e, only the project manager opens, but not the editor. After activating the project, UltraEngine shuts down and closes. I can only press "start" again. What I’ve noticed is that under version 0.97, I can start the Editor.exe from the system folder. However, under 0.98e, I get an error message saying, "Failed to initialize Steam." What I’ve tried so far: I uninstalled and reinstalled the Nvidia drivers. I uninstalled and reinstalled Steam. Installed and reinstalled Ultraengine severals times and start new Projects. I checked if Bitdefender was blocking anything (it’s not). I’m out of ideas now. If anyone has any suggestions, feel free to share. Otherwise, I can only work with version 0.97 and hope that the official 0.98 version will work, meaning I’ll have to wait until then. As you can see, in my latest screenshot 0.98d works
-
Ok, but as i said . I deinstalled Everything. Then i installed Ultraengine again. If i use 0.97 Everything is fine. I create a new clean Projekt. if i update it to Beta Version only the Projekt Manager opens. There is the alert to update the Projekt. After that i click on the blank Projekt . The manager close. In Steam i can only start again the same procedere. Same if i create a clean Projekt in 0.98e before 0.98e it also has no Problems. And the 0.97 Version has no Problems too. sorry, it seems only i have that Problem.
-
by the way, if i start Ultraengine (Editor.exe) from my instalations folder, there is with the latest Beta an Error "Failed to initialize Steam" if i go back to 0.97 it starts without problem
-
sorry, dont work. I deinstalled everything and deleted all folders. then i reinstalled all new. If i start a plank projekt, the client closes with no error. Only if i install the 0.97 version everything is fine. but without the new fine updates
-
-
If i use the last achived version. The material is strange. I think because of the new tessilation