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 Make a Hellish Looking Sky Box

I came across this problem while constructing my scene of Hell in a little project I've been working on, and could not find a reasonable sky box on the web for what I want. Maybe I was not looking hard enough, but I ended up making nice substitute. If you think the sky box looks familiar, then your right. The Sky box I'm using is already packaged with Unity3D! To import the sky boxes Unity has made for you,  simply go to Assets>Import Package>Skyboxes.  The sky boxes will appear in your projects tab under a folder named "Standard Assets". To make this sky box, first you must find the folder containing all the sky box materials and open it up. In it will be a list of sky boxes for your disposal. To get this skybox, I decided to tweak the "StarryNight Skybox" (But the "MoonShine Skybox" looks pretty cool also!).  Select the sky box and view it under the inspector tab. Underneath the properties there will be a tint color variable allowin

How To Make A Gun Shot Sound (SFX On Unity 3D)

When it comes to audio in Unity, there are four components: Audio Clip , Audio Source , Audio Listener , and Audio Re-verb Zone . Audio Clips are the actual audio file imported into your game. Unity supports file formats: .aif, .wav, .mp3, and .ogg. When imported, you can compress them greatly, with the price of loosing some quality. You can do this by first selecting the audio clip, view it in the inspector. Under the Audio Importer component, you can switch the audio format from Native to the audio clip, to a compressed format applied by Unity. You can change how compressed the file is by dragging the bar at the bottom, then hitting apply. You can get plenty of free good SFX from a site called  freesound.org . All you have to do is create an account for free , and download all the sounds you want. I found a nice gun shot sound here . Simply download and load into your Project. Audio Source actually plays the audio clip in your scene. They are an component, so it mu

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 s