ইউনিটির নির্দিষ্ট বস্তুর প্রতি মাধ্যাকর্ষণ কীভাবে পরিবর্তন করবেন?


14

আমার Unক্যতে দুটি ক্ষেত্র রয়েছে। একটি আকারে 1000x অন্য আকারের 1x। সুতরাং আমি চাই ছোট ক্ষেত্রটি বৃহত গোলকের প্রতি আকৃষ্ট হোক। সুতরাং আমি এটি কিভাবে না। আমি জানি যে এটি দৃv়তার সাথে বদ্ধ শরীর ব্যবহার করে মহাকর্ষের মধ্য দিয়ে নেমে যেতে পারে। তবে আমি কীভাবে বৃহত্তর গোলকের দিকে মাধ্যাকর্ষণ কোণটি পরিবর্তন করব?

উত্তর:


19

ইউনিটি ফিজিক্স ইঞ্জিনের গ্র্যাভিটি কেবল এক দিকে চলে যায় এবং সম্পাদনা-> প্রকল্প সেটিংস মেনুতে পদার্থবিজ্ঞানের মেনুতে নিয়ন্ত্রিত হয়।

এখানে চিত্র বর্ণনা লিখুন

আপনি যদি এটি ব্যতীত অন্য কিছু করতে চান তবে আপনাকে নিজের মাধ্যাকর্ষণ বাস্তবায়ন করতে হবে।

মূলত, আপনি মহাকর্ষের কেন্দ্র হতে চান এমন বস্তুর উপরে আপনি একটি গোলক সংঘটিত করতে পারেন। আপনি যে জিনিসটিকে সেই বস্তুর মাধ্যাকর্ষণ দ্বারা প্রভাবিত করতে চান সেখানে ক্লেইডারটি পুরো অঞ্চলটি ঘিরে রাখতে হবে। যখনই কোনও বস্তু এই "প্রভাবের ক্ষেত্রের" সাথে সংঘর্ষিত হয় আপনি এটিতে একটি বল প্রয়োগ করেন। আপনি যতক্ষণ প্রভাবের ক্ষেত্রের মধ্যে থাকেন ততক্ষণ আপনি এটিতে একটি শক্তি প্রয়োগ করা চালিয়ে যান।

মহাকর্ষীয় ধ্রুবকটি আপনি ব্যবহার করতে পারেন তবে আপনি বাস্তব বিশ্বে গণনার জন্য ব্যবহৃত আদর্শ হ'ল:

এফ = জিএম 1 এম 2 / আর 2

এটি বানান:

বল = মহাকর্ষীয় ধ্রুবক * বস্তুর 1 * ভর 2 * বস্তুর ভর / দুটি বস্তুর মধ্যে দূরত্ব বর্গক্ষেত্র।

মনে রাখবেন যে মহাকর্ষীয় ধ্রুবক 9.81 নয়। এটাই পৃথিবীর তলদেশে মহাকর্ষের ফলে ঘটে যাওয়া ত্বরণ।


1

মহাকর্ষ সমীকরণ অবলম্বন করার দরকার নেই। মহাকর্ষের কারণে ত্বরণ গণের নির্বিশেষে ধ্রুবক, সুতরাং আপনি যা করতে চান তা হ'ল প্রতিটি ছোট ফ্রেমের দিকে আপনার ছোট ছোট বস্তুগুলিকে ত্বরান্বিত করা।

কোডটি এরকম কিছু দেখাচ্ছে:

public void FixedUpdate()
{
    rigidbody.velocity += gravitationalAcceleration * Time.fixedTime * (largeObject.transform.position - transform.position);
}

1

প্রকৃতপক্ষে, আমি বর্তমানে মাধ্যাকর্ষণ চার্জ ভিত্তিক একটি গেমের উপর কাজ করছি: সহজভাবে, আপনি আপনার খেলোয়াড়কে এলিপ্যাটিক কক্ষপথ এবং স্লিংশট এফেক্টের মাধ্যমে স্থানান্তরিত করতে তারা স্থাপন করেন। আমি মাধ্যাকর্ষণ অক্ষম করেছি এবং এই কোডটি ব্যবহার করেছি:

using UnityEngine;
using System.Collections;

public class PlanetGrav : MonoBehaviour {

    //Declare Variables:

//Strength of attraction from your sphere (obviously, it can be any type of game-object)
    public float StrengthOfAttraction;

//Obviously, you won't be using planets, so change this variable to whatever you want
    GameObject planet;

    //Initialise code:
    void Start () 
    {
        //Again, you can change the tag to whatever you want.
        planet = GameObject.FindGameObjectWithTag("Planet");
    }

    //Use FixedUpdate because we are controlling the orbit with physics
    void FixedUpdate () {
        //Declare Variables:

    //magsqr will be the offset squared between the object and the planet
        float magsqr;

        //offset is the distance to the planet
        Vector3 offset;

        //get offset between each planet and the player
        offset = planet.transform.position - transform.position;

            //My game is 2D, so  I set the offset on the Z axis to 0
            offset.z = 0;

            //Offset Squared:
            magsqr = offset.sqrMagnitude;

            //Check distance is more than 0 to prevent division by 0
            if (magsqr > 0.0001f)
            {
//Create the gravity- make it realistic through division by the "magsqr" variable

rigidbody2D.AddForce((StrengthOfAttraction * offset.normalized / magsqr) * rigidbody2D.mass);
            }
        }
    }
}

পিএস কোডটি মূলত সমস্ত গ্রহের একটি অ্যারের মধ্য দিয়ে লুপ করা হয়েছিল: এটি সম্পাদিত এবং তাই পুরোপুরি সঠিক নাও হতে পারে। যদিও এটি ঠিক আছে।


0

আমি জিরো-জি ভিত্তিক একটি অনুরূপ প্রকল্পে কাজ করছি, যেখানে মহাকর্ষ এবং তড়িচ্চুম্বকীয় উভয় শক্তি তাদের আয়তনের, ঘনত্ব, ভর, শক্তি এবং পরিবাহিতার উপর ভিত্তি করে তৈরি করতে এবং প্রতিক্রিয়া জানাতে আমার সমস্ত গেম অবজেক্টগুলির প্রয়োজন। আমি স্ক্রিপ্টিংয়ের তুলনায় তুলনামূলকভাবে নতুন, তবে এটি আমার জন্য একটি 3D স্পেসে কাজ করার জন্য উপরের স্ক্রিপ্টে কয়েকটি পরিবর্তন করেছি (যতক্ষণ না মাধ্যাকর্ষণ সম্পর্কিত ... প্রায় ...):

using UnityEngine;
using System.Collections;

public class DynamicWeightAnalysis : MonoBehaviour {

//Declare Variables:
//BBB adding volume calculations
//NOPE
//BBB adding density (...does nothing yet...)
public float density;

//BBB NOPE!

//Strength of attraction from your game-object, ideally this will be derived from a calculation involving the objects volume and density, but for now it's entered from the inspector)
public float RelativeWeight;

//BBB Here, we name our target object (s)
GameObject blockALPHA;

//Initialise code:
void Start () 
{
    //BBB here, we define our target object by searching for its tag (setup in editor)
    blockALPHA = GameObject.FindGameObjectWithTag("Block ALPHA");
}

//Use FixedUpdate because we are controlling the orbit with physics
void FixedUpdate () {
    //Declare Variables:

    //magsqr will be the offset squared between the object and the planet
    float magsqr;

    //offset is the distance to the planet
    Vector3 offset;

    //get offset between each planet and the player
    offset = blockALPHA.transform.position - transform.position;

    //Offset Squared:
    magsqr = offset.sqrMagnitude;

    //Check distance is more than 1 to prevent division by 0 (because my blocks are all 1x1x1 so, any closer than 1 and they'd be intersecting)
    if (magsqr > 1f)
    {
        //Create the gravity- make it realistic through division by the "magsqr" variable

        GetComponent<Rigidbody>().AddForce((RelativeWeight * offset.normalized / magsqr) * GetComponent<Rigidbody>().mass);
    }
}
}

আপনি দেখতে পাচ্ছেন যে, আমি এখনও এটিতে কাজ করছি, মূলত আমার এখন পর্যন্ত সমস্ত সংযোজন, "বিবিবি" দিয়ে টীকাযুক্ত, এখনও আমার মতো কাজ করছে না। তবে এটি যেহেতু দাঁড়িয়েছে, এটি আমার "ব্লক ALPHA" অবজেক্টগুলিকে 3 ডি-তে অন্য "ব্লক ALPHA" অবজেক্টের সাথে মোটামুটি অনুমানযোগ্য উপায়ে আন্তরিকতার সাথে ইন্টারঅ্যাক্ট করতে দেয়। (যদিও, দুটি বা ততোধিক ব্লক স্থাপন করার পরে, সর্বশেষটি সর্বদা "আকর্ষক" এবং সংঘর্ষ না হওয়া পর্যন্ত স্থির থাকবে which আমি যা নিয়ে কাজ করছি ... সাহায্যের প্রশংসা করা হবে :)) আশা করি এটি সহায়তা করে ..


1
আপনি যদি কোনও প্রশ্ন জিজ্ঞাসা করতে চান তবে এটি একটি প্রশ্ন হিসাবে পোস্ট করুন, দয়া করে আপনার উত্তরে এটি কবর দেবেন না।

আমার খারাপ, এটি যত্ন নেওয়ার জন্য ধন্যবাদ, আবার আর ঘটবে না :)
Vinny রিয়েল হার্ড কালি ভিন্স

0

একটি চেনাশোনা সংঘর্ষক সহ গ্রহ / বৃহত গোলক করুন, এটি একটি শিশু দিন give এখন, গ্রহটি হয় হয় গ্রহ বা স্থির মহাজাগতিক বস্তু ট্যাগ করা উচিত, এবং সন্তানের প্রভাব অঞ্চল হিসাবে লেবেল করা উচিত। এখন ছোট অবজেক্টের একটি কঠোর লোক এবং একটি গোলকের একটি আইস ট্রিগার সহ থাকা উচিত।

এন্টার / এন্টেরস্টে ট্রিগার সহ গ্রহে একটি স্ক্রিপ্ট রাখুন, যদি এটি প্রভাবের ক্ষেত্র হয় তবে এটির দিকে টানা উচিত।

অন্যথায় আপনি এটি অন্য উপায়ে করতে পারেন। তবে যে কোনও ক্ষেত্রে এটি সম্ভবত আরও ভাল হবে যেহেতু আপনি সম্ভবতঃ মহাকর্ষীয় টানাকে গ্রহ থেকে অন্য গ্রহে আলাদা করতে চান।


-2

অন্যেরা যা বলেছিল, unityক্যের উপর মহাকর্ষ কেবল একটি নির্দিষ্ট দিকের দিকে, সুতরাং সম্ভবত আপনার পরিবর্তে মহাকর্ষ পুরোপুরি অক্ষম করা উচিত এবং এমন একটি বাহিনী স্ক্রিপ্ট করা উচিত যা ছোট গোলকটিকে বিশাল দিকে নিয়ে যায়।


-2

আপনি যদি নির্দিষ্ট বিমানের জন্য মাধ্যাকর্ষণ পরিবর্তন করতে চান তবে আপনি এই স্ক্রিপ্টটি বিমানের সাথে সংযুক্ত করতে পারেন।

using UnityEngine;

public class ChangeGavityToThisObject : MonoBehaviour
{

    private Quaternion rot;
    private Vector3 gravityValue;

    void Start()
    { 
        gravityValue = Physics.gravity;      
    }

    void Update()
    {
        rot = GetComponent<Transform>().rotation;
        Physics.gravity = rot * gravityValue;
    }
}

গেটকম্পোনেন্ট আপডেটে রয়েছে, কারণ আমি এই বিমানটি গেমটিতে রোটেশন পরিবর্তন করার সম্ভাবনা তৈরি করতে চাই।


1
এটি বিশ্ব মহাকর্ষের দিক পরিবর্তন করে। শুধু একটি বস্তুর জন্য নয়।
ফিলিপ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.