'how to destroy an object in unity

how to destroy an object in unity? I know you have to type the command Destroy(); but what I'm saying is that I don't know what to put between brackets. I have tried many different ways: public GameObject motor; Destroy(motor); but it does not work

    using System.Collections;
    using UnityEngine;

    public class LogRotation : MonoBehaviour
    {

        [System.Serializable] //this will allow us to edit it in the editor
        //a custom class representing a single rotation "element" of the log's rotation pattern
        private class RotationElement
        {
            //to get rid of an obnoxious warning about these fields not being initialized
    #pragma warning disable 0649
            public float Speed;
            public float Duration;
    #pragma warning restore 0649
        }

        [SerializeField] //attribute making private fields editable in the Unity Editor
        //the aforemention full rotation pattern of the log
        private RotationElement[] rotationPattern;

        //this will be set to the Wheel Joint 2D from the LogMotor object
        private WheelJoint2D wheelJoint;
        //something has to actually apply a force to the log through the Wheel Joint 2D
        private JointMotor2D motor;

        private void Awake()
        {
            //setting fields
            wheelJoint = GetComponent<WheelJoint2D>();
            motor = new JointMotor2D();
            //starting an infinitely looping coroutine defined below right when this script loads (awakes)
            StartCoroutine("PlayRotationPattern");
        }

        private IEnumerator PlayRotationPattern()
        {
            int rotationIndex = 0;
            //infinite coroutine loop
            while (true)
            {
                //working with physics, executing as if this was running in a FixedUpdate method
                yield return new WaitForFixedUpdate();

                motor.motorSpeed = rotationPattern[rotationIndex].Speed;
                //hard coded 10000, feel free to experiment with other torques if you wish
                motor.maxMotorTorque = 10000;
                //set the updated motor to be the motor "sitting" on the Wheel Joint 2D
                wheelJoint.motor = motor;

                //let the motor do its thing for the specified duration
                yield return new WaitForSecondsRealtime(rotationPattern[rotationIndex].Duration);
                rotationIndex++;
                //infinite loop through the rotationPattern
                rotationIndex = rotationIndex < rotationPattern.Length ? rotationIndex : 0;
            }
        }
    }



Solution 1:[1]

TLDR; Destroy(motor.gameObject), but it will not work if JointMotor2D doesn't inherit MonoBehaviour.


Destroy(obj) can be used to destroy a component too.
You need reference it to the game-object to destroy it.

Destroy(GetComponent<RigidBody>()) would remove the RigidBody out of the game-object, rather than removing the object itself.

Destroy(motor.gameObject) should do the trick.

But upon seeing your code, it may not.
As it seems like JointMotor2D isn't a MonoBehaviour, aka it doesn't exists in the game-world, hence you can't destroy it.

Depending on what your trying to destroy, you have to find a reference to it.
Simplest way is to reference it in the inspector. Or destroy itself if that is already the object you want to destroy:

// Drag-drop the object in the inspector
[SerializeField] 
private GameObject toDestroyLater;

private void DestroyObject() {
    Destroy(toDestroyLater);

    // Destroys self
    // (Aka, whatever game-object this script is attached to)
    Destroy(this.gameObject);
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Kaynnc