is this C# or js ?

I found the code on internet i want to use as a base and for learning as i want to make something similar to it.

The question is if i put code into js or C# folder i get errors on both so i dont know which one is it.

public class HeldObject : MonoBehaviour {

    public bool IsColliding { get; private set; }

    private void OnCollisionEnter(Collision collision)
        IsColliding = true;

    private void OnTriggerStay(Collider other)
        IsColliding = true;

    private void OnCollisionExit(Collision collision)
        IsColliding = false;

public class PlayerPick : MonoBehaviour
    // Maximum distance from the camera at which the object can be picked up
    public float MaxPickDistance;
    public float ThrowStrength = 10;
    public float HeldObjectFollowStrength = 50;

    private Player _player;
    private Camera _playerCam;
    private GameObject _pivot;

    private HeldObject _heldObject; // physical avatar
    private GameObject _heldBodyAvatar; // visual avatar
    private float _heldBodyAngularDrag;

    private RaycastHit? _raycast;

    private void Start()
        _player = Player.Instance;
        _playerCam = Player.Camera;
        _pivot = Player.PickPivot;

    private void Update()
        if (Input.GetKeyDown(KeyCode.E))
            if (!_heldObject)
        if (Input.GetMouseButton(0) && _heldObject)

    private void Raycast()
        _raycast = null;
        const int layerMask = 1 << 8;
        var raycastHits = Physics.RaycastAll(_playerCam.transform.position, _playerCam.transform.forward,
                                             MaxPickDistance, ~layerMask);
        foreach (var hit in raycastHits)
            if (hit.collider == _player.collider || !hit.collider.rigidbody) // avoid colliding with the player object itself
            _raycast = hit;

    private void HoldObject()
        if (!_heldObject)
        // Drag the physical avatar by changing its velocity
        _heldObject.rigidbody.velocity = HeldObjectFollowStrength * (_pivot.transform.position - _heldObject.transform.position);
        // When the physical avatar collides, we move the visual one to the same position. When this doesn't happen,
        // move the visuals back to the pivot point.
        _heldBodyAvatar.transform.position = _heldObject.IsColliding
            ? _heldObject.transform.position
            : _pivot.transform.position;
        // If the physical avatar is colliding with something, change visuals rotation to correspond
        if (_heldObject.IsColliding)
            _heldBodyAvatar.transform.rotation = _heldObject.transform.rotation;

    private void TakeObject()
        if (!_raycast.HasValue)

        var heldBody = _raycast.Value.rigidbody;
        heldBody.transform.position = _pivot.transform.position;
        heldBody.useGravity = false;

        _heldBodyAngularDrag = heldBody.angularDrag;
        heldBody.angularDrag = 1; // so that the object doesn't continue rotating after each collision
        heldBody.renderer.enabled = false;
        _heldObject = heldBody.gameObject.AddComponent<HeldObject>();

        _heldBodyAvatar = new GameObject("Held body avatar");
        _heldBodyAvatar.transform.parent = _playerCam.transform;
        _heldBodyAvatar.transform.position = _pivot.transform.position;
        _heldBodyAvatar.transform.rotation = heldBody.transform.rotation;
        _heldBodyAvatar.transform.localScale = heldBody.transform.localScale;
        _heldBodyAvatar.AddComponent<MeshFilter>().sharedMesh = heldBody.gameObject.GetComponent<MeshFilter>().sharedMesh;
        _heldBodyAvatar.AddComponent<MeshRenderer>().sharedMaterial = heldBody.gameObject.renderer.sharedMaterial;

        Physics.IgnoreCollision(heldBody.collider, Player.Controller, true);

    private void ReleaseObject(Action onRelease = null)
        Physics.IgnoreCollision(_heldObject.collider, Player.Controller, false);
        _heldObject.rigidbody.useGravity = true;
        _heldObject.rigidbody.angularDrag = _heldBodyAngularDrag;
        _heldObject.rigidbody.transform.position = _heldBodyAvatar.transform.position;
        _heldObject.rigidbody.transform.rotation = _heldBodyAvatar.transform.rotation;
        _heldObject.rigidbody.renderer.enabled = true;
        _heldBodyAvatar.renderer.enabled = false;
        if (onRelease != null)
        _heldObject = null;

    private void ThrowObject()
        ReleaseObject(() => _heldObject.rigidbody.AddForce(_playerCam.transform.forward * ThrowStrength, ForceMode.Impulse));

That is C#.

My recommendation for avoiding errors is to separate that one script into 2. You have 2 MonoBehaviours which will give an error even in C#.

Also, my 2 cents, I usually use little parts from an example code to see what it does instead of copying and pasting the entire thing. Copying/ Pasting usually gives me undesirable results and more headaches.