Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 14 Next capture
2021 2022 2023
2 captures
12 Jun 22 - 14 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 MangaHu · Feb 02, 2020 at 07:01 PM · fpsunity 2darduinoserialport

Using Arduino as controller in Unity is giving me bad framerate

My framerate drops to ~15fps when u use an Arduino as my input, ~25fps when i use my keyboard as input however if i exclude Arduino completely from my game i get a solid 100+fps. My game in in 2D. Here is my code ```

public class Player : MonoBehaviour {

 public float moveSpeed = 6;
 public float gravity = -20;
 public float jumpDistance = 8;
 Vector3 moveDistance;
 byte arduinoInput;

 SerialPort stream = new SerialPort("COM7", 9600);   
 Controller2D controller;    
 void Start() {
     
     controller = GetComponent<Controller2D>();  
     //sp.DtrEnable = true;
     stream.ReadTimeout = 100;
     
     stream.Open();          
 }

 void Update() {
     

     if (stream.IsOpen) {    
         try {
             arduinoInput =  (byte) stream.ReadByte();
             print(arduinoInput);   
         }
         catch (System.Exception) {

             
         }
     }
     

     if (arduinoInput == 2) {       // Als je de 2de drukknop indrukt
         moveDistance.x = -moveSpeed;   // Ga je links bewegen
         controller.Move(moveDistance * Time.deltaTime);     // Leest de input
     }
     if (arduinoInput == 3) {       // Als je de 3de druknop indrukt
         moveDistance.x = moveSpeed;     // Ga je rechts bewegen
         controller.Move(moveDistance * Time.deltaTime);     // Leest de input
     }


     if (controller.collisions.above || controller.collisions.below ) {   
         moveDistance.y = 0;
     }
     if ((Input.GetKeyDown(KeyCode.Space) || arduinoInput == 1) && controller.collisions.below) {   
         moveDistance.y = jumpDistance;  // Je gaat springen langs de y-as
         //moveDistance.x = 0;     
     }

     Vector2 input = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical")); 
     moveDistance.x = input.x * moveSpeed;   
     moveDistance.y += gravity * Time.deltaTime;     
     controller.Move(moveDistance * Time.deltaTime);            
 }

 

} ```

Would appreciate if anyone could identify this problem

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
0

Answer by rh_galaxy · Feb 07, 2020 at 12:52 PM

Probably because stream.ReadByte() takes time to do, it includes waiting for the Arduino. Your frame rate will be limited to how fast you can get data from the serial port, which also is limited to 9600 bits/sec (1200 bytes) it will take 1ms just to get one char.

You need to run the serial receive code in another thread and let the Update() method run freely and just check if there is a new input received from the Arduino and if so take action.

Comment
Add comment · 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

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

169 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 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 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 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 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 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 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 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 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 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 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 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 avatar image

Related Questions

Arduino Button Input not working 0 Answers

Send many ints from Unity To Arduino. 2 Answers

Issues after updating to Unity 5 1 Answer

parse serial data from arduino 1 Answer

Long delay sending data to Arduino via Serial Communication 0 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