Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

გზამკვლევი: ველორენში სპრიტების დამატება

\_ დამზადებულია @Pfau-ს მიერ

სურათი1

რაც გჭირდებათ

  • თქვენი არჩევანის IDE (პროგრამა, რომელიც საშუალებას გაძლევთ ნახოთ და შეცვალოთ კოდი)

მაგალითები: VSC, Atom, Notepad++

  • Voxel Editor (სპრაიტის მოდელის შესაქმნელად)

მაგალითი: Magicavoxel

დაწყება

სანამ შექმნით თქვენს სპრიტებს, რამდენიმე რამ უნდა იცოდეთ:

  • სპრაიტები მოქმედებენ როგორც ლანდშაფტის ზომის ბლოკები, რომლებიც იცვლება მცირე ზომის მოდელებით.
    მათი დაყენება შესაძლებელია ჰაერის მსგავსად (შეჯახების გარეშე) ან მყარ ობიექტებად.

  • ბალახის მსგავს ნივთებს არ უნდა ჰქონდეს შეჯახება. მიუხედავად იმისა, რომ საშინელებები და ფანჯრები უნდა.

  • ამ დროისთვის ისინი ყოველთვის იმოქმედებენ როგორც ერთი რიგის სამი ლანდშაფტის ბლოკი (33 მცირე მასშტაბის ვოქსელი) ერთმანეთზე ზემოთ. ეს ნიშნავს, რომ თქვენ შეგიძლიათ აკონტროლოთ თქვენი სპრაიტის შეჯახების სიმაღლე, მაგრამ არა სიგანე.
    სპრაიტის ყველა ნაწილი, რომელიც აღემატება ერთი ბლოკის x და y ღერძის საზღვრებს, არ იკვრება ფიგურებთან და ობიექტებთან.

  • Sprites მოქმედებენ როგორც უძრავი ობიექტები, როგორიცაა ბლოკები. მათი გადაადგილება შეუძლებელია, როგორც ფიგურები ან საგნები.

  • Sprites შეიძლება დაყენდეს ისე, რომ მოთამაშეებს მისცეს გარკვეული ნივთი, როდესაც აიღებენ.

  • სპრაიტებს შეიძლება ჰქონდეთ ქვირითობისა და ორიენტაციის გარკვეული წესები.

დასახელების სქემა .vox ფაილებისთვის

  • ცალკეული სიტყვები იყოფა ქვედა ხაზით (_)
  • დათვლა იწყება ნულიდან.
  • რიცხვებს ემატება ერთი ტირე (-) მათ წინ.
  • თქვენი მოდელის სახელი ყოველთვის უნდა მთავრდებოდეს ნომრით, გარდა იმ შემთხვევისა, როდესაც აბსოლუტურად დადებითი არ ხართ, რომ არ იქნება ნივთის ალტერნატიული ვერსია/დიზაინი

მოდელის იმპორტი და დაამატეთ კოდის ბაზაში

assets/voxygen/voxel/sprite_manifest.ron

აქ თქვენ განსაზღვრავთ რამდენი ვარიაცია შეიძლება ჰქონდეს თქვენს სპრაიტს, რამდენად ირხევა ის ქარში და რომელი მოდელი(ები) ჩაიტვირთოს აქტივების საქაღალდეებიდან.

common/src/terrain/sprite.rs

აქ თქვენ განსაზღვრავთ სპრაიტების თვისებებს, როგორიცაა შეჯახება, ორიენტაცია, მათი “შეჯახების ჩარჩოს” სიმაღლე ან მათი შეგროვება.

ეტაპობრივად: მაგალითის სპრაიტის დამატება

  1. **ვოქსელის მოდელის დამატება **

assets/voxygen/voxel/sprite_manifest.ron-ში დააკოპირეთ და ჩასვით კოდის ერთ-ერთი ბლოკი, მაგ.:

        Window1: Some((
          variations: [
              (
                  model: "voxygen.voxel.sprite.window.window-0",
                  offset: (-5.5, -5.5, 0.0),
                  lod_axes: (1.0, 1.0, 1.0),
              ),
          ],
          wind_sway: 0.0,
        )),
      ```

... და დააყენეთ იგი ფაილის ბოლო ჩანაწერის უკან, დარწმუნდით, რომ დატოვეთ ბოლო `)` ფაილის ბოლოს.
შეცვალეთ ობიექტის სახელი (მაგ., `Window1`), იმ სახელით, რომელიც გსურთ დაარქვათ თქვენს ობიექტს (სახელში ინტერვალი არ არის).

შემდეგ დაამატეთ თქვენი .vox მოდელი `assets/voxygen/voxel/sprite/`-ში, ან შესაბამის ქვესაქაღალდეში ან შექმენით ახალი საქაღალდე, თუ ის სხვაგან არ ჯდება. მაგალითად, თუ თქვენი სპრაიტი ავეჯის ნაწილია, დაამატეთ ის `furniture` ქვესაქაღალდეში. მიჰყევით ამ გვერდზე ადრე ნახსენები .vox ფაილების დასახელების სქემას.

ახალ კოდბლოკში, რომელიც ჩასვით, შეცვალეთ `model` განყოფილება, რათა მიუთითოთ თქვენს .vox ფაილზე; დარწმუნდით, რომ შეინახეთ ორმაგი ბრჭყალები და მძიმები ბოლოს. ზემოთ მოცემულ მაგალითში, ფაილი `window-0.vox` დაემატა `window` ქვესაქაღალდეს და მოდელი განისაზღვრა როგორც `"voxygen.voxel.sprite.window.window-0",`
  
შემდეგი, მოდელის ცენტრი წერტილი უნდა განისაზღვროს `offset` განყოფილებაში. თქვენს voxel რედაქტორში დააყენეთ სამუშაო სივრცე თქვენს მოდელზე. თუ იყენებთ MagicaVoxel-ს, ამისათვის დააჭირეთ ღილაკს "მორგებული მოდელის ზომა". სამუშაო სივრცე შემცირდება, რათა მოერგოს თქვენს მოდელს. ცენტრის წერტილი არის x და y ღერძების ბლოკების რაოდენობის ნახევარი. მაგალითად, Windows1 კოდბლოკში ზემოთ, მოდელი არის 11 x 11 ბლოკი. ასე რომ, ჩვენ შევიყვანეთ `-5.5, -5.5` x-ღერძისთვის და y-ღერძისთვის, შესაბამისად. დააყენეთ z-ღერძი `0.0`-ზე, თუ მოდელი არ არის ჩაძირული მიწაში (მაგ., მადანი).

`lod_axes` ეხება ობიექტის დეტალების დონეს რაც უფრო შორს არის იგი მოთამაშისგან. დეტალების დონის შემცირება, როდესაც ობიექტი შორს არის, ეხმარება თამაშის შესრულებას. ეს პარამეტრი ეუბნება თამაშს, როგორ გააფართოვოს დეტალების შემცირების დონე სამივე ღერძზე (x, y, z). ამ დროისთვის, უბრალოდ გამოიყენეთ 1.0 სამივე ღერძისთვის, როგორიცაა Windows1 ზემოთ მოყვანილი მაგალითი, ან იპოვეთ თქვენი მსგავსი ობიექტი და დააკოპირეთ მისი lod_axes მნიშვნელობები.

თუ თქვენი სპრაიტი შექმნილია ქარში რხევისთვის (მაგ., ბალახი ან ყვავილები), შეცვალეთ `wind_sway` რიცხვი 0.0-დან 1.0-მდე. რაც უფრო მაღალია ეს რიცხვი მით უფრო ირხევა. გადახედეთ ზოგიერთ სხვა ობიექტს, რომ მიიღოთ წარმოდგენა იმის შესახებ, თუ რა მნიშვნელობა უნდა გამოიყენოთ.

2. **თამაშს უთხარით, რომ სპრაიტი არსებობს და გახადოთ ის მყარი **

`common/src/terrain/sprite.rs`-ში

ფაილის დასაწყისთან ახლოს, მოძებნეთ ობიექტების გრძელი სია ყოველი ობიექტის შემდეგ თექვსმეტობითი რიცხვით (მაგ., 0x0A). ამ სიაში ობიექტების სახელი ემთხვევა წინა საფეხურზე მოცემულ სახელს. მაგალითად, წინა ეტაპზე ჩვენ ვუყურებდით `Window1`-ს. ობიექტების სიაში აქ ვიპოვით `Window1 = 0x28,`.

თქვენი ობიექტის ამ სიაში დასამატებლად გადადით ქვემოთ ამ სიის ბოლოში (ის საკმაოდ გრძელია). სიის **END**-ზე დაამატეთ თქვენი ობიექტის სახელი და მიეცით მას შემდეგი თექვსმეტობითი რიცხვის მნიშვნელობა თანმიმდევრობით.

> _ რჩევა: თექვსმეტობითი რიცხვები მერყეობს 0-დან 15-მდე, მაგრამ ორნიშნა რიცხვები წარმოდგენილია ასოებით: 0 1 2 3 4 5 6 7 8 9 A B C D E F. დააკვირდით, როგორ არის 10 სინამდვილეში A, 11 არის B და ა.შ. ასე რომ, თუ სიაში ბოლო ობიექტს აქვს 0xB9 მნიშვნელობა, შემდეგი ობიექტი უნდა იყოს 0xBA. (0xB9 + 1 = 0xBA). თუ დახმარება გჭირდებათ, შეგიძლიათ ჩაწეროთ `0xB9 + 1` Google-ში და ის გეტყვით პასუხს._

შემდეგი, თუ თქვენი სპრაიტი მყარია და მოთამაშეები მას უნდა შეეჯახონ, თქვენ უნდა დაამატოთ ის ფუნქციას სახელად `pub fn solid_height`. მოძებნეთ ეს ფუნქცია `sprite.rs` ფაილში. ეს ფუნქცია ეუბნება თამაშს, თუ რა სიმაღლის უნდა იყოს ობიექტის შეჯახების ყუთი. თქვენ შეგიძლიათ გამოტოვოთ ეს, თუ თქვენი სპრაიტი არ არის გამიზნული, რომ შეჯახება მოხდეს და მოთამაშეებმა უნდა გადაადგილდნენ მასში (მაგალითად, ბალახი და ყვავილები).

ფუნქციის ფარგლებში ნახავთ ობიექტების გრძელ სიას, რომელიც ასე გამოიყურება: `SpriteKind::Tomato => 1.65,`. გადადით ამ სიის ბოლოში და დაამატეთ თქვენი სპრაიტი ბოლოს. თქვენ უნდა გამოთვალოთ რა რიცხვის მნიშვნელობა უნდა მივანიჭოთ თქვენს სპრაიტს. ეს რიცხვი უბრალოდ არის თქვენი სპრაიტის სიმაღლე ვოქსელებში გაყოფილი 11-ზე. მაგალითად, თუ თქვენი ვოქსელის მოდელი არის 18 ვოქსელი სიმაღლის, გაანგარიშება არის 18/11 = 1.64. თქვენ შეგიძლიათ იპოვოთ თქვენი მოდელის სიმაღლე ვოქსელის რედაქტორში გადასვლით და ბლოკების რაოდენობის დათვლით.

_შენიშვნა: 3.0 არის მაქსიმალური მნიშვნელობა, რომელიც შეიძლება მოხვდეს ამ სიაში. თუ წინა საფეხურზე განისაზღვრა სპრაიტის მრავალი ვარიაცია, ისინი ყველა იზიარებენ ერთსა და იმავე სიმაღლეს._

ბოლოს, `pub fn has_ori` ფუნქციაში დაამატეთ თქვენი სპრაიტი სიის ბოლოს. მიჰყევით უკვე არსებულ მაგალითებს და არ დაივიწყოთ `|` დასაწყისში (მაგ., `| SpriteKind::Window1`). ამ ფუნქციაში თქვენი სპრაიტის დამატება საშუალებას მისცემს მას შემობრუნდეს (ორიენტირებული) კოდით, როდესაც ის მსოფლიოში ჩნდება.

3. **სხვა თვისებები სპრაიტისთვის**

გარდა იმისა, რომ მყარია, სპრაიტები ასევე შეიძლება იყოს კოლექციური ან დასამუშავებელი.

საკოლექციო სპრაიტი შეიძლება აიღოს სამყაროდან მოთამაშის მიერ (მაგ. ქვები). ან შეიძლება მოთამაშემ გახსნას მისგან ამოღებული ნივთით (მაგ., ზარდახშა).

მოპოვებადი სპრაიტი საჭიროებს მაინინგის ხელსაწყოს შეგროვებამდე (მაგ., მადანი).

ნაბიჯები, რომლებიც საჭიროა სპრაიტების კოლექციური ან დამუშავების გასაკეთებლად, ზედმეტად ჩართულია ამ გვერდისთვის და საჭიროა ცალკე სახელმძღვანელოში განხილვა.

თუმცა, მათთვის, ვისაც სურს ჩასწვდეს კოდს და თავად გაარკვიოს, აქ არის რამდენიმე მითითება, რომ დაიწყოთ.

- დაამატეთ სპრაიტი `pub fn collectible_id`-ში `common/src/terrain/sprite.rs`-ში.
- თუ სპრაიტი საჭიროებს მაინინგს, დაამატეთ იგი `pub fn mine_tool`-ში `common/src/terrain/sprite.rs`-ში.
- თუ თქვენი სპრაიტი გამიზნულია გასახსნელად და მოთამაშეს მისცემს ნივთს, მიჰყევით კოლოფებისა და ზარდახშების მაგალითებს `common/src/terrain/sprite.rs`-ში. ეს მოიცავს .ron ფაილის შექმნას `assets/common/loot_tables`-ში.
- თუ თქვენი სპრაიტი უნდა შეგროვდეს და მოხვდება მოთამაშის ინვენტარში:
- შექმენით .ron ფაილი თქვენი კოლექციური სპრაიტისთვის `assets/common/items`-ის ქვესაქაღალდეში და გამოიყენეთ მაგალითი, რომელიც ყველაზე მეტად ემთხვევა იმას, რასაც აკეთებს თქვენი სპრაიტი (მაგ., საკვები).
- დაამატეთ თქვენი ნივთი `assets/voxygen/item_image_manifest.ron`-ში. თქვენ ასევე დაგჭირდებათ თქვენი voxel მოდელის ფაილის ასლის დამატება სხვა საქაღალდეში, რომელიც განსაზღვრულია ამ მანიფესტში. იპოვეთ ნივთი, რომელიც ყველაზე მეტად ჰგავს თქვენსას და გამოიყენეთ იგი, როგორც მაგალითი.
- დაამატეთ თქვენი ელემენტი `assets/voxygen/voxel/item_drop_manifest.ron` შესაბამის განყოფილებაში მსგავსი ელემენტებით.
- დაამატეთ თქვენი ელემენტი `common/src/states/sprite_interact.rs` სექციაში `fn from(sprite_kind: SpriteKind) -> Self`.

# სპრაიტების დამზადება მსოფლიოში

Sprites ჩნდება სამყაროში კოდის საშუალებით, ვიდრე ხელით განთავსდეს. ეს ნიშნავს, რომ იმისათვის, რომ თქვენი ახალი სპრაიტი იქცეს იქ, სადაც აპირებთ (მაგ., სახლში, მინდორში, დუნდულში და ა.შ.), თქვენ უნდა შეგეძლოთ კოდის შეცვლა.

მაგრამ... თუ თქვენ ეძებთ სწრაფ გზას, რომ ნახოთ, როგორ გამოიყურება თქვენი სპრაიტი თამაშში, კოდირების გარეშე, არსებობს უფრო მარტივი გზა, რომ გაოცდეთ თქვენი ხელებით. ეს სასარგებლოა იმის შესამოწმებლად, არის თუ არა თქვენი სპრაიტი სწორი ზომის, მაგალითად.

- თქვენ უნდა შეადგინოთ კოდი, რომელიც აქამდე დაწერეთ ზემოთ მოცემულ ნაბიჯებში. არის სახელმძღვანელოს [სხვა ნაწილები](/contributors/compiling.md), რომლებიც განმარტავს, თუ როგორ უნდა გააკეთოთ ეს, მაგრამ არსებითად თქვენ აკრიფეთ: `cargo run`
- _რჩევა: ნუ გაგიკვირდებათ, თუ თქვენი კომპილი შეცდომით ვერ მოხერხდა, ეს ჩვეულებრივ მხოლოდ ბეჭდვითი შეცდომაა. დააკვირდით თქვენს მიერ დაწერილ კოდს, ნახეთ, არის თუ არა აშკარა შეცდომები და საჭიროების შემთხვევაში გაიმეორეთ ზემოთ მოცემული ნაბიჯები_.
- იპოვნეთ და დაიმახსოვრეთ სპრაიტის სახელი, რომელიც თქვენ შექმენით 1-ელ საფეხურზე ზემოთ. ჩვენ ვიყენებდით `Window1` როგორც მაგალითად.
- როგორც კი თქვენი ადგილობრივი ასლი შედგენილია და გაშვებულია, დაიწყეთ ერთი მოთამაშის თამაში.
- თამაშში აკრიფეთ: `/make_sprite YourSpriteName` ჩაანაცვლეთ სიტყვა "YourSpriteName" თქვენი სპრაიტის სახელით 1-ლი ნაბიჯით.
- მაგალითი: `/make_sprite Window1`
- შენი სპრაიტი გაჩნდება იქ, სადაც შენი პერსონაჟი დგას. ჰუზა!

თუ გსურთ გადახვიდეთ შემდეგ დონეზე და დაინახოთ, რომ თქვენი სპრაიტი სწორად ჩნდება მსოფლიოში, თქვენ უნდა დაიბინძუროთ ხელები Rust კოდირებით. ეს სცილდება ამ გვერდის ფარგლებს, მაგრამ აქ მოცემულია რამდენიმე რჩევა დასაწყებად:

- `world/src/layer/scatter.rs` შეიცავს კოდს ისეთი ნივთებისთვის, როგორიცაა ყვავილები, ყლორტები, ქვები და ა.შ. ყველაფერი, რაც "მიმოფანტულია" გარემოში შემთხვევით.
- `world/src/site2/plot/house.rs`შეიცავს სახლებში არსებულ ავეჯს, როგორიცაა მაგიდები, საწოლები და ხალათების თაროები.
- სხვა მაგალითებისთვის მიმოიხედე `world/src/`.
- Veloren Discord სერვერზე #new-contributors არხი კარგი ადგილია კითხვების დასმისთვის.

**გილოცავთ Veloren-ს ახალი სპრაიტის დამატებას!**