Знающий
Регистрация: 24.07.2006
Сообщений: 261
Написано 476 полезных сообщений (для 1,238 пользователей)
|
Re: Ответ: Осваиваем Unity3d. Урок #1
Сообщение от pax
Хочется узнать мнение о сравнении решений...
|
На первый взгляд не сложно. Но очевидно, что слезши с Блитца на Юнити сразу не пересядешь. Обладая навыками юзера Basic, на Юнити ничего не сделаешь, нужно изучать С, причем ab ovo ( " с самых яиц", как говорили латиняне). Пока повременю с изучением С#, все же уменя хобби - геймдев, а не программирование. Мне нужен более высокоуровневый двиг.
Ну вообщем, я изначально преполагал такой результат.
Мой код решения этой задачи на Xorse (с аццкими переборами)
; Include header file
Include "xors3d.bb"
; setup maximum supported AntiAlias Type
xSetAntiAliasType xGetMaxAntiAlias()
; set application window caption
xAppTitle "Simple_AI sample"
; initialize graphics mode
xGraphics3D 800, 600, 32, 0,0;False, True
xCreateDSS 1024, 1024
; set texture filtring
xSetTextureFiltering TF_ANISOTROPICX16
; hide mouse pointer
;xHidePointer()
; enable antialiasing
xAntiAlias True
; create camera
Global camera = xCreateCamera()
xCameraRange camera, 0.1, 1000
; position camera
xPositionEntity camera, 0, 5, -10
xCameraEnableShadows camera
xCameraProjMode(camera, 1)
;land
land= xCreateCube()
xScaleEntity land,1000,0.1,1000
xEntityColor land,50,100,20
; for mouse look
xMoveMouse xGraphicsWidth() / 2, xGraphicsHeight() / 2
mousespeed# = 0.5
camerasmoothness# = 4.5
; create light
light = xCreateLight(2)
xLightRange light,150
;xRotateEntity light, 45, 0, 0
xPositionEntity light, 0, 55, -2
;xLightColor light, 125, 255, 0
; shadows
xInitShadows(1024, 0, 1024)
; set shadows params
xLightEnableShadows light,True
xSetShadowParams 4, 0.85, True, 300
xLightShadowEpsilons light, 0.01, 0.0
Type player
Field ent,model
Field id$
Field old_Z#,old_X#,dist#,x#,z#
Field run_flag
End Type
Function create_player(x#,y#,z#,id)
p.player= New player
p\ent=xCreatePivot()
p\model=xCreateCube()
xEntityColor p\model, 255,25,25
xPositionEntity p\model, x#,y#,z#
xEntityType p\model,1
p\id$="player"+id
End Function
Function AI_player()
For p.player=Each player
For b.bot=Each bot
If xEntityDistance (p\model,b\model)<=5 Or xEntityCollided(p\model,bot)
p\old_Z#=xEntityZ_#(p\model,1)
p\old_X#=xEntityX_#(p\model,1)
xTurnEntity( p\model, 0,(( -xDeltaYaw# ( b\model,p\model )*.5))+Rnd(90), 0 )
EndIf
Next
;run and checck distance between old position and new position
p\x# = p\old_X# - xEntityX_#(p\model,1)
p\z# = p\old_Z# - xEntityZ_#(p\model,1)
p\dist# = Sqr(p\x#*p\x# + p\z#*p\z#)
If p\dist#<10 xMoveEntity p\model,0,0,.7
Next
End Function
For i=1 To 5
create_player(Rnd(50),1,Rnd(50),i)
Next
Type bot
Field ent,model
Field id$,current_enemy$,nm
End Type
Function create_bot(x#,y#,z#,id,current_enemy$)
b.bot= New bot
b\ent=xCreatePivot()
b\model=xCreateCube()
xEntityColor b\model, 200,150,0
xPositionEntity b\model, x#,y#,z#
xEntityPickMode b\ent,1
xEntityType b\model,1
;xNameEntity(b\model, Handle(b))
;b\nm=xEntityName
b\id$="bot"+id
b\current_enemy$=current_enemy$
End Function
For i=1 To 15
create_bot(Rnd(250),1,Rnd(250),i,"player"+Rand(1,5))
Next
Function AI_bots()
For b.bot=Each bot
For p.player=Each player
If p\id$=b\current_enemy$
xTurnEntity( b\model, 0,( xDeltaYaw# ( b\model,p\model )*.1), 0 )
xMoveEntity b\model,0,0,.1
EndIf
;check new enemy
If p\id$<>b\current_enemy$
If xEntityDistance (b\model,p\model)<5
b\current_enemy$=p\id$
EndIf
EndIf
Next
Next
End Function
Function info_bots()
For b.bot=Each bot
xCameraProject camera,xEntityX_#(b\model,1),xEntityY_#(b\model,1),xEntityZ_#(b\model,1)
xText xProjectedX#(), xProjectedY#(), "bot_id "+b\id$
xText xProjectedX#(), xProjectedY#()+15, "current_enemy "+b\current_enemy$
Next
End Function
;set collisions
Const bot=1
xCollisions bot,bot,1,2
; main program loop
While Not xKeyDown(KEY_ESCAPE)
; camera control
If xKeyDown(KEY_W) Then xMoveEntity camera, 0, 0, 1
If xKeyDown(KEY_S) Then xMoveEntity camera, 0, 0, -1
If xKeyDown(KEY_A) Then xMoveEntity camera, -1, 0, 0
If xKeyDown(KEY_D) Then xMoveEntity camera, 1, 0, 0
mxs# = CurveValue(xMouseXSpeed() * mousespeed, mxs, camerasmoothness)
mys# = CurveValue(xMouseYSpeed() * mousespeed, mys, camerasmoothness)
camxa# = camxa - mxs Mod 360
camya# = camya + mys
If camya < -89 Then camya = -89
If camya > 89 Then camya = 89
xMoveMouse xGraphicsWidth() / 2, xGraphicsHeight() / 2
xRotateEntity camera, camya, camxa, 0.0
AI_bots()
AI_player()
; update animations
xUpdateWorld()
; render scene
xRenderWorld(1,True)
If xKeyHit(23) info_enable=1-info_enable
If info_enable info_bots()
; switch back buffer
xFlip()
Wend
; for camera mouse look
Function CurveValue#(newvalue#, oldvalue#, increments)
If increments > 1 Then oldvalue# = oldvalue# - (oldvalue# - newvalue#) / increments
If increments <= 1 Then oldvalue# = newvalue#
Return oldvalue#
End Function
|