x


Find A GameObject's Position

Hi,

I made a PreFab for one of my entities in Unity. I call the entity a type of "power source". This power source or entity, sits on ground and does not move, ever. Meaning that its position will never change. The player (a primitive cube game object) does move, and if the user chooses, will eventually become close to the power source.

I have declared a public GameObject within the scope of my Player.cs Script (the cube that the user gets to move around with). What I want to do is that if the player gets close to the power source, the script will know that.

Basically, what I am after are the coordinates, x, z, of the power source. Keep in mind that I have a y-up system and the power source will never be above the ground, so that axis is not a factor in (as you might have guessed) my distance formula.

So, essentially, I need to grab the coordinates of the power source. How would I do that?

using UnityEngine;
using System.Collections;

public class Player : MonoBehaviour {

    // For When Player comes within Range of the powerSource.
    public GameObject PowerSourcePreFab;

    public float MoveSpeed = 10;
    public float RotateSpeed = 40;

    void Start()
    {
        // Intialize each power souce to 0% as this is the start of the match.
    }

    // Update is called once per frame
    void Update () 
    {
        // Amount to Move
        float MoveForward = Input.GetAxis("Vertical")  * MoveSpeed * Time.deltaTime;
        float MoveRotate = Input.GetAxis("Horizontal") * RotateSpeed * Time.deltaTime;

        // Move the player
        transform.Translate(Vector3.forward * MoveForward);
        transform.Rotate(Vector3.up * MoveRotate);

    }
}

To reiterate, I simply need to access the coordinates of the power source entity in my game.

more ▼

asked May 20 '10 at 08:50 PM

lampshade gravatar image

lampshade
391 84 92 109

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

2 answers: sort voted first

Something's missing from your script, and you can't use your "public GameObject PowerSourcePrefab" like that. A prefab is just a template, it's not a reference to your "Power Source". It technically doesn't really have a "position".

You need to get references to all of the PowerSources in the scene, and iterate through those. Alternatively, you could (and this would be way easier), just place a script on each PowerSource to check if the player is in range, and then do something at that point in time.

Here's some pseudocode for a script you could place on your PowerSources:

// Pseudocode

float distance

// store the player object reference in here from the SCENE
// using the editor inspector
GameObject player

function Update
   if transform.position - player.position is less than distance then
      // do something here
   end if
end function
more ▼

answered May 20 '10 at 09:22 PM

qJake gravatar image

qJake
11.6k 43 78 161

Thanks for the reply! I designed and coded this algorithm in C++ with Win32 API functions..Is their a tutorial you can provide that shows how to find a gameobject's type position?

May 20 '10 at 10:33 PM lampshade

Wait... you did what? This just needed to be coded inside of a Javascript or C# file inside Unity and attached to your game object? Noone said anything about C++? And it's not an "algorithm", either... And to find a game object's position, you just use gameObject.transform.position, why would you need a tutorial on that?

May 21 '10 at 12:11 AM qJake

All right. Its a little funky, but I managed to get it working and made a little print inside else print outside too. Also, incremented a int varaible when I was inside ;))

Thanks for your help.

May 21 '10 at 04:47 AM lampshade
(comments are locked)
10|3000 characters needed characters left

I did something like this once and when my player walked into a trigger. The trigger would make an object play an animation. I believe you can use the same code I used and just alter it a little.

I used the following code:

function movemaze1()
{
maze1 = true
audio.PlayOneShot(Mazemovesound);
var maze1 : GameObject = GameObject.Find("maze");
maze1.animation.Play("mazeonemovetwo")
}
more ▼

answered May 20 '10 at 09:21 PM

Kinifi gravatar image

Kinifi
55 8 8 16

This has nothing to do with his question...

May 20 '10 at 09:22 PM qJake

if I could specify x, z coordinates in find, then I might be okay..

May 20 '10 at 11:03 PM lampshade

Kinifi, Thanks for your help =)

May 21 '10 at 04:48 AM lampshade
(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:

x2084
x885

asked: May 20 '10 at 08:50 PM

Seen: 9250 times

Last Updated: May 20 '10 at 10:07 PM