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

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 :slight_smile: 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);}
		
	}