News

News
HomeNews
Discord - შემოგვიერთდი
RoadmapFAQ

Tech Blog 2 - ვიზუალური ეფექტების ორკესტრაცია

Gurami · 1 year ago · Tech

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


მაგალთად, პერსონაჟი A აყენებს ძიანს B-ს, C-ბარათის გამოყენებით. აბსტრაქტულ დონეზე ეს ქმედება გამოიყურება ესე:
B(სიცოცხლის ძალა) - A(შემტევი ძალა)


მარტივია არა? ნამდვილად.


რეალობაში ეხლა ამ ყველაფერს ემატება რა? ბარათის ანიმაცია რომლითაც ხდება ქმედება, პერსონაჟი ვინც ზიანს აყენებს ხომ რაღაცას უნდა აკეთებდეს? ვინც ზიანს იღებს?

თავიდან პროექტში დავამატე ბიბლიოთეკა DOTween Pro რომ ვიზუალურად "რამე" მაინც გამეკეთებინა. ესე გამოიყურება ძემოდხსენებულის კოდი:

public class CardMb
    {
        public void ActivateOn(CharacterMb target)
        {
            // Animate cards text to fade out colour
            cardTexts.ForEach(t =>

            {
                t.DOColor(Color.clear, 0.3f);
            });


            // Animate card sprite renderers text to fade out colour
            cardSpriteRenderers.ForEach(sr =>

            {
                sr.DOColor(Color.clear, 0.3f);
            });


            // Animate card to increase in size
            gameObject.transform.DOScale(new Vector3(1.25f, 1.25f, 0), 0.3f);

            // Animate character that issued attack
            sourceCharacter.transform.DOLocalMoveX(1, 0.1f)
                .OnComplete(() =>
                {
                    sourceCharacter.transform.DOLocalMoveX(0, 0.1f);
                });


            // Animate character that received attack
            target.transform.DOLocalMoveX(0.5f, 0.1f)
                .OnComplete(() =>
                {
                    target.transform.DOLocalMoveX(0, 0.1f);
                });
        }
    }

შედეგი:


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


DOTween ბუნებრივია, მსგავსს არაფერს აკეთებს, ეს მხოლოდ tweening ბიბლიოთეკაა. ადრე მქონდა თვალი მოკრული ბიბლიოთეკისთვის FEEL, და მახსოვდა რომ თითქოს ზუსტად იმას აკეთებს რაც მჭირდება.


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

public class CardMb
    {
        public void ActivateOn()
        {
            useCardFeedback.PlayFeedback();
            sourceCharacterAttackFeedback.PlayFeedback();
            targetCharacterReceiveDamageFeedback.PlayFeedback();
        }
    }


მარტივია არა? თუმცა უნდა ითქვას რომ სირთულე არსად არ გამქრალა, მან უბრალოდ სხვა ადგილას, Editor-ში, გადაინაცვლა:



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



© 2024 9 Mountains Studio
🤜🤛 ManaKeep
HomeNewsDiscord - შემოგვიერთდიRoadmapFAQ