Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 11 Next capture
2021 2022 2023
1 capture
11 Jun 22 - 11 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 natchoguy · Aug 15, 2015 at 03:49 AM · 2dvelocityfixedupdate

Problem with FixedUpdate() and changing velocity (2d)

I'm trying to create a game which controls similarly to space shooters (moving in one direction along with camera). I wrote a script to prevent me from jumping out of the camera but there is a hiccup.

The pseudo-code:

  • Detects if player will jump over camera edge at current speed (works)

  • Translates player to edge and sets speed to the camera's speed (works)

  • Keeps player at edge (doesn't work).

For some reason, even though the speed of the camera and player are the same, the player will "slide" a bit out of bounds. It is especially bad at higher speed where the player can slip off altogether. The sliding is usually proportional to the speed of the camera itself but the actual sliding distance is random.

Gif

Code:

 void FixedUpdate() {
 
 float inputX = Input.GetAxis("Horizontal");
 
     float inputY = Input.GetAxis("Vertical");
 
     movement = new Vector2 (speed.x * inputX + camSpeed, speed.y * inputY);
 
     if(cam.transform.position.x - camWidth / 2 == transform.position.x)
     {
         Debug.Log ("lock");
         if((speed.x * inputX) + camSpeed < 0)
         {
         movement.x = camSpeed;
         }
     }
 
     else if(cam.transform.position.x - camWidth / 2 > transform.position.x + movement.x * Time.deltaTime)
     {
         transform.Translate(new Vector2 (cam.transform.position.x - camWidth / 2 - transform.position.x, 0));
         movement.x = camSpeed;
     }
 
     GetComponent<Rigidbody2D>().velocity = movement;
 }

The camera has a set velocity in another script

Edit: switching from velocity to translate makes the entire thing run perfectly, I can provide the modified code if anyone is interested

Comment
Add comment · Show 3
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 Tom01098 · Aug 15, 2015 at 09:25 AM 0
Share

Can you not instantiate the player as a child of camera and only move camera to the right, with the player having independent y movement?

 SetParent(camera);

Should be working if placed on the player script.

avatar image natchoguy · Aug 15, 2015 at 04:13 PM 0
Share

That would work but I want to be able to move along the x-axis as well. $$anonymous$$oreover, having both parent and child have separate velocities works differently than how some may imagine. I might as well recode the entire thing to use translate ins$$anonymous$$d.

avatar image Runalotski · Aug 16, 2015 at 09:24 PM 0
Share

set the Camera as a child to the Ship you can then move the camera freely to change its position

Or

Add a child obejct to the ship tagged with CameraHead and make a script called CameraFolow and write this

 Transform cameraTarget;
 
 //LateUpdate is called after update
 //so we know the ship is in its new positon
 Void LateUpdate()
 {
     transform.position = cameraTarget.Position;
 }

drop this on you camera

and then in the field of the hierachy drag and drop the CameraHead object in now the camera will follow that point

this will allow you to offset from that posiiton for camera shake or allowing the ship to catch up or slow down.

0 Replies

· Add your reply
  • Sort: 

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

4 People are following this question.

avatar image avatar image avatar image avatar image

Related Questions

Velocity in rigidbody2d is not doing anything. 1 Answer

Physics in 2d arkanoid. Tangential and normal velocity 1 Answer

AddExplosionForce after FixedUpdate? 1 Answer

Movement Relative to Rotated Parent 1 Answer

2D Collider aren't exact? 6 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