Help!! Dynamically create 3D text doesn't work

Hi Pros,
Basically what I am doing is really simple – just wanna a text field where user can l leave their comments and when they drag around the 3d model, those comments which preivous users hv left will pop out at where the 3d model be placed.
I use playerpref to save comments users left. It is like a small and simple database in local app.
And anybody has some better solution to achieve this feature?
Save data and display it in local.
And If it is better to translate the text to 3D text.

Update!!! I have worked out some code, but still does not work. Could someone have a look and tell me what is going wrong?

void Update () {
        Plane targetPlane = new Plane(transform.up, transform.position);
        //message.text = "";
        foreach (Touch touch in Input.touches) {
            //Gets the ray at position where the screen is touched
            Ray ray = Camera.main.ScreenPointToRay(touch.position);
            //Gets the position of ray along plane
            float dist = 0.0f;
            //Intersects ray with the plane. Sets dist to distance along the ray where intersects
            targetPlane.Raycast(ray, out dist);
            //Returns point dist along the ray.
            Vector3 planePoint = ray.GetPoint(dist);
            //Debug.Log("Point=" + planePoint);
            //True if finger touch began. If ray intersects collider, set pickedObject to transform of collider object
            if (touch.phase == TouchPhase.Began) {
                 //Struct used to get info back from a raycast
                 RaycastHit hit = new RaycastHit();
                 if (Physics.Raycast(ray, out hit, 1000)) { //True when Ray intersects colider. If true, hit contains additional info about where collider was hit
                     pickedObject = hit.transform;
                     lastPlanePoint = planePoint;
                 } else {
                     pickedObject = null;
                 }
            //Move Object when finger moves after object selected.
            } else if (touch.phase == TouchPhase.Moved) {
                 if (pickedObject != null) {
                     pickedObject.position += planePoint - lastPlanePoint;
                     lastPlanePoint = planePoint;
                 }
            //Set pickedObject to null after touch ends.
            } else if (touch.phase == TouchPhase.Ended) {
                 
                 
                Debug.Log(PlayerPrefs.GetString(count+n));
                myText= objText.GetComponent( typeof (TextMesh)) as TextMesh;
                objText.AddComponent(typeof (MeshRenderer));
                objText.transform.position=pickedObject.position;
                objText.transform.parent = gameObject.transform;
                myText.text = PlayerPrefs.GetString(count+Random.Range(0,n));
                pickedObject = null;
            }
        }
         
   }
    void OnGUI() {
        //if(targetsFound && mShowScreen){
        GUI.Window(0,new Rect((Screen.width/2)-100,(Screen.height/2)-100,500,500),Comt,"Type your comments");
        //}
    }
    void Comt(int id){
        // set the text field for user to type their comments
        comments=GUI.TextArea(new Rect(20,80,450,200),comments);
        GUI.Label(new Rect(50,70,350,30),"Drag to see others' comments");
        //GUI.Label(new Rect (20, 300, 60, 30), "Nickname");
        //name= GUI.TextField (new Rect(80,300,100,80),name);
        if (GUI.Button(new Rect(240,320,80,30),"OK")){
            PlayerPrefs.SetString(count+n,comments); // save the comment to playerprefs
         
            //Debug.LogWarning(PlayerPrefs.GetString(name));
            comments= "";
            //name= "";
                        n++;
        }
        if (GUI.Button(new Rect(100,320,80,30),"Back"))
        {
            mShowScreen = false;
        }

Thx soooooo much!

Help~!! Anyone plz give a shoot!!! plzzzzz~~ Thx
Much appreciate!!!