ΠΠ°Π½Π½ΡΠΉ ΡΡΠΎΠΊ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΡΡΠΎΠΊΠ° ΠΠ΅ΡΠ²ΡΠ΅ ΡΠ°Π³ΠΈ. ΠΡΠ»ΠΈ Π²Ρ Ρ Π½ΠΈΠΌ Π΅ΡΡ Π½Π΅ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠ»ΠΈΡΡ, ΡΠΎ Π½Π°ΡΠ½ΠΈΡΠ΅ Ρ Π½Π΅Π³ΠΎ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ° ΠΆΠ΅ Π²Π΅ΡΡΠΈΡ Π΄Π²ΠΈΠΆΠΊΠ°.
Π ΡΡΠΎΠΌ ΡΡΠΎΠΊΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ. ΠΠ½ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΡΡ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ, Π½ΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΌΠ΅Π½ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎ ΡΡΠ΅Π±ΡΡΡ ΠΏΠΎΡΡΠ½Π΅Π½ΠΈΠΉ, Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΈΡ Π½Π΅ ΡΠ°ΡΠΊΡΡΠ²Π°Π΅Ρ. ΠΡ ΠΈ Π·Π°ΠΎΠ΄Π½ΠΎ Π½Π°ΠΏΠΈΡΠ΅ΠΌ Π½Π΅Π±ΠΎΠ»ΡΡΡΡ ΠΈΠ³ΡΡΡΠΊΡ. ΠΡΠΈΡΡΡΠΏΠΈΠΌ.
Π Π΅Π΄Π°ΠΊΡΠΎΡ - ΡΡΠΎ ΡΠΊΡΠΈΠΏΡ Π½Π° ΡΠ·ΡΠΊΠ΅ AngelScript
, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ Π»Π°ΡΡΠ½Π΅ΡΠΎΠΌ Urho3DPlayer.exe
, ΠΊΠΎΡΠΎΡΡΠΌ ΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈΡΡ Π² ΡΡΠΎΠΊΠ΅
ΠΠ΅ΡΠ²ΡΠ΅ ΡΠ°Π³ΠΈ. Π Π·Π½Π°ΡΠΈΡ, Π΅Π³ΠΎ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΡΡΠ°ΡΡ Π½Π°ΡΡΠ΄Ρ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ ΠΈ,
ΠΏΡΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ, Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ. ΠΠ°ΠΏΡΡΡΠΈΡΡ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Π±Π°ΡΠ½ΠΈΠΊΠ° build_vs/bin/Editor.bat
.
ΠΠ°Π²ΠΈΠ³Π°ΡΠΈΡ ΠΏΠΎΠ΄ΠΎΠ±Π½Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π² ΡΡΡΠ΅ΡΠ΅. W
ΠΈ S
- ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π²ΠΏΠ΅ΡΠ΅Π΄ ΠΈ Π½Π°Π·Π°Π΄, A
ΠΈ D
- Π²Π»Π΅Π²ΠΎ ΠΈ Π²ΠΏΡΠ°Π²ΠΎ, Q
ΠΈ E
- Π²Π½ΠΈΠ· ΠΈ Π²Π²Π΅ΡΡ
.
Π‘ Π·Π°ΠΆΠ°ΡΡΠΌ ΡΠΈΡΡΠΎΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π±ΡΡΡΡΠ΅Π΅. ΠΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΡΠ΅Π»ΠΎΡΠΊΠΈ. ΠΠ°ΠΆΠ°ΡΠ°Ρ ΠΏΡΠ°Π²Π°Ρ ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΌΡΡΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°ΡΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² ΡΠ°Π·Π½ΡΠ΅ ΡΡΠΎΡΠΎΠ½Ρ.
ΠΡΠΈ Π·Π°ΠΆΠ°ΡΠΎΠΉ ΡΡΠ΅Π΄Π½Π΅ΠΉ ΠΊΠ½ΠΎΠΏΠΊΠ΅ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ Π²ΠΎΠΊΡΡΠ³ Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. ΠΡΠ»ΠΈ ΠΊΡΡΡΠΈΡΡ ΠΊΠΎΠ»ΡΡΠΈΠΊΠΎ, ΡΠΎ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠ³ΠΎΠ» ΠΎΠ±Π·ΠΎΡΠ° (fov).
ΠΠΎΠ»Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΊΠ»Π°Π²ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΡΡ.
View->Editor Settings
- Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ. ΠΠ»Ρ Π»ΡΠ±ΠΈΡΠ΅Π»Π΅ΠΉ ΠΠ»Π΅Π½Π΄Π΅ΡΠ° Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΠ±ΡΠ°ΡΡ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΡ ΡΠ°ΡΠΊΠ»Π°Π΄ΠΊΡ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ.
ΠΠΏΡΠΈΡ, Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ - New node mode
. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π²ΠΊΠ»ΡΡΠ΅Π½ ΡΠ΅ΠΆΠΈΠΌ View center
.
Π ΡΡΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ Π½ΠΎΠ²ΡΠ΅ Π½ΠΎΠ΄Ρ ΡΠΎΠ·Π΄Π°ΡΡΡΡ Π² ΡΠ΅Π½ΡΡΠ΅ ΡΠΊΡΠ°Π½Π° Π½Π° ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠΈ, Π·Π°Π΄Π°Π½Π½ΠΎΠΌ Π² Π³ΡΠ°ΡΠ΅ New node distance
.
ΠΠ°ΠΊ ΠΏΠΎ ΠΌΠ½Π΅, ΡΡΠΎ Π½Π΅ ΠΎΡΠ΅Π½Ρ ΡΠ΄ΠΎΠ±Π½ΠΎ. ΠΠ½Π΅ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΠΎΠ»ΡΡΠ΅ Π½ΡΠ°Π²ΠΈΡΡΡ Π²ΡΠΎΡΠΎΠΉ ΡΠ΅ΠΆΠΈΠΌ - In center
.
Π ΡΡΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ Π½ΠΎΠ²ΡΠ΅ Π½ΠΎΠ΄Ρ ΡΠΎΠ·Π΄Π°ΡΡΡΡ Π² ΡΠ΅Π½ΡΡΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ ΠΈ ΠΈΡ
ΠΎΡΡΡΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ Π΄Π²ΠΈΠ³Π°ΡΡ Π² Π½ΡΠΆΠ½ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
Π’ΡΠ΅ΡΠΈΠΉ ΡΠ΅ΠΆΠΈΠΌ (Raycast
) ΠΏΠΎΡ
ΠΎΠΆ Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ, ΡΠΎΠ»ΡΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π½Π΅ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠ΅, Π° ΠΈΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠΎ ΡΡΠ΅Π½ΠΎΠΉ.
ΠΠ°Π»Π΅Π΅ Π² ΡΡΠΎΠΊΠ΅ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ Π²Ρ Π°ΠΊΡΠΈΠ²ΠΈΡΠΎΠ²Π°Π»ΠΈ ΡΠ΅ΠΆΠΈΠΌ In center
.
View->Editor Preferences
- Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°. ΠΠ· ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠ³ΠΎ Π·Π΄Π΅ΡΡ - Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΠ±ΡΠ°ΡΡ ΡΠ·ΡΠΊ (ΡΡΡΡΠΊΠΈΠΉ Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅)
ΠΈ Π·Π°Π΄Π°ΡΡ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°. Minimum opacity
- ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎΡΡΡ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠΈ Π²ΠΈΠ΄Π°, Maximum opacity
- Π²ΡΡ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ.
Π― ΠΎΠ±ΡΡΠ½ΠΎ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Ρ ΠΎΠ±Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² 1
, ΠΈΠ±ΠΎ ΠΎΡΠ²Π»Π΅ΠΊΠ°Π΅Ρ. ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: ΡΡΠΎΠ±Ρ Π½ΠΎΠ²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠ»ΠΈΡΡ, ΠΏΠΎΡΠ»Π΅ Π²Π²ΠΎΠ΄Π° Π½Π°ΠΆΠΈΠΌΠ°ΠΉΡΠ΅ Enter
.
ΠΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Ρ
ΡΠ°Π½ΡΡΡΡ Π² ΡΠ°ΠΉΠ»Π΅ c:\Users\ΠΠΠ―_ΠΠΠΠ¬ΠΠΠΠΠ’ΠΠΠ―\AppData\Roaming\urho3d\Editor\Config.xml
(Π² Windows).
Π§ΡΠΎΠ±Ρ ΡΠ±ΡΠΎΡΠΈΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ, ΡΡΠΎΡ ΡΠ°ΠΉΠ» ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π°Π»ΠΈΡΡ.
ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ F1
ΠΎΡΠΊΡΡΠ²Π°Π΅ΡΡΡ ΠΊΠΎΠ½ΡΠΎΠ»Ρ. ΠΠ½Π° ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² Π΄Π²ΡΡ
ΡΠ΅ΠΆΠΈΠΌΠ°Ρ
, ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π»Π΅Π²Π΅Π΅ ΠΏΠΎΠ»Ρ Π²Π²ΠΎΠ΄Π°.
Π ΡΠ΅ΠΆΠΈΠΌΠ΅ FileSystem
ΠΊΠΎΠ½ΡΠΎΠ»Ρ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ½Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π½Π°Ρ ΡΡΡΠΎΠΊΠ° Windows (Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ Windows ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ).
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π²Π²Π΅ΡΡΠΈ notepad.exe
, ΡΠΎ ΠΎΡΠΊΡΠΎΠ΅ΡΡΡ Π±Π»ΠΎΠΊΠ½ΠΎΡ.
Π ΡΠ΅ΠΆΠΈΠΌΠ΅ Script
Π²ΡΠ΅ Π²Π²Π΅Π΄ΡΠ½Π½ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ AngelScript. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠΌΠ°Π½Π΄Π° log.Write(1+2)
Π²ΡΠ²Π΅Π΄Π΅Ρ 3.
Π’ΡΡ ΠΌΡ ΠΏΡΠΈΡ
ΠΎΠ΄ΠΈΠΌ ΠΊ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π²ΡΠ²ΠΎΠ΄ ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ - ΡΡΠΎ Π»ΠΎΠ³. Π‘Π°ΠΌ Π»ΠΎΠ³ Π² ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΌ Π²ΠΈΠ΄Π΅ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ Π² ΡΠ°ΠΉΠ»
c:\Users\ΠΠΠ―_ΠΠΠΠ¬ΠΠΠΠΠ’ΠΠΠ―\AppData\Roaming\urho3d\logs\Editor.as.log
. ΠΠ½ ΠΎΡΠ΅Π½Ρ ΡΠΈΠ»ΡΠ½ΠΎ Π²Π°ΠΌ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠ΅ ΡΠΊΡΠΈΠΏΡΠΎΠ².
ΠΠΎΠ·ΡΠΌΠΈΡΠ΅ Π°ΡΡ
ΠΈΠ² assets.zip
ΠΈΠ· ΡΡΠΎΠ³ΠΎ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ ΠΈ ΡΠ°ΡΠΏΠ°ΠΊΡΠΉΡΠ΅ Π΅Π³ΠΎ Π² ΠΏΡΡΡΡΡ ΠΏΠ°ΠΏΠΊΡ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, game
. ΠΡΠΎΡ Π°ΡΡ
ΠΈΠ² ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ΅ΡΡΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΡΡΡΡ Π½Π°ΠΌ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΈΠ³ΡΡ: Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Ρ ΠΊ Π½ΠΈΠΌ ΠΈ ΠΎΠ΄ΠΈΠ½ Π·Π²ΡΠΊΠΎΠ²ΠΎΠΉ ΡΠ°ΠΉΠ».
Π ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ΅ Π½Π°ΠΆΠΌΠΈΡΠ΅ File->Set resource path...
ΠΈ ΡΠΊΠ°ΠΆΠΈΡΠ΅ ΠΏΡΡΡ game\GameData\
. Π’Π΅ΠΏΠ΅ΡΡ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ ΠΈΠΌΠ΅Π΅Ρ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΡΠ΅ΠΌ ΠΏΠ°ΠΏΠΊΠ°ΠΌ Ρ ΡΠ΅ΡΡΡΡΠ°ΠΌΠΈ: ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΏΠ°ΠΏΠΊΠΈ Data
ΠΈ CoreData
, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°Ρ
ΠΎΠ΄ΡΡΡΡ ΡΡΠ΄ΠΎΠΌ Ρ Π½ΠΈΠΌ, ΠΈ ΠΏΠ°ΠΏΠΊΠ° GameData
, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ ΡΠΊΠ°Π·Π°Π»ΠΈ.
Π Π±ΡΠ°ΡΠ·Π΅ΡΠ΅ ΡΠ΅ΡΡΡΡΠΎΠ² (Resource Browser
) Π²ΡΠ΄Π΅Π»ΠΈΡΠ΅ ΠΏΠ°ΠΏΠΊΡ Models
ΠΈ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΈΡΠ΅ Ground.mdl
Π½Π° ΠΊΠΎΡΠ½Π΅Π²ΡΡ Π½ΠΎΠ΄Ρ Scene
Π² ΠΎΠΊΠ½Π΅ Hierarchy
.
ΠΡΠΈ ΡΡΠΎΠΌ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π½Π° Π½ΠΎΠ²Π°Ρ Π½ΠΎΠ΄Π° Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠΌ StaticModel
(ΠΏΡΠΎΡΡΠ°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ Π±Π΅Π· ΡΠΊΠ΅Π»Π΅ΡΠ°). Π ΠΎΠΊΠ½Π΅ Attribute inspector
Π·Π°Π΄Π°ΠΉΡΠ΅ Π΄Π»Ρ Π½ΠΎΠ΄Ρ ΠΈΠΌΡ Ground
, Π½Π°ΠΆΠΌΠΈΡΠ΅ ΠΊΠ½ΠΎΠΏΠΊΡ Pick
Π²ΠΎΠ·Π»Π΅ Π³ΡΠ°ΡΡ Material
ΠΈ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ Materials/Ground.xml
.
Π’Π΅ΠΏΠ΅ΡΡ Ρ Π½Π°Ρ Π΅ΡΡΡ ΠΏΠΎΠ», Π½ΠΎ ΡΡΠ΅Π½Π° ΠΏΠ»ΠΎΡ ΠΎ ΠΎΡΠ²Π΅ΡΠ΅Π½Π°, ΠΏΠΎΡΡΠΎΠΌΡ Π΄Π°Π²Π°ΠΉΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ ΡΠ²Π΅ΡΠ°.
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π½ΠΎΠ²ΡΠΉ ΡΠ·Π΅Π». ΠΡΠ΄Π΅Π»ΠΈΡΠ΅ ΠΊΠΎΡΠ½Π΅Π²ΡΡ Π½ΠΎΠ΄Ρ Scene
ΠΈ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ ΠΏΡΠ½ΠΊΡ ΠΌΠ΅Π½Ρ Create
->Local node
. ΠΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Replicated node
. Π Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΡΠ°Π·Π½ΠΈΡΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠ΅ΠΏΠ»ΠΈΡΠΈΡΡΠ΅ΠΌΡΠ΅ Π½ΠΎΠ΄Ρ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·ΠΈΡΡΡΡΡΡ ΠΏΡΠΈ ΡΠ΅ΡΠ΅Π²ΠΎΠΌ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠΈ, Π° Ρ ΡΠ΅ΡΡΡ ΠΌΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π΅ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅ΠΌ. ΠΠΎΠ΄Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π½Π΅ ΡΠ΅ΡΠ΅Π· ΠΌΠ΅Π½Ρ, Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ Π² Π»Π΅Π²ΠΎΠΉ ΡΠ°ΡΡΠΈ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ°.
Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Π½ΠΎΠ²ΠΎΡΠΎΠ·Π΄Π°Π½Π½Π°Ρ Π½ΠΎΠ΄Π° Π²ΡΠ΄Π΅Π»Π΅Π½Π°, ΠΈ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ ΠΏΡΠ½ΠΊΡ ΠΌΠ΅Π½Ρ Create
->Component
->Scene
->Light
(ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΏΡΠΎΠ΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½Ρ Π½Π° Π»Π΅Π²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ). Π ΠΎΠΊΠ½Π΅ Attribute inspector
Π·Π°Π΄Π°ΠΉΡΠ΅ ΠΈΠΌΡ Π΄Π»Ρ Π½ΠΎΠ΄Ρ, Π²ΡΠ±Π΅ΡΠΈΡΠ΅ ΡΠΈΠΏ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° Directional
(ΡΠΎΠ»Π½Π΅ΡΠ½ΡΠΉ ΡΠ²Π΅Ρ), ΡΠΊΠ°ΠΆΠΈΡΠ΅ ΡΡΠΊΠΎΡΡΡ, ΠΏΠΎΠ²ΠΎΡΠΎΡ, ΠΏΠΎΠ·ΠΈΡΠΈΡ (Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° ΡΠ²Π΅ΡΠ° ΠΏΠΎΠ·ΠΈΡΠΈΡ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π½ΠΎ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ΅ΠΌ Π½ΠΎΠ΄Ρ Π²ΡΡΠ΅, ΡΡΠΎΠ±Ρ Π½Π΅ ΠΌΠ΅ΡΠ°Π»Π° ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎ ΡΡΠ΅Π½ΠΎΠΉ). Π’Π°ΠΊΠΆΠ΅ Π²ΠΊΠ»ΡΡΠΈΡΠ΅ ΠΎΠΏΡΠΈΡ Cast Shadows
, ΡΡΠΎΠ±Ρ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ ΡΠ²Π΅ΡΠ° ΠΌΠΎΠ³ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠ΅Π½ΠΈ.
Π’Π΅ΠΏΠ΅ΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ ΡΠΎΠ½ΠΎΠ²ΠΎΠ΅ ΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈΠ΅. ΠΡΠ΄Π΅Π»ΠΈΡΠ΅ ΠΊΠΎΡΠ½Π΅Π²ΡΡ Π½ΠΎΠ΄Ρ Scene
ΠΈ ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Zone
(Create
->Component
->Scene
->Zone
). ΠΠ°Π΄Π°ΠΉΡΠ΅ ΡΠ²Π΅Ρ ΡΠΎΠ½Π° (Fog Color
) ΠΈ ΡΠ²Π΅Ρ ΡΠΎΠ½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈΡ (Ambient Color
). ΠΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π±ΡΠ΄ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ, ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ»ΠΈ ΠΊΠ°ΠΌΠ΅ΡΠ° Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ
Π·ΠΎΠ½Ρ, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ°ΡΡΠΈΡΡΡΠ΅ Π³ΡΠ°Π½ΠΈΡΡ (Bounding Box Min/Max
).
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π½ΠΎΠ²ΡΡ Π½ΠΎΠ΄Ρ, Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΠΊ Π½Π΅ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ AnimatedModel
(ΠΌΠΎΠ΄Π΅Π»Ρ ΡΠΎ ΡΠΊΠ΅Π»Π΅ΡΠΎΠΌ) ΠΈ ΡΠΊΠ°ΠΆΠΈΡΠ΅ ΠΌΠΎΠ΄Π΅Π»Ρ Models/Cannon.mdl
ΠΈ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π» Materials/Cannon.xml
. Π‘Π΄Π²ΠΈΠ½ΡΡΠ΅ ΠΏΡΡΠΊΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π²Π²Π΅ΡΡ
, Π° ΡΠ°ΠΊΠΆΠ΅ Π²ΠΊΠ»ΡΡΠΈΡΠ΅ ΠΎΠΏΡΠΈΡ Cast Shadows, ΡΡΠΎΠ±Ρ ΠΏΡΡΠΊΠ° ΠΎΡΠ±ΡΠ°ΡΡΠ²Π°Π»Π° ΡΠ΅Π½Ρ.
ΠΠΎΡΠ΅ΡΠ½ΠΈΠ΅ Π½ΠΎΠ΄Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ Π²ΠΈΠ΄ΠΈΡΠ΅ Ρ ΠΏΡΡΠΊΠΈ - ΡΡΠΎ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ Π² ΠΌΠΎΠ΄Π΅Π»Ρ ΠΊΠΎΡΡΠΈ. ΠΠΎΠΊΠ° ΡΡΠΎ Π½Π΅ ΠΎΠ±ΡΠ°ΡΠ°ΠΉΡΠ΅ Π½Π° Π½ΠΈΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΡ.
Π ΠΏΠ°ΠΏΠΊΠ΅ GameData\Scripts
ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ°ΠΉΠ» Cannon.as
ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ:
class Cannon : ScriptObject
{
// ΠΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΈΠ»ΠΈ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π²ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΏΡΡΠΊΠΈ
int direction = 1;
// Π€ΡΠ½ΠΊΡΠΈΡ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΊΠ°Π΄Ρ
void Update(float timeStep)
{
// Π£Π³ΠΎΠ» ΠΏΠΎΠ²ΠΎΡΠΎΡΠ° Π²ΠΎΠΊΡΡΠ³ ΠΎΡΠΈ x (node ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° Π½ΠΎΠ΄Ρ, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠ»Π΅Π½ ΡΠΊΡΠΈΠΏΡ)
float pitch = node.rotation.pitch;
// ΠΠ΅Π½ΡΠ΅ΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π²ΡΠ°ΡΠ΅Π½ΠΈΡ, Π΅ΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ³Π»Π° Π²ΡΡ
ΠΎΠ΄ΠΈΡ Π·Π° Π·Π°Π΄Π°Π½Π½ΡΠ΅ ΠΏΡΠ΅Π΄Π΅Π»Ρ
if (pitch >= 70.0f)
direction = -1;
else if (pitch <= -10.0f)
direction = 1;
pitch += 30.0f * direction * timeStep;
node.rotation = Quaternion(pitch, 0.0f, 0.0f);
}
}
Π‘ΠΊΡΠΈΠΏΡΡ Π»ΡΡΡΠ΅ ΡΠΎΡ ΡΠ°Π½ΡΡΡ Π² ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ΅ UTF-8, ΡΠΎΠ³Π΄Π° Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ ΠΊΠΈΡΠΈΠ»Π»ΠΈΡΠ΅ΠΉ.
Π Π½ΠΎΠ΄Π΅ Cannon
Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ScriptInstance
(Create
->Component
->Logic
->ScriptInstance
). ΠΠ°ΠΆΠΌΠΈΡΠ΅ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ Pick
ΠΈ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ Π½ΠΎΠ²ΠΎΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΡΠ°ΠΉΠ», Π° Π² Π³ΡΠ°ΡΠ΅ Class Name
Π²Π²Π΅Π΄ΠΈΡΠ΅ Cannon
(ΡΠ°ΠΉΠ» ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΠ»Π°ΡΡΠΎΠ²). ΠΠΎΡΠ»Π΅ Π²Π²ΠΎΠ΄Π° Π½Π΅ Π·Π°Π±ΡΠ΄ΡΡΠ΅ Π½Π°ΠΆΠ°ΡΡ Enter
. ΠΡΠ»ΠΈ Π²ΡΠ΅ ΡΠ΄Π΅Π»Π°Π½ΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ, Π½ΠΈΠΆΠ΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠ»Π°ΡΡΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΡΠ²ΠΈΡΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ direction
, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ ΠΎΠ±ΡΡΠ²ΠΈΠ»ΠΈ Π² ΡΠΊΡΠΈΠΏΡΠ΅.
Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΠ΅Π»Ρ RevertOnPause
(ΡΡΠ΅ΡΡΡ ΠΊΠ½ΠΎΠΏΠΊΠ° Π½Π° Π²Π΅ΡΡ
Π½Π΅ΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ) Π°ΠΊΡΠΈΠ²ΠΈΡΠΎΠ²Π°Π½ ΠΈ Π½Π°ΠΆΠΌΠΈΡΠ΅ ΠΊΠ½ΠΎΠΏΠΊΡ RunUpdatePlay
(ΠΏΠ΅ΡΠ²Π°Ρ ΠΊΠ½ΠΎΠΏΠΊΠ° Π½Π° Π²Π΅ΡΡ
Π½Π΅ΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ). ΠΡΡΠΊΠ° Π½Π°ΡΠ½Π΅Ρ Π²ΡΠ°ΡΠ°ΡΡΡΡ ΡΡΠ΄Π°-ΡΡΠ΄Π°. ΠΠ»Ρ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π½Π°ΠΆΠΌΠΈΡΠ΅ RunUpdatePause
(ΡΡΠ΅Π΄Π½ΡΡ ΠΊΠ½ΠΎΠΏΠΊΠ°).
Π§ΡΠΎ Π΄Π΅Π»Π°Π΅Ρ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΠ΅Π»Ρ RevertOnPause
? ΠΡΠ»ΠΈ ΠΎΠ½ Π°ΠΊΡΠΈΠ²Π΅Π½, ΡΠΎ ΠΏΠ΅ΡΠ΅Π΄ Π·Π°ΠΏΡΡΠΊΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΡΠ΅Π½Ρ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅ΡΡΡ, Π° ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ Π½Π° ΠΏΠ°ΡΠ·Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π²ΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π΄ΠΎ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ. ΠΡΠ° ΠΊΠ½ΠΎΠΏΠΊΠ° Π½Π°ΠΌ Π΅ΡΠ΅ ΠΏΡΠΈΠ³ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎΠ·ΠΆΠ΅.
Π ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠ°Π±ΠΎΡΡ Π½Π΅ Π·Π°Π±ΡΠ²Π°ΠΉΡΠ΅ ΡΠΎΡ
ΡΠ°Π½ΡΡΡ ΡΡΠ΅Π½Ρ (File
->Save scene as...
) Π² ΡΠ°ΠΉΠ» GameData/Scenes/Level01.xml
.
Urho3D ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π΄Π²Π΅ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ: Box2D ΠΈ Bullet. ΠΡΠΈΠ½ΡΠΈΠΏΡ ΡΠ°Π±ΠΎΡΡ Ρ Π½ΠΈΠΌΠΈ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΡ
ΠΎΠΆΠΈ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΏΠ΅ΡΠ²Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½ΠΎΠ΄ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΏΠ»ΠΎΡΠΊΠΎΡΡΠΈ XY, Π° Π²ΡΠΎΡΠ°Ρ Π² ΡΡΡΡ
ΠΌΠ΅ΡΠ½ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅. ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Box2D Π½Π°Ρ
ΠΎΠ΄ΡΡΡΡ Π² ΠΌΠ΅Π½Ρ Create
->Component
->Physics2D
, Π° Bullet - Π² ΠΌΠ΅Π½Ρ Create
->Component
->Physics
.
ΠΡΠ°ΠΊ, Ρ Π½Π°Ρ Π΅ΡΡΡ ΠΏΠΎΠ» ΠΈ ΠΏΡΡΠΊΠ°. ΠΠ°Π²Π°ΠΉΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² ΡΡΠ΅Π½Ρ ΠΏΡΡΠ΅ΡΠ½ΠΎΠ΅ ΡΠ΄ΡΠΎ. Π Π±ΡΠ°ΡΠ·Π΅ΡΠ΅ ΡΠ΅ΡΡΡΡΠΎΠ² (Resource Browser
) ΠΎΡΠΊΡΠΎΠΉΡΠ΅ ΠΏΠ°ΠΏΠΊΡ Models
ΠΈ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΈΡΠ΅ Cannonball.mdl
Π² ΠΎΠΊΠ½ΠΎ Hierarchy
Π½Π° ΠΊΠΎΡΠ½Π΅Π²ΡΡ Π½ΠΎΠ΄Ρ Scene
. Π§ΡΠΎΠ±Ρ ΠΏΡΡΠΊΠ° ΠΈ ΠΏΠΎΠ» Π½Π΅ ΠΌΠ΅ΡΠ°Π»ΠΈ ΡΠ°Π±ΠΎΡΠ΅, Π² ΠΎΠΊΠ½Π΅ Hierarchy
ΡΠ΅Π»ΠΊΠ½ΠΈΡΠ΅ ΠΏΠΎ ΠΈΡ
Π½ΠΎΠ΄Π°ΠΌ ΠΏΡΠ°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡΡΠΈ ΠΈ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ Enable/disable
. ΠΡΠΈ ΡΡΠΎΠΌ ΠΎΠ½ΠΈ ΠΈΡΡΠ΅Π·Π½ΡΡ ΡΠΎ ΡΡΠ΅Π½Ρ, Π° Π½ΠΎΠ΄Ρ Π±ΡΠ΄ΡΡ ΠΎΠΊΡΠ°ΡΠ΅Π½Ρ Π² ΠΊΡΠ°ΡΠ½ΡΠΉ ΡΠ²Π΅Ρ. Π’Π΅ΠΏΠ΅ΡΡ Π΄Π²Π°ΠΆΠ΄Ρ ΡΠ΅Π»ΠΊΠ½ΠΈΡΠ΅ ΠΏΠΎ Π½ΠΎΠ΄Π΅ Ρ ΡΠ΄ΡΠΎΠΌ ΠΈ ΠΎΠ½ΠΎ (ΡΠ΄ΡΠΎ) ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ Π² ΡΠ΅Π½ΡΡΠ΅ ΡΠΊΡΠ°Π½Π°.
Π’Π΅ΠΏΠ΅ΡΡ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅ ΡΠ΅ΡΡΡΡΠΎΠ² ΠΎΡΠΊΡΠΎΠΉΡΠ΅ ΠΏΠ°ΠΏΠΊΡ Materials
ΠΈ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΈΡΠ΅ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π» Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ StaticModel
Π² ΠΎΠΊΠ½Π΅ Hierarchy
ΠΈΠ»ΠΈ Π² Π³ΡΠ°ΡΡ Material
ΠΎΠΊΠ½Π° Attribute inspector
. ΠΠ°Π΄Π°ΠΉΡΠ΅ Π½ΠΎΠ΄Π΅ ΠΈΠΌΡ ΠΈ Π²ΠΊΠ»ΡΡΠΈΡΠ΅ ΠΎΠΏΡΠΈΡ Cast Shadows
.
ΠΠΎΠ±Π°Π²ΡΡΠ΅ ΠΊ ΠΏΡΡΠ΅ΡΠ½ΠΎΠΌΡ ΡΠ΄ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ RigidBody
ΠΈ CollisionShape
(Create
->Component
->Physics
). ΠΡΠΈ ΡΡΠΎΠΌ ΠΊ ΡΡΠ΅Π½Π΅ Π±ΡΠ΄Π΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ PhysicsWorld
, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ ΡΠΈΠ·ΠΈΠΊΠΈ.
RigidBody ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΎΠ±ΡΠ΅ΠΊΡΠ°. Π’Π΅Π»Π° Π±ΡΠ²Π°ΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅. Π‘ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ΅Π»Π° Π½Π΅ΠΏΠΎΠ΄Π²ΠΈΠΆΠ½Ρ ΠΈ ΡΠ²Π»ΡΡΡΡΡ Π»ΠΈΡΡ ΠΏΡΠ΅ΠΏΡΡΡΡΠ²ΠΈΡΠΌΠΈ, Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΠΎΠ΄Π²Π΅ΡΠΆΠ΅Π½Ρ Π²ΠΎΠ·Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π²Π½Π΅ΡΠ½ΠΈΡ ΡΠΈΠ» (Π³ΡΠ°Π²ΠΈΡΠ°ΡΠΈΠΈ Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅). ΠΡΠ»ΠΈ Ρ ΡΠ΅Π»Π° Π΅ΡΡΡ ΠΌΠ°ΡΡΠ° - ΠΎΠ½ΠΎ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ΅, Π΅ΡΠ»ΠΈ ΠΌΠ°ΡΡΠ° ΡΠ°Π²Π½Π° Π½ΡΠ»Ρ, ΡΠΎ ΡΠ΅Π»ΠΎ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅.
ΠΠ°Π΄Π°ΠΉΡΠ΅ Π΄Π»Ρ RigidBody ΠΌΠ°ΡΡΡ, ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΊΠΎΠ»ΡΠΆΠ΅Π½ΠΈΡ ΠΈ ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΡΠ΅Π½ΠΈΡ ΠΊΠ°ΠΊ Π½Π° ΡΠΊΡΠΈΠ½ΡΠΎΡΠ΅ Π½ΠΈΠΆΠ΅. Π₯ΠΎΡΡ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π°ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ CCD Radius
ΠΈ CCD Motion Threshold
. ΠΡΠ»ΠΈ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π½Π° Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΠΊΠΎΡΠΎΡΡΠΈ ΠΏΡΠΎΡΠΊΠ°ΠΊΠΈΠ²Π°ΡΡ ΡΠΊΠ²ΠΎΠ·Ρ ΠΏΡΠ΅Π³ΡΠ°Π΄Ρ, ΡΠΎ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΡΡΠΈΡ
ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π²Π°ΠΌ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ.
CollisionShape
ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠΎΡΠΌΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΡΠΈ ΡΠ°ΡΡΠ΅ΡΠ΅ ΡΡΠΎΠ»ΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΉ. ΠΠΎΡΠ΅ΠΌΡ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°ΠΌΡ 3D-ΠΌΠΎΠ΄Π΅Π»Ρ? Π ΡΠ΅Π»ΡΡ
ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΎΠ±Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠΎ ΡΡΠ΅ΡΠΎΠΉ, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΡΠ°Π²Π½ΠΈΡΡ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠ΅ Π΄ΠΎ ΡΠ΅Π½ΡΡΠ° ΡΡΠ΅ΡΡ ΠΈ ΡΠ°Π΄ΠΈΡΡ ΡΡΠΎΠΉ ΡΡΠ΅ΡΡ. ΠΡΠΎ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΡΡΡΡΠ΅Π΅, ΡΠ΅ΠΌ Π²ΡΡΠΈΡΠ»ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΡΡΠ΅ΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΎΠ². ΠΠ±ΡΠ΅ΠΊΡ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΠΉΠΏΠΎΠ² Π΄Π»Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΡΠΎΡΠΌΡ.
ΠΡΠ±Π΅ΡΠΈΡΠ΅ Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° CollisionShape
ΡΠΈΠΏ Sphere
ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ ΡΠ°Π΄ΠΈΡΡ Π±Π»ΠΈΠ·ΠΊΠΈΠΌ ΠΊ ΡΠ°Π΄ΠΈΡΡΡ ΠΏΡΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ΄ΡΠ°, ΠΊΠ°ΠΊ Π½Π° ΡΠΊΡΠΈΠ½ΡΠΎΡΠ΅ Π²ΡΡΠ΅.
Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΠ΅Π»Ρ RevertOnPause
Π°ΠΊΡΠΈΠ²ΠΈΡΠΎΠ²Π°Π½ ΠΈ Π½Π°ΠΆΠΌΠΈΡΠ΅ ΠΊΠ½ΠΎΠΏΠΊΡ RunUpdatePlay
. ΠΡΡΠ΅ΡΠ½ΠΎΠ΅ ΡΠ΄ΡΠΎ ΠΏΠΎΠ΄ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΠΌ Π³ΡΠ°Π²ΠΈΡΠ°ΡΠΈΠΈ Π½Π°ΡΠ½Π΅Ρ ΠΏΠ°Π΄Π°ΡΡ Π²Π½ΠΈΠ·. ΠΠ°ΠΆΠΌΠΈΡΠ΅ ΠΏΠ°ΡΠ·Ρ ΠΈ ΡΠ΄ΡΠΎ Π²Π΅ΡΠ½Π΅ΡΡΡ Π½Π° ΠΌΠ΅ΡΡΠΎ.
Π’Π΅ΠΌ, ΠΊΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π» Ρ Unity, Π±ΡΠ΄Π΅Ρ Π·Π½Π°ΠΊΠΎΠΌΠΎ ΡΡΠΎ ΠΏΠΎΠ½ΡΡΠΈΠ΅. ΠΡΠ΅ΡΠ°Π± - ΡΡΠΎ ΡΠ°Π±Π»ΠΎΠ½ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎ Π²ΡΡΠ°Π²Π»ΡΡΡ Π² ΡΡΠ΅Π½Ρ. Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΏΠ°ΠΏΠΊΡ Objects
Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ GameData
. ΠΡΠ΄Π΅Π»ΠΈΡΠ΅ Π½ΠΎΠ΄Ρ Cannonball
, Π²ΡΠ±Π΅ΡΠΈΡΠ΅ ΠΏΡΠ½ΠΊΡ ΠΌΠ΅Π½Ρ File
->Save node as...
ΠΈ ΡΠΎΡ
ΡΠ°Π½ΠΈΡΠ΅ Π² ΡΠ°ΠΉΠ» GameData/Objects/Cannonball.xml
. Π’Π΅ΠΏΠ΅ΡΡ ΠΏΡΡΠ΅ΡΠ½ΠΎΠ΅ ΡΠ΄ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π°Π»ΠΈΡΡ ΡΠΎ ΡΡΠ΅Π½Ρ. ΠΠ»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΠ΅ΡΠ°Π±ΠΎΠ² Π² ΡΡΠ΅Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΏΡΠ½ΠΊΡ ΠΌΠ΅Π½Ρ File
->Load node
.
ΠΠΊΠ»ΡΡΠΈΡΠ΅ Π½ΠΎΠ΄Ρ ΠΏΡΡΠΊΠΈ ΠΈ ΠΏΠΎΠ»Π°, ΡΡΠΎΠ±Ρ ΠΈΡ
Π±ΡΠ»ΠΎ Π²ΠΈΠ΄Π½ΠΎ. Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π΄Π»Ρ Π½ΠΈΡ
ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ RigidBody
ΠΈ CollisionShape
. ΠΠ»Ρ ΠΏΠΎΠ»Π° Π²ΡΠ±Π΅ΡΠΈΡΠ΅ ΡΠΈΠΏ ΡΠ΅ΠΉΠΏΠ° StaticPlane
(Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½Π°Ρ ΠΏΠ»ΠΎΡΠΊΠΎΡΡΡ) ΠΈ Π·Π°Π΄Π°ΠΉΡΠ΅ Π΅ΠΌΡ (ΠΏΠΎΠ»Ρ) ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΊΠΎΠ»ΡΠΆΠ΅Π½ΠΈΡ ΠΈ ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΡΠ΅Π½ΠΈΡ ΡΠ°Π²Π½ΡΠΌΠΈ Π΅Π΄ΠΈΠ½ΠΈΡΠ΅ (ΠΈΠ½Π°ΡΠ΅ ΡΠ΅Π»Π° ΠΏΠΎ Π½Π΅ΠΌΡ Π±ΡΠ΄ΡΡ Π΄Π²ΠΈΠ³Π°ΡΡΡΡ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΡΠΈ ΠΊΠΎΠ½ΡΠ°ΠΊΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈΡ
ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΡ ΡΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ½ΠΎΠΆΠ°ΡΡΡΡ). ΠΠ»Ρ ΠΏΡΡΠΊΠΈ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ ΡΠΈΠΏ ΡΠ΅ΠΉΠΏΠ° Capsule
ΠΈ Π·Π°Π΄Π°ΠΉΡΠ΅ ΡΠ΅ΠΉΠΏΡ (Π½Π΅ Π½ΠΎΠ΄Π΅) ΡΠ°Π·ΠΌΠ΅Ρ Size
= (2, 4.3, 1)
ΠΈ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Offset Position
= (0, 1.12, 0)
. ΠΡΡ Π΄Π»Ρ ΠΏΡΡΠΊΠΈ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ AnimationController
(Create
->Component
->Logic
), ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π½Π°ΠΌ ΠΏΡΠΎΠΈΠ³ΡΡΠ²Π°ΡΡ ΡΠΎΠ·Π΄Π°Π½Π½ΡΡ Π² 3D-ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ΅ Π°Π½ΠΈΠΌΠ°ΡΠΈΡ Π²ΡΡΡΡΠ΅Π»Π°.
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΡΠ΅ΠΌ ΡΠΊΡΠΈΠΏΡ ΠΏΡΡΠΊΠΈ GameData\Scripts\Cannon.as
class Cannon : ScriptObject
{
// ΠΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΈΠ»ΠΈ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π²ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΏΡΡΠΊΠΈ
int direction = 1;
// ΠΠ°Π΄Π΅ΡΠΆΠΊΠ° Π΄ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ Π²ΡΡΡΡΠ΅Π»Π°
float shootDelay = 0.0f;
// Π€ΡΠ½ΠΊΡΠΈΡ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΊΠ°Π΄Ρ
void Update(float timeStep)
{
// Π£Π³ΠΎΠ» ΠΏΠΎΠ²ΠΎΡΠΎΡΠ° Π²ΠΎΠΊΡΡΠ³ ΠΎΡΠΈ x (node ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° Π½ΠΎΠ΄Ρ, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠ»Π΅Π½ ΡΠΊΡΠΈΠΏΡ)
float pitch = node.rotation.pitch;
// ΠΠ΅Π½ΡΠ΅ΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π²ΡΠ°ΡΠ΅Π½ΠΈΡ, Π΅ΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ³Π»Π° Π²ΡΡ
ΠΎΠ΄ΠΈΡ Π·Π° Π·Π°Π΄Π°Π½Π½ΡΠ΅ ΠΏΡΠ΅Π΄Π΅Π»Ρ
if (pitch >= 70.0f)
direction = -1;
else if (pitch <= -10.0f)
direction = 1;
pitch += 30.0f * direction * timeStep;
node.rotation = Quaternion(pitch, 0.0f, 0.0f);
if (shootDelay > 0.0f)
shootDelay -= timeStep;
// ΠΡΠ»ΠΈ Π½Π°ΠΆΠ°Ρ ΠΏΡΠΎΠ±Π΅Π» ΠΈ ΠΏΡΠΎΡΠ»ΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ Π²ΡΡΡΡΠ΅Π»Π°,
if (input.keyDown[KEY_SPACE] && shootDelay <= 0.0f)
{
Shoot(); // ΡΠΎ ΡΡΡΠ΅Π»ΡΠ΅ΠΌ
shootDelay = 1.0f; // ΠΈ Π²Π½ΠΎΠ²Ρ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π·Π°Π΄Π΅ΡΠΆΠΊΡ Π² ΠΎΠ΄Π½Ρ ΡΠ΅ΠΊΡΠ½Π΄Ρ
AnimationController@ animCtrl = node.GetComponent("AnimationController");
animCtrl.SetTime("Models/Shoot.ani", 0.0f); // ΠΠ΅ΡΠ΅ΠΌΠ°ΡΡΠ²Π°Π΅ΠΌ Π°Π½ΠΈΠΌΠ°ΡΠΈΡ Π² Π½Π°ΡΠ°Π»ΠΎ
animCtrl.PlayExclusive("Models/Shoot.ani", 0, false, 0.0f); // ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ Π°Π½ΠΈΠΌΠ°ΡΠΈΡ ΠΏΡΡΠΊΠΈ
SoundSource3D@ source = node.CreateComponent("SoundSource3D"); // Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ Π·Π²ΡΠΊΠ°
Sound@ sound = cache.GetResource("Sound", "Sounds/Shoot.wav");
source.autoRemoveMode = REMOVE_COMPONENT; // ΠΡΡΠΎΡΠ½ΠΈΠΊ Π·Π²ΡΠΊΠ° Π±ΡΠ΄Π΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ½ΠΈΡΡΠΎΠΆΠ΅Π½ ΠΏΠΎΡΠ»Π΅ ΠΏΡΠΎΠΈΠ³ΡΡΠ²Π°Π½ΠΈΡ
source.Play(sound);
}
}
void Shoot()
{
// ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΊΠΎΡΡΠΈ CannonballPlace Ρ ΠΏΡΡΠΊΠΈ
Vector3 position = node.GetChild("CannonballPlace", true).worldPosition;
// ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π² ΡΡΠ΅Π½Ρ ΠΏΡΠ΅ΡΠ°Π±
XMLFile@ xml = cache.GetResource("XMLFile", "Objects/Cannonball.xml");
Node@ newNode = scene.InstantiateXML(xml, position, Quaternion());
// ΠΠ°Ρ
ΠΎΠ΄ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ RigidBody
RigidBody@ body = newNode.GetComponent("RigidBody");
// ΠΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Ρ ΠΏΡΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ΄ΡΠ° ΡΠΆΠ΅ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠΏΡΠ»ΡΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠ΄ΡΠΎ ΡΠ°ΡΡΠΈΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΡΠ΅ΠΊΠ°Π΅ΡΡΡ Ρ ΠΏΡΡΠΊΠΎΠΉ
// ΠΈ ΡΡΡΠ΅ΠΌΠΈΡΡΡ ΠΎΡΡΠΎΠ»ΠΊΠ½ΡΡΡΡΡ ΠΎΡ Π½Π΅Π³ΠΎ. ΠΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ΅Π½ ΠΈΠΌΠΏΡΠ»ΡΡ ΠΏΠΎΠ±ΠΎΠ»ΡΡΠ΅
body.ApplyImpulse(node.rotation * Vector3(0.0f, 1.0f, 0.0f) * 15.0f);
}
}
ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΈ Π½Π°ΡΠ»Π°ΠΆΠ΄Π°Π΅ΠΌΡΡ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΏΡΠΎΠ±Π΅Π»Π° ΠΏΡΡΠΊΠ° Π½Π°Π΄ΡΠ²Π°Π΅ΡΡΡ ΠΈ ΠΈΠ·ΡΡΠ³Π°Π΅Ρ ΡΠ΄ΡΠ°.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ΄Π΅Π»Π°Π΅ΠΌ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΡΠ΄ΡΠ° ΠΏΠΎΡΠ»Π΅ Π΄Π΅ΡΡΡΠΈ ΡΠ΅ΠΊΡΠ½Π΄ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΠΌΠΎΡΠ½ΠΈΡΡΠΎΠΆΠ°Π»ΠΈΡΡ. Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π² ΠΏΠ°ΠΏΠΊΠ΅ GameData\Scripts
ΡΠ°ΠΉΠ» CannonBall.as
Ρ ΡΠ΅ΠΊΡΡΠΎΠΌ:
class Dying : ScriptObject
{
float time = 0.0f;
void Update(float timeStep)
{
time += timeStep;
if (time > 10.0f)
node.Remove();
}
}
ΠΠ°ΡΠ΅ΠΌ Π·Π°Π³ΡΡΠ·ΠΈΡΠ΅ ΠΏΡΠ΅ΡΠ°Π± GameData/Objects/Cannonball.xml
Π² ΡΡΠ΅Π½Ρ (File
->Load node
->As replicated/local...
), Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΠΊ Π½Π΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ScriptInstance
, ΡΠΊΠ°ΠΆΠΈΡΠ΅ Π½ΠΎΠ²ΠΎΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΡΠ°ΠΉΠ» ΠΈ Π²Π²Π΅Π΄ΠΈΡΠ΅ ΠΈΠΌΡ ΠΊΠ»Π°ΡΡΠ° Dying
(Π½Π΅ Π·Π°Π±ΡΠ΄ΡΡΠ΅ Π½Π°ΠΆΠ°ΡΡ Enter). Π’Π΅ΠΏΠ΅ΡΡ ΠΏΡΠ΅ΡΠ°Π± ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡ
ΡΠ°Π½ΠΈΡΡ ΠΈ ΡΠ΄Π°Π»ΠΈΡΡ ΡΠΎ ΡΡΠ΅Π½Ρ. ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅, ΠΊΠ°ΠΊ ΡΠ΄ΡΠ° ΠΈΡΡΠ΅Π·Π°ΡΡ.
ΠΠΎΠ±Π°Π²ΠΈΠΌ Π² ΡΡΠ΅Π½Ρ ΠΏΠΎΡΡΡΠΎΠΉΠΊΡ ΠΈΠ· ΠΊΡΠ±ΠΎΠ², ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΎΠ±ΡΡΡΠ΅Π»ΠΈΠ²Π°ΡΡ ΠΈΠ· ΠΏΡΡΠΊΠΈ. ΠΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΠΎ, ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΈΡΠ΅ ΠΌΠΎΠ΄Π΅Π»Ρ GameData/Models/Cube.mdl
Π½Π° ΠΊΠΎΡΠ½Π΅Π²ΡΡ Π½ΠΎΠ΄Ρ Scene
ΠΈ Π·Π°Π΄Π°ΠΉΡΠ΅ Π΅ΠΉ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π» GameData/Materials/Cube.xml
. Π’Π°ΠΊΠΆΠ΅ Π²ΠΊΠ»ΡΡΠΈΡΠ΅ ΠΎΠΏΡΠΈΡ Cast Shadows
. ΠΠΎΠ±Π°Π²ΡΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ RigidBody
(Mass
= 1, Friction
= 1, Rolling Friction
= 0.2) ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ CollisionShape
(Shape Type
= Box
, Size
= (2, 2, 2)
). Π Π°Π·ΠΌΠ΅ΡΡΠΈΡΠ΅ ΠΊΡΠ± Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π½Π°Π΄ Π·Π΅ΠΌΠ»Π΅ΠΉ (Π΅ΡΠ»ΠΈ Π²Ρ Π΅Π³ΠΎ ΠΏΠΎΠ³ΡΡΠ·ΠΈΡΠ΅ Π² Π·Π΅ΠΌΠ»Ρ, ΠΎΠ½ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΡΡΠ³ΠΈΠ²Π°ΡΡ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅). Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Π²ΡΠ΄Π΅Π»Π΅Π½Π° Π½ΠΎΠ΄Π°, Π° Π½Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ, ΠΈ Π½Π°ΠΆΠΌΠΈΡΠ΅ Ctrl+D Π΄Π»Ρ Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΡΠ±Π°, Π° Π·Π°ΡΠ΅ΠΌ ΡΠ΄Π²ΠΈΠ½ΡΡΠ΅ ΠΊΠΎΠΏΠΈΡ Π²Π±ΠΎΠΊ. Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π΅ΡΠ΅ ΠΎΠ΄Π½Ρ ΠΊΠΎΠΏΠΈΡ.
ΠΡΡΠ°ΡΠΈ, Π²Ρ ΠΎΠ±ΡΠ°ΡΠΈΠ»ΠΈ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π² ΠΎΠΊΠ½Π΅ Attribute inspector
Π²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ ΠΎΡ Π΄Π΅ΡΠΎΠ»ΡΠ½ΡΡ
, ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Ρ Π·ΠΎΠ»ΠΎΡΠΈΡΡΡΠΌ ΡΠ²Π΅ΡΠΎΠΌ?
Π’Π΅ΠΏΠ΅ΡΡ Π²ΡΠ΄Π΅Π»ΠΈΡΠ΅ Π²Π΅ΡΡ ΡΡΠ΄ ΠΊΡΠ±ΠΎΠ² Ρ Π·Π°ΠΆΠ°ΡΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ Ctrl ΠΈ ΠΏΡΠΎΠ΄ΡΠ±Π»ΠΈΡΡΠΉΡΠ΅ Π΅Π³ΠΎ ΡΠ΅Π»ΠΈΠΊΠΎΠΌ. ΠΠΎΠ΄Π½ΠΈΠΌΠΈΡΠ΅ ΠΊΠΎΠΏΠΈΡ Π½Π°Π΄ ΠΏΠ΅ΡΠ²ΡΠΌ ΡΡΠ΄ΠΎΠΌ (Π½Π΅ Π·Π°Π±ΡΠ²Π°ΠΉΡΠ΅ ΠΏΡΠΎ Π·Π°Π·ΠΎΡΡ). ΠΠ°ΡΠ΅ΠΌ ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΡΡΠ΄.
ΠΠ°ΠΏΡΡΡΠΈΡΠ΅. Π£ Π½Π°Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΡΠ°ΠΊΠ°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΡΡΠΎ ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΊΠ° ΠΊΡΠ±Ρ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠΏΡΡΠΊΠ°ΡΡΡΡ Π²Π½ΠΈΠ·, Π½ΠΎ Π²ΡΡΡΠ½ΡΡ Ρ Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΠΎΡΠ½ΠΎΡΡΡΡ Π²ΠΎΠ΄ΡΡΠ·ΠΈΡΡ ΠΈΡ
Π΄ΡΡΠ³ Π½Π° Π΄ΡΡΠ³Π° ΡΠ»ΠΎΠΆΠ½ΠΎ. Π ΡΡΡ Π½Π°ΠΌ Π½Π° ΠΏΠΎΠΌΠΎΡΡ ΠΏΡΠΈΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΠ΅Π»Ρ RevertOnPause
. ΠΡΠΊΠ»ΡΡΠΈΡΠ΅ Π΅Π³ΠΎ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΎΡΠΊΠ»ΡΡΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ScriptInstance
Ρ ΠΏΡΡΠΊΠΈ (ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΌΡ ΡΠ°Π½Π΅Π΅ Π²ΡΠΊΠ»ΡΡΠ°Π»ΠΈ Π½ΠΎΠ΄Ρ ΡΠ΅Π»ΠΈΠΊΠΎΠΌ, ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΠΏΠ΅ΡΡ ΡΡΠ»ΠΊΠ°ΠΉΡΠ΅ ΠΏΡΠ°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡΡΠΈ Π½Π΅ ΠΏΠΎ Π½ΠΎΠ΄Π΅, Π° ΠΏΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ; Π΄ΡΡΠ³ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ - Π½Π°ΠΆΠ°ΡΡ ΠΊΡΠ΅ΡΡΠΈΠΊ Π² ΠΎΠΊΠ½Π΅ Attribute inspector
).
Π’Π΅ΠΏΠ΅ΡΡ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΠΏΡΠΎΠΈΠ³ΡΡΠ²Π°Π½ΠΈΠ΅, Π° ΠΊΠΎΠ³Π΄Π° ΠΊΡΠ±Ρ ΡΠΏΠ°Π΄ΡΡ - ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅. Π‘ΡΠ΅Π½Π° ΠΎΡΡΠ°Π»Π°ΡΡ Π² Π½ΠΎΠ²ΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ. ΠΠ΅ Π·Π°Π±ΡΠ΄ΡΡΠ΅ ΡΠ½ΠΎΠ²Π° Π²ΠΊΠ»ΡΡΠΈΡΡ RevertOnPause
ΠΈ ScriptInstance
.
Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π΄Π»Ρ ΠΏΡΡΠ΅ΡΠ½ΡΡ
ΡΠ΄Π΅Ρ ΡΠ»Π΅ΠΉΡ ΠΈΠ· ΡΠ°ΡΡΠΈΡ. ΠΡΠΊΡΠΎΠΉΡΠ΅ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ ΡΠ°ΡΡΠΈΡ ΡΠ΅ΡΠ΅Π· ΠΏΡΠ½ΠΊΡ ΠΌΠ΅Π½Ρ View
->Particle editor
. ΠΠ°Π΄Π°ΠΉΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ:
Direction (min)
=(-0.1, -0.1, -0.1)
Direction (max)
=(0.1, 0.1, 0.1)
- ΡΡΠΈ Π΄Π²Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΡΠΊΠΎΡΠΎΡΡΡ ΡΠ°Π·Π»Π΅ΡΠ° ΡΠ°ΡΡΠΈΡ Π² ΡΠ°Π·Π½ΡΡ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡΡ (Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΠ°ΡΡΠΈΡΡ Π²ΡΠ±ΠΈΡΠ°Π΅ΡΡΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅)Particle Size (min)
=Particle Size (max)
=(0.3, 0.3)
- ΡΡΠ°ΡΡΠΎΠ²ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°ΡΡΠΈΡ Ρ Π²ΡΠ΅Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΉSize Add
=-0.8
- ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°ΡΡΠΈΡ ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΡΡΡNumber of Particles
=1000
- ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ ΡΠ°ΡΡΠΈΡEmission Rate (min)
=Emission Rate (max)
=80
- ΡΠ°ΡΡΠΎΡΠ° ΠΈΡΠΏΡΡΠΊΠ°Π½ΠΈΡ ΡΠ°ΡΡΠΈΡRelative Transform
=ΠΡΠΊΠ».
- ΡΡΠΎΠ±Ρ ΡΠ°ΡΡΠΈΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π»ΠΈΡΡ Π² ΠΌΠΈΡΠΎΠ²ΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°Ρ , Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠΉ Π½ΠΎΠ΄Ρ
Π’Π΅ΠΏΠ΅ΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π΄Π»Ρ ΡΠ°ΡΡΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ²Π΅ΡΠ° ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ. ΠΠ°ΠΆΠΌΠΈΡΠ΅ Π΄Π²Π° ΡΠ°Π·Π° Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ New
ΠΏΠΎΠ΄ Π±Π»ΠΎΠΊΠΎΠΌ Color Frames
, ΡΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ Π΄Π²Π΅ Π½ΠΎΠ²ΡΠ΅ ΡΡΡΠΎΠΊΠΈ ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΠΏΠΎΠ»Ρ ΠΊΠ°ΠΊ Π½Π° ΡΠΊΡΠΈΠ½ΡΠΎΡΠ΅ ΡΠ½ΠΈΠ·Ρ. ΠΠ΅ΡΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ - Π²ΡΠ΅ΠΌΡ, Π° Π΄Π°Π»ΡΡΠ΅ ΡΠ²Π΅Ρ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ RGBA.
ΠΠ°ΠΆΠΌΠΈΡΠ΅ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ Save As
, ΡΠΎΡ
ΡΠ°Π½ΠΈΡΠ΅ ΡΡΡΠ΅ΠΊΡ Π² ΡΠ°ΠΉΠ» GameData\Particle\Sparks.xml
ΠΈ Π·Π°ΠΊΡΠΎΠΉΡΠ΅ ΠΎΠΊΠ½ΠΎ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ° ΡΠ°ΡΡΠΈΡ. ΠΠ°Π³ΡΡΠ·ΠΈΡΠ΅ ΠΏΡΠ΅ΡΠ°Π± Ρ ΠΏΡΡΠ΅ΡΠ½ΡΠΌ ΡΠ΄ΡΠΎΠΌ Π² ΡΡΠ΅Π½Ρ, Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΠΊ Π½Π΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ParticleEmitter
(Create
->Component
->Geometry
), ΡΠΊΠ°ΠΆΠΈΡΠ΅ Π½ΠΎΠ²ΠΎΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΡΡΡΠ΅ΠΊΡ, ΡΠΎΡ
ΡΠ°Π½ΠΈΡΠ΅ ΠΏΡΠ΅ΡΠ°Π± Π² ΡΠ°ΠΉΠ» ΠΈ ΡΠ΄Π°Π»ΠΈΡΠ΅ ΠΏΡΡΠ΅ΡΠ½ΠΎΠ΅ ΡΠ΄ΡΠΎ ΡΠΎ ΡΡΠ΅Π½Ρ. ΠΠ³ΡΠ° Π³ΠΎΡΠΎΠ²Π°.
ΠΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ Π½Π΅ Π²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π΅ Π±ΡΠ»ΠΎ ΡΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈ ΡΠ»ΠΎΠ²Π° ΠΏΡΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΈΠ»ΠΈ ΠΏΡΠΎ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΎΠ². ΠΠ΄Π½Π°ΠΊΠΎ, ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ ΠΎΠ±ΡΠΈΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ, ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Ρ Π½ΠΈΠΌΠΈ Π½Π΅ ΡΠΎΡΡΠ°Π²ΠΈΡ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΡΡΡΠ΄Π°.
Π’Π΅ΠΏΠ΅ΡΡ Π½ΡΠΆΠ½ΠΎ ΠΎΡΠΎΡΠΌΠΈΡΡ ΠΈΠ³ΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ»Π°Π½ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎΠΉ: ΡΠΎΠ·Π΄Π°ΡΠΌ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΠΊΡΠΈΠΏΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΡΡΠ΅Π½Ρ. ΠΠΎ Π² ΡΡΠ΅Π½Π΅ Π½Π΅ Ρ
Π²Π°ΡΠ°Π΅Ρ ΠΊΠ°ΠΌΠ΅ΡΡ, Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π²Π½ΡΡΡΠ΅Π½Π½ΡΡ ΠΊΠ°ΠΌΠ΅ΡΠ° ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½Π° Π²Π½Π΅ Π΅Π³ΠΎ. ΠΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΠΎ, ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π½ΠΎΠ²ΡΡ Π½ΠΎΠ΄Ρ ΠΈ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΠΊ Π½Π΅ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Camera
(Create
->Component
->Scene
). ΠΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π·Π°Π΄Π°ΠΉΡΠ΅ Π½ΠΎΠ΄Π΅ ΠΈΠΌΡ Camera
, ΡΡΠΎΠ±Ρ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ ΠΊ Π½Π΅ΠΉ ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ Π² Π½Π°ΡΠ΅ΠΌ ΡΠΊΡΠΈΠΏΡΠ΅. Π Π°ΡΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅ ΠΈ ΠΏΠΎΠ²Π΅ΡΠ½ΠΈΡΠ΅ ΠΊΠ°ΠΌΠ΅ΡΡ ΠΊΠ°ΠΊ Π²Π°ΠΌ Π±ΠΎΠ»ΡΡΠ΅ Π½ΡΠ°Π²ΠΈΡΡΡ (Π² ΡΡΠΎΠΌ Π²Π°ΠΌ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π²ΠΈΠ΄ ΠΈΠ· ΠΊΠ°ΠΌΠ΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ Π² ΠΏΡΠ°Π²ΠΎΠΌ Π½ΠΈΠΆΠ½Π΅ΠΌ ΡΠ³Π»Ρ). Π’Π°ΠΊΠΆΠ΅ ΠΊ Π½ΠΎΠ΄Π΅ Ρ ΠΊΠ°ΠΌΠ΅ΡΠΎΠΉ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ SoundListener
(Create
->Component
->Audio
), Π±Π΅Π· ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π²Ρ Π½Π΅ ΡΡΠ»ΡΡΠΈΡΠ΅ ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½ΠΈΡΡΠ΅ΠΌΡΡ
Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ Π·Π²ΡΠΊΠΎΠ². Π‘ΠΎΡ
ΡΠ°Π½ΠΈΡΠ΅ ΡΡΠ΅Π½Ρ ΠΈ ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ°ΠΉΠ» GameData\Scripts\Main.as
ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ:
Scene@ scene_;
void Start()
{
scene_ = Scene();
// ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΡΡΠ΅Π½Ρ ΠΈΠ· ΡΠ°ΠΉΠ»Π°
scene_.LoadXML(cache.GetFile("Scenes/Level01.xml"));
// ΠΠ°Ρ
ΠΎΠ΄ΠΈΠΌ Π² ΡΡΠ΅Π½Π΅ Π½ΠΎΠ΄Ρ Ρ ΠΊΠ°ΠΌΠ΅ΡΠΎΠΉ
Node@ cameraNode = scene_.GetChild("Camera");
// Π£ΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ Π΄Π²ΠΈΠΆΠΊΡ, ΡΡΠΎ ΠΌΡ Ρ
ΠΎΡΠΈΠΌ ΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠ΅ΡΠ΅Π· ΡΡΡ ΠΊΠ°ΠΌΠ΅ΡΡ
Viewport@ viewport = Viewport(scene_, cameraNode.GetComponent("Camera"));
renderer.viewports[0] = viewport;
// ΠΠ°Π΄Π°Π΅ΠΌ Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ΅Π½Π΅Π²ΡΡ
ΠΊΠ°ΡΡ, ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΈ Π±ΡΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΡΠΊΠΈΠ΅
renderer.shadowMapSize = 2048;
// Π£ΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ Π΄Π²ΠΈΠΆΠΊΡ ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊ Π·Π²ΡΠΊΠ°, ΡΠ΅ΡΠ΅Π· ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ Ρ
ΠΎΡΠΈΠΌ ΡΠ»ΡΡΠ°ΡΡ
audio.listener = cameraNode.GetComponent("SoundListener");
}
Π‘ΠΊΠΎΠΏΠΈΡΡΠΉΡΠ΅ ΠΏΠ°ΠΏΠΊΡ CoreData
, Π»Π°ΡΠ½ΡΠ΅Ρ Urho3DPlayer.exe
ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ d3dcompiler_47.dll
Π² ΠΏΠ°ΠΏΠΊΡ Ρ ΠΈΠ³ΡΠΎΠΉ. Π Π±Π°ΡΠ½ΠΈΠΊ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° Start.bat
Ρ Π½Π°Ρ ΡΠΆΠ΅ Π΅ΡΡΡ (ΠΈΠ· Π°ΡΡ
ΠΈΠ²Π° assets.zip
). ΠΠ½ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π»Π°ΡΠ½ΡΠ΅ΡΡ ΠΏΠ°ΠΏΠΊΠΈ, Π² ΠΊΠΎΡΠΎΡΡΡ
ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ ΡΠ΅ΡΡΡΡΡ ΠΈΠ³ΡΡ, ΡΠ°Π·ΠΌΠ΅ΡΡ ΠΎΠΊΠ½Π° ΠΈ ΡΡΠ°ΡΡΠΎΠ²ΡΠΉ ΡΠΊΡΠΈΠΏΡ.
start "" Urho3DPlayer.exe Scripts/Main.as -p "GameData;CoreData" -w -x 800 -y 600
ΠΡΠΎΠ³ΠΎΠ²ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² ΡΡΠΎΠΌ ΠΆΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ Π² ΠΏΠ°ΠΏΠΊΠ΅ result
.
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌ Π²ΡΠ΅ ΡΠΊΡΠΈΠΏΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ScriptCompiler.exe GameData/Scripts/*.as
. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠ°ΠΉΠ»Ρ Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡΠΌΠΈ .asc. ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΡΠ΅ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠ΅ .as ΡΠ°ΠΉΠ»Ρ ΠΈΠ· ΠΏΠ°ΠΏΠΊΠΈ GameData\Scripts
Π² Π΄ΡΡΠ³ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ, ΠΎΡΡΠ°Π²ΠΈΠ² ΡΠΎΠ»ΡΠΊΠΎ .asc ΡΠ°ΠΉΠ»Ρ.
ΠΠ»Ρ ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ Π½Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ ΡΡΠΈΠ»ΠΈΡΠ° build_vs\bin\tool\PackageTool.exe
. ΠΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
PackageTool.exe -pc CoreData CoreData.pak
PackageTool.exe -pc GameData GameData.pak
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ p
ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΡΠΊΠΏΠ°ΠΊΠΎΠ²ΠΊΡ. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ c
Π°ΠΊΡΠΈΠ²ΠΈΡΡΠ΅Ρ ΡΠΆΠ°ΡΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² (ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΊΠΎΡΠΎΡΡΠ½ΠΎΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ LZ4).
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠ°ΠΏΠΊΠΈ CoreData
ΠΈ GameData
ΠΌΠΎΠΆΠ½ΠΎ ΡΠ±ΡΠ°ΡΡ. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΈΠΌΠ΅Π΅ΠΌ:
ΠΡ ΠΈ ΡΡΠΎΠ±Ρ Π±ΡΠ»ΠΎ ΡΠΎΠ²ΡΠ΅ΠΌ ΠΊΡΠ°ΡΠΈΠ²ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π±Π°Π²ΠΈΡΡΡΡ ΠΎΡ ΠΏΠ°ΠΊΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Start.bat
. ΠΠΎ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π½ΡΠΆΠ½ΠΎ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ Π»Π°ΡΠ½ΡΠ΅ΡΠ° (ΠΎΠ½ Π² ΠΏΠ°ΠΏΠΊΠ΅ Urho3D\Source\Tools\Urho3DPlayer
). ΠΠ΅ ΡΡΠΎΠΈΡ ΠΏΡΠ³Π°ΡΡΡΡ Π·Π°ΡΠ°Π½Π΅Π΅ - ΠΈΡΡ
ΠΎΠ΄Π½ΠΈΠΊ Π»Π°ΡΠ½ΡΠ΅ΡΠ° ΠΎΡΠ΅Π½Ρ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΠΉ, Π²Π΅Π΄Ρ ΠΎΠ½ Π·Π°Π½ΠΈΠΌΠ°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π·Π°ΠΏΡΡΠΊΠ° Π² Π΄Π²ΠΈΠΆΠΎΠΊ. ΠΠΎΡ ΡΡΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π²Π°ΠΌ ΠΈ Π½ΡΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ. ΠΠ°ΠΎΠ΄Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈ ΡΠ²ΠΎΠΉ Π·Π½Π°ΡΠΎΠΊ Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ΄Π΅Π»Π°ΡΡ.
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΡΡΠΎΠΊ: ΠΠ³ΡΡ Π²ΡΠ΅ΡΡΡΠ·.
Π‘ΡΠ°ΡΠ°Ρ Π²Π΅ΡΡΠΈΡ ΡΡΠΎΠΊΠ°: https://github.com/1vanK/Urho3DHabrahabr02.