x


LookAt and Prefabs not working properly, Looks in entirely wrong direction

So essentially, I have a cube that is in the game to start with. When I click, a prefab called MouseMarker is created at the location of the click. I want it so that if the MouseMarker exists, the cube looks at it. Heres the code I have to make the cube look at the MouseMarker:

var myTransform : Transform;

function Update () {

    if(GameObject.Find("MouseMarker"))
    {
       transform.LookAt(myTransform);
    // transform.Translate(Vector3(0,0,-0.5));
    }


}

And heres the code I have to create the MouseMarker:

var thePrefab : GameObject;
public var point: Vector3;

function Update(){
       if (Input.GetMouseButtonUp(0)){
         var hit: RaycastHit;
         var ray = Camera.main.ScreenPointToRay(Input.mousePosition);

         if (Physics.Raycast(ray, hit)){
          point = hit.point;

          if(GameObject.Find("MouseMarker")){
              Destroy(GameObject.Find("MouseMarker"));
              Instantiate(thePrefab, Vector3(point.x, point.y+0.5, point.z), transform.rotation);
          }else{
              Instantiate(thePrefab, Vector3(point.x, point.y+0.5, point.z), transform.rotation);
          }
        }
    }
}

I also created a code to change the name of the prefab when created, due to the fact the "(Clone)" extension was causing problems, here it is:

function Start () {

    name= "MouseMarker";
    Debug.Log("Renamed!");
}

The cube, when the MouseMarker is created, looks at x:4.3 and y:89, and z:0.0 no matter where the MouseMarker is. What am I doing wrong here?

more ▼

asked Oct 24 '11 at 11:11 PM

xNosferatux gravatar image

xNosferatux
31 1 2 3

(comments are locked)
10|3000 characters needed characters left

1 answer: sort newest

At what point do you tell it to look at the MouseMarker? As I see it, you will always be looking at a transform called 'myTransform' which you assign in the inspector! Change that bit to

var marker : GameObject = GameObject.Find("MouseMarker")
if(marker)
{
    transform.LookAt(marker.transform);
}

and then get rid of the myTransform altogether, if it isn't doing anything.

Other than that, there are a few things I would change about it- for example, I would keep the MouseMarker as a private var inside the creation script, and then just move it around instead of deleting and respawning it whenever you want to change its position.

more ▼

answered Oct 24 '11 at 11:18 PM

syclamoth gravatar image

syclamoth
14.8k 7 15 80

Thanks mate, that worked perfectly. Though Im still rather new to unity, so that last bit doesnt really make much sense, would you mind elaborating?

Oct 25 '11 at 01:22 PM xNosferatux

Basically, I mean you should keep a

var marker : Transform

assign to that when you instanitate the mouseMarker the first time

 if(!marker)
{
    marker = Instantiate(blah blah however you did it);
} else {
    marker.position = (wherever you would have instantiated it);
}

This way, you don't have to keep deleting and remaking it.

Oct 25 '11 at 02:42 PM syclamoth
(comments are locked)
10|3000 characters needed characters left
Your answer
toggle preview:

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Topics:

x327
x224

asked: Oct 24 '11 at 11:11 PM

Seen: 480 times

Last Updated: Oct 25 '11 at 02:42 PM