Tech Blog 2 - ვიზუალური ეფექტების ორკესტრაცია
·შემდეგი მნიშვნელოვანი საკითხი რაც მოსაგვარებელი იყო ეს არის ვიზუალური მხარის ორქესტრაცია. სადაა მაგის ადგილი, როგორ გავაკეთო?
მაგალთად, პერსონაჟი 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" რაც იტერაციის სიჩქარეს ბუნებრივია გაზრდის.