Skip to main content

Top Down Shooter (Object Look At Mouse)

Sooo let's say your making a top down shooter, you want your player to look in the direction of your mouse like so:
(Yeah I know, not the best picture)


Andddd here's the script to do so. I got it from here.
To use this script you need to attach it to the camera you use, and then manually set your fpc variable as the object you want to look at mouse. Keep in mind the camera needs to be looking straight down on the game object to work the best.

private var worldPos : Vector3;
private var mouseX : int;
private var mouseY :  int;
private var cameraDif :  int;
var fpc : GameObject;

function Start () {

    cameraDif = camera.transform.position.y - fpc.transform.position.y;

}

function Update () {

    mouseX = Input.mousePosition.x;

    mouseY = Input.mousePosition.y;

    worldPos = camera.ScreenToWorldPoint(Vector3(mouseX, mouseY, cameraDif));

    var  turretLookDirection:Vector3 =  Vector3(worldPos.x,fpc.transform.position.y, worldPos.z);

    fpc.transform.LookAt(turretLookDirection);

}

Explanation:
var fpc : GameObject;
This is the game object we are going to make face our mouse.

function start is called once after the everything is loaded and the awake function is called. It's called before the Update function. Read more here.

cameraDif = camera.transform.position.y - fpc.transform.position.y;
It's to make sure your object only rotates along rotation.x when the LookAt function is used.

mouseX = Input.mousePosition.x;
mouseY = Input.mousePosition.y;
These are integers that are used in the camera.ScreenToWorldPoint function to determine where the mouse is. Coordinates start 0 at bottom left corner of the screen.  Read more here.


worldPos = camera.ScreenToWorldPoint(Vector3(mouseX, mouseY, cameraDif));
So were setting a vector3 position by using the camera.ScreenToWorldPoint. This converts screen space to world space.  Read more here.

var  turretLookDirection:Vector3 =  Vector3(worldPos.x, fpc.transform.position.y, worldPos.z);
A new Vector 3 is made. This uses the game Object you are rotating y position.

fpc.transform.LookAt(turretLookDirection);
The LookAt function rotates the transform towards the vector 3 you set. Read more here. Since you are using the fpc's y transform position in the turretLookDirection, the turrent never rotates up or down.

Got the script here.

Did I do a good job explaining this? Do you have questions or mistakes you'd like to correct? Just comment below.

Comments

Post a Comment

Popular posts from this blog

How To Import and Use Fonts

-Made by Chrome Fx Films

To use different fonts in your game, your going to have to acquire some fonts. You can go somewhere like 1001 free fonts and download ones you like and want to use.

When you download the file, you'll need to extract the file if its in  a .zip

The text file should have the extension .ttf. If you text files have a FFIL extension, simply rename the font file (yourname.ttf).
Drag the text file into unity to import. By default the Character variable should be labeled Dynamic.

The Dynamic setting means  that Unity won't pre-generate the texture, so if you look at your material containing your font, It probably will be blank. (read more here)
Now your over all objective should be getting your font to look like this (unless you prefer dynamic):
Where the characters of the font are not jumbled up and visible.
Now usually all you have to do to achieve this is change the Character variable from Dynamic to Unicode.
and that should work.
Now what some people over…

Handling Music and Sound Effects In Your Games

Initiative  While developing Treva's Adventure I had to figure out a way to handle multiple music tracks and sound effects in a clean manner or suffer horribly.  What was going to help me achieve a simple solution was taking all the different sounds and centralizing them in a single class in order to black box them.  Any other code trying to play a sound wouldn't even know the sound file's name.  All code trying to play a music track would reference a enum that defines all the track names.
Defining The Class Creating The Enum When I first started defining types in my enumeration,  I was naming the types to be exactly like the file name.  For a scary sound effect I had found a file named "ghost breath".  So around my code would be scattered lines like SoundManager.Play(SoundEffectType.GhostBreath);  This was fine until I found a sound that better fit the situation it was being used in,  and decided to use "ghost breath" for a different situation like a …

Don't Destroy On Load..

So if you want to keep an object or script that keeps up variables (or for any other reason) when you go from scene to scene, you need to attach a don't destroy on load static function, which goes something like this:

function Awake () {
    DontDestroyOnLoad (transform.gameObject);
}

The Awake function is call only once, when all the objects in the scene have been created. Read more about it here.

DontDestroyOnLoad has what ever is in the ( ) to not be destroyed when creating a new scene.

(transform.gameObject) is what will not be destroyed when the new scene is loaded, in this case, it will be the game object and all it's children the script is attached to.