Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by carter-carl30 · May 26, 2013 at 12:48 PM · 2dinstantiatecharactercontrolleraddforce

help with firing projectile, character controller + child object

I have a character controller (with a plane childed for sprite texture), (This is a 2D platform game). I also added an empty gameobject called "shuriken_launcher" which I am using as a launch point for my projectile.

What I am stuck on is how to get the projectile firing off in the direction my character is facing so when walking left and fire pressed projectile goes <===== and facing right projectile goes =====> I am using the script below at the moment this only fire's right all the time as I lack the wording to fire along the child objects axis (assuming the child rotates with the character object it is childed to?

 private var ray : Ray;
 private var rayCastHit : RaycastHit;
 var bulletPrefab:Transform;
 var spawnRightObject : GameObject;
 //var mySound: AudioClip;
 
 function Start()
     {
     spawnRightObject = GameObject.Find("shuriken_launcher");
     }
 
 function Update(){
 
 if(Input.GetMouseButtonDown(0)){
 
 ray = Camera.main.ScreenPointToRay (Input.mousePosition);
 
 if (Physics.Raycast (ray, rayCastHit)){
 
 if(rayCastHit.transform.name == "fire_button"){
 //audio.clip = mySound;
 //audio.Play();
 
     var rightBullet=Instantiate(bulletPrefab, spawnRightObject.transform.position,Quaternion.identity);
     rightBullet.rigidbody.AddForce(1000,0,0);
     }
    }
   }
 }

any pointers or help would be appriciated, thankyou for looking, I'm using javascript as I am still trying to wrap my head around programming!

this is my character controller/movement script, would your solution apply to this? (thankyou for your quick response!)

 public var skin : GUISkin;                        //GUI skin
         public var mesh : GameObject;                    //Mesh
         public var texMove : Texture2D[];                //Move texture
         public var texJump : Texture2D;                    //Jump texture
         public var audioJump : AudioClip;                //Jump sound
         public var audioDead : AudioClip;                //Dead sound
         private var selectedTex : int;                    //Selected texture
         public var texUpdateTime : float;                //Texture update time
         private var tmpTexUpdateTime : float;            //Tmp texture update time
         public var moveSpeed : float;                    //Move speed
         public var jumpSpeed : float;                    //Jump speed
         public var gravity : float;                        //Gravity
         private var dir : Vector3;                        //The direction the player is movin
         private var rightTouchPad : GameObject;            //Right touchpad
         private var leftTouchPad : GameObject;            //Left touchpad
         var dead = false;                                //Are we dead
         private var controller : CharacterController;    //The character controller
         var respawn : Transform;                        //respawn point
         var Ninja : GameObject;                            //player
         
         //try to add in ducking later...public var crouch : Texture2D;
         
         
         function Start ()
         {
             //Find the character controller
             controller = GetComponent(CharacterController);
             //Screen orientation to landscape left
             Screen.orientation = ScreenOrientation.LandscapeLeft;
             //Find left touchpad
             leftTouchPad = GameObject.Find("LeftTouchPad");
             //Find right touchpad
             rightTouchPad = GameObject.Find("RightTouchPad");
             //Start SetupJoysticks
             StartCoroutine("SetupJoysticks");
             //Set sleep time to never
             Screen.sleepTimeout = SleepTimeout.NeverSleep;
         }
         
         function Update ()
         {
             //If we are not dead
             if (!dead)
             {
                 //Update
                 MoveUpdate();
                 TexUpdate();
             }
         }
         
         function MoveUpdate()
         {
             //If we hit a object
             var hit : RaycastHit;
             if (Physics.Raycast(transform.position, Vector3.up, hit, 0.5f))
             {
                 //If it is not the player
                 if (hit.transform.gameObject.tag != "goal")
                 {
                     //Set dir y to -1
                     dir.y = -1;
                 }
             }
             
             //If we are grounded
             if (controller.isGrounded)
             {
                 //If the game is not running on a android device
                 if (Application.platform != RuntimePlatform.Android)
                 {
                     //Set dir x to Horizontal
                     dir.x = Input.GetAxis("Horizontal") * moveSpeed;
                     //If we get Space key down
                     if (Input.GetKeyDown(KeyCode.Space))
                     {
                         //Set dir y to jumpSpeed
                         dir.y = jumpSpeed;
                         //Play jump sound
                         audio.clip = audioJump;
                         audio.Play();
                     }
                 }
                 //If the game is running on a android device
                 else
                 {
                     //Get left touchpad position x
                     var pX = leftTouchPad.GetComponent(Joystick).position.x;
                     //Get left touchpad tap count
                     var tC = rightTouchPad.GetComponent(Joystick).tapCount;
                     
                     //Set dir x to touchpad x position
                     dir.x = pX * moveSpeed;
                     //If touchpad tap count are not 0
                     if (tC != 0)
                     {
                         //Set dir y to jumpSpeed
                         dir.y = jumpSpeed;
                         //animation.Play("somersault");
                         //Play jump sound
                         audio.clip = audioJump;
                         audio.Play();
                     }
                 }
             }
             //If we are not grounded
             else
             {
                 //Set dir y to gravity
                 dir.y -= gravity * Time.deltaTime;
             }
             
             //Move the player
             controller.Move(dir * Time.smoothDeltaTime);
         }
         
         function TexUpdate()
         {
             //If we are not grounded
             if (!controller.isGrounded)
             {
                 //Set main texture to jump texture
                 mesh.renderer.material.mainTexture = texJump;
                 return;
             }
             //If the game is not running on a android device
             if (Application.platform != RuntimePlatform.Android)
             {
                 //Get Horizontal
                 var h = Input.GetAxis("Horizontal");
                 //If Horizontal is not 0
                 if (h != 0)
                 {
                     //If Horizontal is bigger than 0
                     if (h > 0)
                     {
                         //Set scale to 1,1,1
                         mesh.transform.localScale = Vector3(1,1,1);
                     }
                     //If Horizontal is less than 0
                     else
                     {
                         //Set scale to -1,1,1
                         mesh.transform.localScale = Vector3(-1,1,1);
                     }
                 }
                 //If Horizontal is 0
                 else
                 {
                     //Set main texture to move texture
                     mesh.renderer.material.mainTexture = texMove[0];
                     return;    
                 }
             }
             //If the game is running on a android device
             else
             {
                 //Get left touchpad x position
                 var pX = leftTouchPad.GetComponent(Joystick).position.x;
                 //If touchpad x position is not 0
                 if (pX != 0)
                 {
                     //If touchpad x position is bigger than 0
                     if (pX > 0)
                     {
                         //Set scale to 1,1,1
                         mesh.transform.localScale = Vector3(1,1,1);
                     }
                     //If touchpad x position is less than 0
                     else
                     {
                         //Set scale to -1,1,1
                         mesh.transform.localScale = Vector3(-1,1,1);
                     }
                 }
                 else
                 {
                     //Set main texture to move texture
                     mesh.renderer.material.mainTexture = texMove[0];
                     return;    
                 }
             }
             
             //If tmpTexUpdateTime is bigger than texUpdateTime
             if (tmpTexUpdateTime > texUpdateTime)
             {
                 //Set tmpTexUpdateTime to 0
                 tmpTexUpdateTime = 0;
                 //Add one to selectedTex
                 selectedTex++;
                 //If selectedTex si bigger than texMove.Length - 1
                 if (selectedTex > texMove.Length - 1)
                 {
                     //Set selectedTex to 0
                     selectedTex = 0;
                 }
                 //Set main texture to move texture
                 mesh.renderer.material.mainTexture = texMove[selectedTex];
             }
             else
             {
                 //Add 1 to tmpTexUpdateTime
                 tmpTexUpdateTime += 1 * Time.deltaTime;
             }
         }
         
         function OnTriggerEnter(other : Collider)
         {
             //If we are in a enemy trigger
             if (other.tag == "Enemy")
             {
                 //Play dead sound
                 audio.clip = audioDead;
                 audio.Play();
                 //Dont show renderer
                 mesh.renderer.enabled = false;
                 //Kill
                 dead = true;
                 
                 //testing respawn
                 //wait for 1 second
                 yield WaitForSeconds(1);
     
                 //take a life off lives
                 lives_counter.Counter -= 1;
                 
                 //turn back on mesh renderer with a few flashes first
                 mesh.renderer.enabled = true;
                 yield WaitForSeconds(0.1);
                 mesh.renderer.enabled = false;
                 yield WaitForSeconds(0.1);
                 mesh.renderer.enabled = true;
                 mesh.renderer.enabled = true;
                 yield WaitForSeconds(0.1);
                 mesh.renderer.enabled = false;
                 yield WaitForSeconds(0.1);
                 mesh.renderer.enabled = true;
     
                 //make dead false again
                 dead = false;
                 
             }
         }
         
     //    function OnGUI()
     //    {
     //        GUI.skin = skin;
     
             //Menu Button
     //        if(GUI.Button(new Rect(Screen.width - 120,0,120,40),"Menu"))
     //        {
     //            Application.LoadLevel("Menu");
     //        }
             //If we are dead
     //        if (dead)
     //        {
                 //Play Again Button
     //            if(GUI.Button(new Rect(Screen.width / 2 - 90,Screen.height / 2 - 60,180,50),"Play Again"))
     //            {
     //                Application.LoadLevel("Game 3");
     //            }
                 //Menu Button
     //            if(GUI.Button(new Rect(Screen.width / 2 - 90,Screen.height / 2,180,50),"Menu"))
     //            {
     //                Application.LoadLevel("Menu");
     //            }
     //        }    
     //    }
         
         function SetupJoysticks()
         {
             //Set touchpad position
             leftTouchPad.transform.position = Vector3(0,0,0);
             rightTouchPad.transform.position = Vector3(1,0,0);
             
             //Wait 1 second
             yield WaitForSeconds(1);
             
             //Start the touchpads
             leftTouchPad.GetComponent(Joystick).StartGame();
             rightTouchPad.GetComponent(Joystick).StartGame();
         }
Comment
Add comment
10 |3000 characters needed characters left characters exceeded
â–¼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

1 Reply

· Add your reply
  • Sort: 
avatar image
1
Best Answer

Answer by Proportion1 · May 26, 2013 at 01:02 PM

as you already know the object fires in the direction that the Z axis of your spawnRightObject is facing. so the simple dodgy fix you could do is to change the local transform position and rotation of the "shuriken_launcher". you can do this with a condition in your movement script. i havent seen your movement script so i will assume that your using the horizontal axis to move left and right.

 if(Input.GetAxis("Horizontal") > 0.1f ){
 spawnRightObject.transform.localPosition = Vector3(0, 0, 0); // make the position where you want it
 }

and like do the same for the other direction. hope this helps :D

Comment
Add comment · Show 7 · Share
10 |3000 characters needed characters left characters exceeded
â–¼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image carter-carl30 · May 26, 2013 at 01:14 PM 0
Share

see updated script for movement script, would your solution still apply to this?

avatar image Proportion1 · May 26, 2013 at 01:37 PM 0
Share

Ya for sure. U just need to add a gameobject variable for the launcher, and say where u want it to relocate to between lines 135 and 145.

avatar image carter-carl30 · May 26, 2013 at 01:45 PM 0
Share

So (if i'm right) I would add this too my movement script (and populate the slot in inspector with my shuriken_launcher object):

var spawnRightObject : GameObject; <===gameobject been shuriken_launcher

I have no idea how I would say where I want it to relocate to between lines 135 and 145, (i'm confused as I thought a child object would rotate and move its axis with the parent object) or is that incorrect?

avatar image Proportion1 · May 26, 2013 at 11:03 PM 0
Share

yes that is right, but if the parent object isnt rotating (im assu$$anonymous$$g it isnt because its 2d) you just have to say where you want the local position of the launcher to be.

avatar image Proportion1 · May 27, 2013 at 10:01 PM 1
Share

this is the lines i was talking about, so ad the launcher up the top: public var launcherthing : GameObject

 if (h != 0)
              {
               //If Horizontal is bigger than 0
               if (h > 0)
               {
                   //Set scale to 1,1,1
                   mesh.transform.localScale = Vector3(1,1,1);
 launcherthing.transform.localPosition = Vector3(0.5,0,0);
               }
               //If Horizontal is less than 0
               else
               {
                   //Set scale to -1,1,1
                   mesh.transform.localScale = Vector3(-1,1,1);
 launcherthing.transform.localPosition = Vector3(-0.5,0,0);
               }
              }

so this will change the position of the launcher thing depending on if you press left or right.

Show more comments

Your answer

Hint: You can notify a user about this post by typing @username

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

Answers Answers and Comments

14 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Shoot logic, bullet instantiation 1 Answer

Add force to instantiated prefabs (c#) 0 Answers

Random instantiate at same frame with each instantiate having unique random direction 1 Answer

Instantiate object at position, moving in a direction? 1 Answer

Player invisible on respawn 2 Answers


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges