Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 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 cdavidr · Jun 23, 2016 at 05:13 PM · programmingreplay

Is there a way to replay input on a gameobject?

For example, I'd like to move my object with my controls and if I hold down w then it records that key press and for how long it was held down, and then stores this information somewhere. Then later using that information I can replay the same motion on the gameobject (that has physics). Is this something possible to do?

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

2 Replies

· Add your reply
  • Sort: 
avatar image
0

Answer by Habitablaba · Jun 23, 2016 at 05:16 PM

You've described pretty much exactly what you need to do.

Create a new script to add to whatever game object you want to record for. Basically, just listen for all of the relevant key press events (and the associated key release events). When one of them occurs, save the event into a collection -- a list or a dictionary perhaps.

Later, when you want to replay events, you can iterate over the collection and handle those events as if they were being sent from the user.

Edit: You'll also want to look into this answer about simulating key press events. Basically you're going to want a level of indirection between your game and the normal Input.* methods.

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

Answer by Eno-Khaon · Jun 23, 2016 at 06:42 PM

Getting back information on the key you press can be done using Event.keyCode. To give an example of how the basics of it could be implemented:

 // C#
 bool[] keyPressed;
 int totalKeys;
 void Start()
 {
     KeyCode[] allKeys = (KeyCode[])System.Enum.GetValues(typeof(KeyCode));
     totalKeys = allKeys.Length;
     keyPressed = new bool[totalKeys];
 }
 
 void OnGUI()
 {
     Event e = Event.current;
     // Filtering out the "None" accompanying other keypresses.
     if(e.isKey && e.keyCode != KeyCode.None)
     {
         // Remove repeats while holding key
         if(e.type == EventType.KeyDown && !keyPressed[(int)e.keyCode])
         {
             keyPressed[(int)e.keyCode] = true;
             Debug.Log((int)e.keyCode + " --- " + e.keyCode + " --- down");
         }
         else if(e.type == EventType.keyUp)
         {
             keyPressed[(int)e.keyCode] = false;
             Debug.Log((int)e.keyCode + " --- " + e.keyCode + " --- up");
         }
     }
 }

Woah, wait a second! Isn't that boolean array too big? There aren't that many KeyCodes!

Well, there's a lot of empty space in the KeyCode enumerator. In fact, a few hundred "numbers" are skipped.

That simply means we're working around those empty spaces, since the conversion from KeyCode to integer uses the assigned number in the enumerator. It's no easy task to compress the KeyCode inputs into a smaller array.

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

5 People are following this question.

avatar image avatar image avatar image avatar image avatar image

Related Questions

Multiple Cars not working 1 Answer

How to program a dodge roll and similar? 1 Answer

Enable secondary maps in simple shader 0 Answers

Problem with discovering if a character is on top or not 0 Answers

alphaKeys in linerenderer gradient not being set 1 Answer


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