سكربت تحويل جاذبية كرة إلى جاذبية مثل الكواكب


الكل شاهد تلك الألعاب الجميلة، الك الألعاب التي نرى فيها كوكب صغير أو مجموعة من الكواكب، ولها جاذبية الخاصة بها وكأنها كواكب حقيقية، أي أن الأجسام لا تسقط إلى الأسفل بل يمكن للجسم أن يسير على سطح الكوكب على جميع إتجهاته بدون أن يسقط إلى أسفل، وهنا نعرض لكم هذا السكربت البسيط الذي يمكنكم من خلاله أضافته إلى أي كرة في اللعبة لتحولها إلى كرة أرضية تجذب كل الأجسام أليها، الأجسام الذي تحمل نفس سكربت بالطبع.
 

 
 
وطريقة أستخدام هذا السكربت البسيط هو عبر أضافته إلى الأجسام في لعبتك، ثم أضافة '' Rigidbody   ''  لتلك الأجسام وألغاء العلامة على أستخدام الجاذبية في ''  Rigidbody'' وكذلك تكبير قيمة الوزن بها، مع جعل قيمة وزن الأرض أو الكوكب الأساسي هي الأكبر.
والأن مع عرض الكود الخاص بالسكربت:






using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Attractor : MonoBehaviour {

const float G = 667.4f;

public static List<Attractor> Attractors;

public Rigidbody rb;

void FixedUpdate ()
{
foreach (Attractor attractor in Attractors)
{
if (attractor != this)
Attract(attractor);
}
}

void OnEnable ()
{
if (Attractors == null)
Attractors = new List<Attractor>();

Attractors.Add(this);
}

void OnDisable ()
{
Attractors.Remove(this);
}

void Attract (Attractor objToAttract)
{
Rigidbody rbToAttract = objToAttract.rb;

Vector3 direction = rb.position - rbToAttract.position;
float distance = direction.magnitude;

if (distance == 0f)
return;

float forceMagnitude = G * (rb.mass * rbToAttract.mass) / Mathf.Pow(distance, 2);
Vector3 force = direction.normalized * forceMagnitude;

rbToAttract.AddForce(force);
}

}



والسكربت تقوم فكرة عملة بأنشاء مصفوفة من كائنات اللعبة والتي تحمل نفس السكربت، تم يقوم بتحديد مكانها في المشهد أي في عالم اللعبة، وبعد ذلك يقوم بحساب قوة الجذب عبر تلك المعادلة" float forceMagnitude = G * (rb.mass * rbToAttract.mass) / Mathf.Pow(distance, 2); " ، وبعد هذا يقوم بأحتساب القوة الجذب تلك وأتجاهها المحسوب في "  Vector3 force = direction.normalized * forceMagnitude;" لأحتساب أتجاه تلك القوة، ثم في النهاية نمرر الناتج إلي " rbToAttract.AddForce(force); " لأعطاء قوة حركية للجسم في أتجاه الكرة الريسية في لعبتنا أي إلى الكوكب المراد.

إرسال تعليق

0 تعليقات