Тема: I.D.S. MONSTERS
Показать сообщение отдельно
Старый 23.02.2020, 21:58   #45
Crystal
Терабайт исходников
 
Аватар для Crystal
 
Регистрация: 05.07.2007
Сообщений: 5,196
Написано 1,721 полезных сообщений
(для 5,374 пользователей)
Ответ: I.D.S. MONSTERS

Сообщение от ABTOMAT Посмотреть сообщение
В сегодняшних реалиях можно не экономить и тупо каждую клетку отдельным мешем делать.
Если очень хочешь запариться с генерацией сетки, то в Юнити тоже так можно, да (есть туторы и т.д.).
Можешь также сделать плейн и на него клетчатую текстуру. А если какую-то клетку надо выделить, то тогда полигональный квадратик туда подсовывать.
В данный момент уже сделана такая текстура клетки, и затайлена на плейн.
Этот плейн будем юзать для пика лучом, чтобы просчитать координаты клетки.
Скрин ниже.

Ну и переход в боевую сцену запилен, пока по пробелу.

Я пока не решил чем отрисовывать выделенные квадраты,
можно конечно отдельными плейнами, но разумнее всё-таки
это сделать единым мешем, и присваивать текстуру или цвет
нужным вершинам.

P.s. Я щас со стима установил HoMM 7, посмотрю как там у них выглядит это дело.

P.p.s. Кому интересно, как я это делал на блитце, код:


Graphics3D 1024,768,32,2
SetBuffer BackBuffer()

Global God = CreateCamera()
MoveEntity God, 5,10,5
RotateEntity God,90,0,0

Global P = CreatePlane()
EntityColor P,200,100,100

Global bermud = CreateMesh()
PositionEntity bermud,0,0,-0.4
EntityFX bermud,2
EntityPickMode bermud,2
Global Surface = CreateSurface(bermud)

Const prohod = 0, stena = 1

Global bermudX#=10
Global bermudZ#=10

Global XK#
Global ZK#

Global Close,Closed,Open

Dim massive(bermudX#,bermudZ#)
Dim massive2(bermudX#,bermudZ#)

For x = 0 To bermudX#-1
For y = 0 To bermudZ#-1

CreateBermud(x,y)

Next
Next

Function CreateBermud(q#,e#)

vertex_1 = AddVertex (Surface, -0.4+q#,0.5,0+e#, 1 ,0)
vertex_2 = AddVertex (Surface, 0.4+q#,0.5,0+e#, 1 ,0)
vertex_3 = AddVertex (Surface, -0.4+q#,0.5,0.8+e#, 0.5,1)
vertex_4 = AddVertex (Surface, 0.4+q#,0.5,0.8+e#, 0.5,1)

massive(q#,e#) = AddTriangle (Surface,vertex_1,vertex_3,vertex_2)
massive2(q#,e#) = AddTriangle (Surface,vertex_3,vertex_4,vertex_2)

End Function



While Not KeyHit(1)

If KeyDown(200) Then MoveEntity God,0,0,-1
If KeyDown(208) Then MoveEntity God,0,0,1

BermudControl()

XK#=Floor(Int(PickedX()))
ZK#=Floor(Int(PickedZ()))

UpdateWorld
RenderWorld
Text 0,10,"PickedX: "+Int(PickedX())
Text 0,30,"PickedZ: "+Int(PickedZ())

Text 0,50,"XK# "+Int(XK#)
Text 0,70,"ZK# "+Int(ZK#)

Flip

Wend
End

Function BermudControl()

CameraPick(God,MouseX(),MouseY()) 
If PickedEntity()=bermud And MouseHit(1) Then

v1#=Int(ZK#*4)+Int(+XK#*Int(bermudZ#)*4)
v2#=Int(v1+1)
v3#=Int(v2+1)
v4#=Int(v3+1)

If massive(bermudX#,bermudZ#) = prohod Then  Closed = 1
If massive(Int(PickedX()),Int(PickedZ())) = stena Then Open = 1

If Closed = 1 And Close = 0 Then
massive(Int(PickedX()),Int(PickedZ())) = stena
Closed = 0
Close = 1
VertexColor Surface,v1#,100,200,400
VertexColor Surface,v2#,100,200,400
VertexColor Surface,v3#,100,200,400
VertexColor Surface,v4#,100,200,400
End If


If Open = 1 Then
massive(Int(PickedX()),Int(PickedZ())) = prohod
Open = 0
Close = 0
VertexColor Surface,v1#,255,255,155
VertexColor Surface,v2#,255,255,155
VertexColor Surface,v3#,255,255,155
VertexColor Surface,v4#,255,255,155
End If

If Close = 1 Then Close = 0

End If

End Function
Я к ней потом на хорсе А* прикрутил, и PhysX, получился механически старкрафт 2 ))
Но блитц штука тупая как и хорс под блитцем, 25 фпс было с 50 юнитами ищущими путь.
Миниатюры
Нажмите на изображение для увеличения
Название: KPDR.jpg
Просмотров: 368
Размер:	463.8 Кб
ID:	23090  
__________________
Проект "Deathbring World - Rangers" и его финансовая поддержка:
https://boosty.to/deathbringrangers

Я на - TWITCH
Канал на YouTube
(Offline)
 
Ответить с цитированием