Cannot cast from source type to destination type ERROR!

#pragma strict

var Effect : Transform;
var TheDammage = 100;

function Update () {
	
	var hit : RaycastHit;
	var ray : Ray = Camera.main.ScreenPointToRay(Vector3(Screen.width*0.5, Screen.height*0.5, 0));
	
	if (Input.GetMouseButtonDown(0))
	{
		if (Physics.Raycast (ray, hit, 100))
		{
			var particleClone = Instantiate(Effect, hit.point, Quaternion.LookRotation(hit.normal));
			Destroy(particleClone.gameObject, 2);
			hit.transform.SendMessage("ApplyDammage", TheDammage, SendMessageOptions.DontRequireReceiver);
		}
	}
	
}

using UnityEngine;
using System.Collections;

public class RayCastShoooting : MonoBehaviour {

	public GameObject Effect;

	public float damage;

	// Update is called once per frame
	void Update () {

		RaycastHit hit = new RaycastHit ();
		Ray ray = camera.ScreenPointToRay(new Vector3(Screen.width/2, Screen.height/2, 0));
		if(Input.GetMouseButtonDown(0))
		{
			if(Physics.Raycast(ray, out hit, 100))
			{
				GameObject particleClone = (GameObject)Instantiate(Effect, hit.point, Quaternion.identity);
				Destroy (particleClone.gameObject, 2);
				hit.transform.SendMessage("ApplyDamage", damage, SendMessageOptions.DontRequireReceiver);
			}
		}
	}
}

I’m translating the to JavaScript to C# but I get this error:
InvalidCastException: Cannot cast from source type to destination type.
RayCastShoooting.Update () (at Assets/Scripts/RayCastShoooting.cs:19)

In C# the code you are looking for is:

GameObject particleClone = Instantiate(Effect, hit.point, Quaternion.identity) as GameObject;

Change your code as follows:

if (Physics.Raycast (ray, hit, 100)) {
         var particleClone = Instantiate(Effect, hit.point, Quaternion.LookRotation(hit.normal)) as GameObject;
         Destroy(particleClone, 2);
         hit.transform.SendMessage("ApplyDammage", TheDammage, SendMessageOptions.DontRequireReceiver);
}

It is the ‘as GameObject’ that fixes your error. In addition, you don’t need the ‘.gameObject’ in the Destory() call.