გადაიტანეთ ობიექტი სცენაზე. დაამატეთ კომპონენტი ობიექტში. ობიექტს უნდა ჰქონდეს ერთი კოლაიდერი და ერთი ხისტი სხეული აქვს. ხისტი კორპუსი დაყენებული უნდა იყოს კინემატიკზე. ეს ნიშნავს, რომ ობიექტი არ მოძრაობს ფიზიკის სიმულაციაში, თუ ის არ არის გადაადგილებული სკრიპტით.
გააქტიურეთ სიმულაციური და გამოიყენეთ სრული კინემატიკური კონტაქტები.
ძირითადი კლასი განსაზღვრულია სკრიპტში და უზრუნველყოფს გრავიტაციის მუშაობას. დაამატეთ PhysicsObject კომპონენტად. აირჩიეთ ახალი სკრიპტი და გახსენით Create and Add-ით. ორჯერ დააწკაპუნეთ და გახსენით სკრიპტი ვიზუალურ რედაქტორში.
რადგან ის ფიზიკაა, დაამატეთ FixedUpdate ფუნქცია:
void FixedUpdate ()
FixedUpdate ფუნქციის ფარგლებში, ობიექტი უნდა გადაადგილდეს ქვემოთ თითოეულ ჩარჩოზე, რადგან ის მიზიდულია ქვევით გრავიტაციით.
ამიტომ ჩვენ გვჭირდება ცვლადი სიჩქარისთვის:
დაცული Vector2 სიჩქარე;
სხვა კლასები იყენებენ ფიზიკურ ობიექტს. თქვენ უნდა გქონდეთ წვდომა მასზე, მაგრამ არა განსაზღვრული კლასის გარედან.
სიმძიმის გავლენა შეიძლება იქონიოს: ამისათვის საჭიროა სიმძიმის მნიშვნელობა:
float gravity gravityModifier = 1f;
გრავიტაციის მნიშვნელობა გამოიყენება Unity– ის ფიზიკურ სისტემაში. ყველაფერი კეთდება Time.deltaTime– ით; მრავლდება და ეკუთვნის FixedUpdate:
სიჩქარე + = gravityModifier * ფიზიკა 2D. Gravity * Time.deltaTime;
ახლა განისაზღვრება, თუ სად მდებარეობს ობიექტი გრავიტაციის ზემოქმედების შემდეგ:
vector2 deltaPosition = სიჩქარე * Time.deltaTime;
მოძრაობისთვის გამოიყენება ახალი პოზიცია:
Vector2 ნაბიჯი = Vector2.up * deltaPosition.y;
სხვა ფუნქცია განისაზღვრება:
ბათილი მოძრაობა (ვექტორი 2 ნაბიჯი)
ახლა დამატება ხდება FixedUpdate- ში: ობიექტი უნდა გადავიდეს გამოთვლილი მნიშვნელობების საფუძველზე:
მოძრაობა ();
ეს უნდა მოხდეს Rigidbody2D საფუძველზე:
დაცული Rigidbody2D rb2d;
ასევე არსებობს OnEnable ();
rb2d = GetComponent ();
მოძრაობის ფუნქციაში მითითებულია, რომ მოძრაობა ხდება თითოეულ ჩარჩოში:
rb2d.position) rb2d.position + move;
გრავიტაციის მქონე ობიექტის დასრულებული სკრიპტი ასე გამოიყურება:
თუ შეინახავთ სკრიპტს და დაუბრუნდებით Unity- ს, ობიექტი იშლება, როდესაც დააჭირეთ ღილაკს play.