Unity Fare İmlecini Kullanarak Sert Cisim Nasıl Sürüklenir

Rigidbodys'ü fare imleciyle sürüklemek için, bir Kameraya eklenecek bir komut dosyası oluşturma yapmamız gerekir ve herhangi bir Rigidbody'nin tıklanıp tıklanmadığını tespit eder, eğer öyleyse, sürükleme hareketini başlatacaktır.

Sharp Coder Video oynatıcı

SC_DragRigidbody.cs

using UnityEngine;

public class SC_DragRigidbody : MonoBehaviour
{
    public float forceAmount = 500;

    Rigidbody selectedRigidbody;
    Camera targetCamera;
    Vector3 originalScreenTargetPosition;
    Vector3 originalRigidbodyPos;
    float selectionDistance;

    // Start is called before the first frame update
    void Start()
    {
        targetCamera = GetComponent<Camera>();
    }

    void Update()
    {
        if (!targetCamera)
            return;

        if (Input.GetMouseButtonDown(0))
        {
            //Check if we are hovering over Rigidbody, if so, select it
            selectedRigidbody = GetRigidbodyFromMouseClick();
        }
        if (Input.GetMouseButtonUp(0) && selectedRigidbody)
        {
            //Release selected Rigidbody if there any
            selectedRigidbody = null;
        }
    }

    void FixedUpdate()
    {
        if (selectedRigidbody)
        {
            Vector3 mousePositionOffset = targetCamera.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, selectionDistance)) - originalScreenTargetPosition;
            selectedRigidbody.velocity = (originalRigidbodyPos + mousePositionOffset - selectedRigidbody.transform.position) * forceAmount * Time.deltaTime;
        }
    }

    Rigidbody GetRigidbodyFromMouseClick()
    {
        RaycastHit hitInfo = new RaycastHit();
        Ray ray = targetCamera.ScreenPointToRay(Input.mousePosition);
        bool hit = Physics.Raycast(ray, out hitInfo);
        if (hit)
        {
            if (hitInfo.collider.gameObject.GetComponent<Rigidbody>())
            {
                selectionDistance = Vector3.Distance(ray.origin, hitInfo.point);
                originalScreenTargetPosition = targetCamera.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, selectionDistance));
                originalRigidbodyPos = hitInfo.collider.transform.position;
                return hitInfo.collider.gameObject.GetComponent<Rigidbody>();
            }
        }

        return null;
    }
}

Kurmak

Artık Rigidbody'leri fare imleciyle sürükleyebilirsiniz!

Önerilen Makaleler
Unity'nin Rigidbody Bileşeniyle Çalışmak
Unity'de Sert Cisim Mıknatısı Oluşturmak için C# Komut Dosyası
Unity'de 2D Grappling Hook'u Uygulamak
Unity'e Zıplayan Top Fiziği Ekleme
Unity'de Bayrak Simülasyonu Oluşturma
Unity Oyununda Madencilik Mekaniklerini Uygulamak
Unity'de Kod Kullanarak Çarpışmaları Tespit Etme