Unity 4.0 mesh duplication possible?

I need a code to duplicate mesh without original mesh disappearing.
is it possible? how?

Update:
Full Code

#pragma strict

var Test : Transform;

var Nyil : Transform;
var NyilStorage = new Array();

var hit : RaycastHit;
var curhit : RaycastHit;

var hSliderOldValue : int[] = new int[10] ;
var hSliderValue : int[] = new int[10] ;

var Vertices : Vector3[];

private var a = new Array("Models","Morph","Vertices");
private var b = new Array("Number");
private var c = new Array("Id","Mod","DirX" ,"DirY" ,"DirZ","Target");
var LD : String[,,] = new String[0,0,0];

var MousePos : Vector2;
var ScreenPosV : Vector2;
var SelNyil : int;

function Start () {
	XML.OpenXML("Modules/" + "Modul"  );
	LD = XML.ReadXMLAdv(a,b,c);
	TestNewObj();
	
}

function Update () {
	
	SelectObject();
}


function OnGUI(){
//print(hit.collider);
	if (GUI.Button(Rect(0,0,50,20),"press") ){
		Vertices = (hit.collider as MeshCollider).sharedMesh.vertices; 
		print((hit.collider as MeshCollider).sharedMesh.vertices[0]);
		for(var i = 1;i<LD.GetLength(1);i++){
			Vertices[ parseInt(LD[0,i,0]) ] = Vertices[ parseInt(LD[0,i,0]) ] + Vector3.up ;
			print(i);
			
		}
		(hit.collider as MeshCollider).sharedMesh.vertices = Vertices;
	}

	MorphSlider();
	
	if (GUI.changed){
		for(i = 0;i<hSliderValue.length;i++){
			if(hSliderOldValue _!= hSliderValue*){*_

hSliderOldValue = hSliderValue*;*
* NyilRePos(i);*
* //print("Changed " + i);*
* } *
* }*
* }*

}

function SelectObject(){

* if(Input.GetMouseButtonUp(0)){*
* if (Physics.Raycast (camera.ScreenPointToRay(Input.mousePosition), curhit)){*
// print(curhit.collider.name + " " + (curhit.collider as MeshCollider).sharedMesh );
* if (curhit.collider != null || (curhit.collider as MeshCollider).sharedMesh != null ){*
* if(hit.collider != curhit.collider && curhit.collider.name != “Arrow(Clone)”){*
* hit=curhit;*
* NyilDestroy();*
* NyilInit();*

* }*

* }*
* }*
* }*
* if(Input.GetMouseButton(0)){*
* if(Input.GetMouseButtonDown(0)){*
* SelNyil = -1;*
* if (Physics.Raycast (camera.ScreenPointToRay(Input.mousePosition), curhit)){*

* print(“ar”);*
* if( curhit.collider.name == “Arrow(Clone)”){*
* var screenPosA : Vector3 = camera.WorldToScreenPoint (curhit.transform.position);*
* var screenPosB : Vector3 = camera.WorldToScreenPoint (hit.transform.position);*
* ScreenPosV = (Vector2( screenPosA.x,screenPosA.y ) - Vector2( screenPosB.x, screenPosB.y )).normalized ;*
* MousePos = Vector2(Input.mousePosition.x,Input.mousePosition.y) ;*
* SelNyil = (curhit.transform.GetComponent(“Destroy”) as Destroy).Count ;*
* //print(ScreenPosV + " mp: " + MousePos);*
* //print(“a”);*
* }*

* }} *
// print(SelNyil);
* if(SelNyil != -1){*
* var MousePosCurr : Vector2 = Vector2(Input.mousePosition.x,Input.mousePosition.y) ;*
_ var NewSliderPos : int = hSliderOldValue[SelNyil] + Mathf.CeilToInt( ((MousePosCurr.x - MousePos.x) /30 * ScreenPosV.x ) + ( (MousePosCurr.y - MousePos.y) /30 * ScreenPosV.y) );
* hSliderValue[SelNyil] = (NewSliderPos < 0) ? 0 : NewSliderPos ;
NyilRePos(SelNyil);*_

* }*
* }*
* if(Input.GetMouseButtonUp(0)){*
* if(SelNyil != -1){*
* hSliderOldValue[SelNyil] = hSliderValue[SelNyil];*
* }*
* }*
}

function MorphSlider(){

* for( var i = 0;i<LD.GetLength(0) ;i++){*
hSliderValue = GUI.HorizontalSlider(Rect(0,0 + i22,80,20), hSliderValue, 0, 10 );*
_ GUI.Label(Rect(85,0 +i22,80,20),hSliderValue + " Morph"+ i.ToString() );
}*_

}

function NyilInit(){

* for(var i =0;i<LD.GetLength(0);i++){*
* var pos = Vector3( parseInt(LD[i,0,2]) , parseInt(LD[i,0,3]) , parseInt(LD[i,0,4]) );*
_ NyilStorage.Add( Instantiate(Nyil,hit.collider.transform.position + pos, Quaternion.LookRotation(pos*-1 )) );
* ((NyilStorage[NyilStorage.length-1] as Transform).GetComponent(“Destroy”) as Destroy).SetCount(i);
}*_

}

function NyilDestroy(){

* for (var value : Transform in NyilStorage) {*
* (value.GetComponent(“Destroy”) as Destroy).SelfDestroy();*
* }*
* NyilStorage.Clear();*

}

function NyilRePos(i){
_ //print("value " + i +"pos: " + Vector3( parseInt(LD[i,0,2]) , parseInt(LD[i,0,3]) , parseInt(LD[i,0,4])) * (hSliderOldValue*+1) );_
(NyilStorage _as Transform).position = hit.collider.transform.position + Vector3( parseInt(LD[i,0,2]) , parseInt(LD[i,0,3]) , parseInt(LD[i,0,4])) * (hSliderValue+1);*_

}

function TestNewObj(){

* var m = new Mesh();*
m.name = “Scripted_Plane_New_Mesh”;

// var MeshSource : Mesh = Test.GetComponent(MeshFilter).mesh;

/*
var ver : Vector3[] = Test.GetComponent(MeshFilter).mesh.vertices;
var tri : int[] = Test.GetComponent(MeshFilter).mesh.triangles;
var uv : Vector2[] = Test.GetComponent(MeshFilter).mesh.uv;
var norm : Vector3[] = Test.GetComponent(MeshFilter).mesh.normals;

m.vertices = ver;
m.triangles = tri;
m.uv = uv;
m.normals = norm;
_ */_

var obj : GameObject = new GameObject(“New_Plane_Fom_Script”, MeshRenderer, MeshFilter, MeshCollider);

obj.GetComponent(MeshFilter).mesh = Instantiate(Test.GetComponent(MeshFilter).mesh);//m;
obj.GetComponent(MeshCollider).mesh = Instantiate(Test.GetComponent(MeshFilter).mesh);// m;
obj.GetComponent(“Renderer”).renderer.material = Resources.Load(“Materials/Default2”) as Material;

// MeshFilter mf = GetComponent();
// mf.mesh = (Mesh)Instantiate(mf.mesh);

}

Use Instantiate():

MeshFilter mf = GetComponent<MeshFilter>();
mf.mesh = (Mesh)Instantiate(mf.mesh);

Hi , you should be able to do this with a simply one liner, clone the mesh, and assign it back to the shared mesh, this will effectively break the instance, and you can make any changes to the vertices, and it will only affect that instance, of the skinnedmeshrenderer.

myRenderer.sharedMesh = (Mesh) Instantiate( myRenderer.sharedMesh );