- Home /
Want to instantiate projectile in direction character is moving.
Hi all,
I've got what I feel like is a pretty simple question, hopefully I'll get it across clearly here.
I've got a top-down game using the character control script below. I want to add to that script so that it instantiates a projectile in the direction the character is moving. For example if the character is moving up and to the left, I want to hit "FIRE", thus instantiating a projectile, and add WHATEVER force to the projectile in the UP/LEFT direction.
Here's my character control script (I'm using Javascript):
var speed : float = 6.0;
var jumpSpeed : float = 8.0;
var gravity : float = 20.0;
var projectile : Rigidbody;
var canfire : boolean = true;
var ballspeed : int = 25;
function Update() {
var controller : CharacterController = GetComponent(CharacterController);
if (controller.isGrounded) {
// We are grounded, so recalculate
// move direction directly from axes
moveDirection = Vector3(Input.GetAxis("HorizontalP1"), 0,
Input.GetAxis("VerticalP1"));
moveDirection = transform.TransformDirection(moveDirection);
moveDirection *= speed;
}
// Apply gravity
moveDirection.y -= gravity * Time.deltaTime;
// Move the controller
controller.Move(moveDirection * Time.deltaTime);
}
It seems like I could just use "moveDirection" as a variable in a few lines of instantiate scripting. Not sure what the syntax would be though. Any help appreciated!
Pat
Answer by bayerly · Sep 02, 2013 at 01:13 AM
Took a while, but I finally got it, and it's just like I suspected! I just inserted my instantiate projectile script into the end of the script (before gravity/jumping), and used the moveDirection variable to direct the projectile :) also added a "ballspeed" var so I can determine how much force I add to the projectile in the editor. Code below:
var speed : float = 6.0;
var jumpSpeed : float = 8.0;
var gravity : float = 20.0;
var projectile : Rigidbody;
var canfire : boolean = true;
var ballspeed : int = 25;
function Update() {
var controller : CharacterController = GetComponent(CharacterController);
if (controller.isGrounded) {
// We are grounded, so recalculate
// move direction directly from axes
moveDirection = Vector3(Input.GetAxis("HorizontalP1"), 0,
Input.GetAxis("VerticalP1"));
moveDirection = transform.TransformDirection(moveDirection);
moveDirection *= speed;
}
// Apply gravity
moveDirection.y -= gravity * Time.deltaTime;
// Move the controller
controller.Move(moveDirection * Time.deltaTime);
if (Input.GetButtonDown("Fire1")) {
// Instantiate the projectile at the position and rotation of this transform
var clone : Rigidbody;
clone = Instantiate(projectile, transform.position, transform.rotation);
// Give the cloned object an initial velocity along the current
// object's Z axis
clone.velocity = transform.TransformDirection (moveDirection * ballspeed);}
}