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 /
  • Help Room /
avatar image
0
Question by jigwiz · Mar 29, 2017 at 03:15 AM · movementinputscript.mobile devicesgyroscope

How do I adjust code so gyro translates player to center position when device is being held in hands

I have an object in 3d space yet only moving on 2d axis (don't want moving in z space) The controls work great for now yet when I play the game to test on mobile device, the device has to be completely flat in order to have game object centered on screen. Essentially the code is doing precisely what I AKSED it to do. What I need to know is how do I adjust the script so that I can play the game while mobile device is tilted upward and set that to translate as center position for my game object? When we play a game we hold mobile device in our hands in a slightly titled up position which is natural to gamers. Any advice is appreciated Code is here:

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
 public class CharacterController : MonoBehaviour {
 
     public float speed = 10.0F;
 
 
     void Update() 
     {
 
         //Move character using gyro//
 
         transform.Translate (Input.acceleration.x * 25.0f, Input.acceleration.y * 20f, 0);
 
 
         //Constrain character movement to viewport//
 
         Vector3 boundaryVector = transform.position;
 
         Vector3 pos = Camera.main.WorldToViewportPoint (transform.position);
         pos.x = Mathf.Clamp01(pos.x);
         pos.y = Mathf.Clamp01(pos.y);
         pos.z = Mathf.Clamp (transform.position.z, 100, 50);
 
 
 
 
         transform.position = Camera.main.ViewportToWorldPoint(pos);
 
 
     }
 }

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 jigwiz · Mar 31, 2017 at 03:15 AM

After some digging I used another method for interpolating character movement which allows me to adjust for device orientation on a tilt. I have added functionality that also rotates the character slightly in the direction its moving for better effect. Here:

 public float smooth = 0.4f;
     public float newRotation;
     public float sensitivity = 6;
     public float xSpeed = 0f;
     public float ySpeed = 0f;
 
     private Vector3 currentAcceleration, initialAcceleration;
     //public float offSetY;
 
 
 
     Matrix4x4 calibrationMatrix;
     Vector3 wantedDeadZone  = Vector3.zero;
 
     void Start()
     {
         calibrate ();
 
         initialAcceleration = Input.acceleration;
         currentAcceleration = Vector3.zero;
     
 
     }    

 
     void Update() 
     {
 
 
         //Move character using gyro//
 
         //Controls input speed
         //transform.Translate (Input.acceleration.x * Xspeed, Input.acceleration.y * Yspeed, 0);
         _InputDir = getAccelerometer(Input.acceleration);
 
         //Controll character using accelerometer
         transform.Translate (_InputDir.x * xSpeed, _InputDir.y * ySpeed, 0);
 
         //Control character rotation
         currentAcceleration = Vector3.Lerp(currentAcceleration, Input.acceleration - initialAcceleration, Time.deltaTime/smooth);
 
         newRotation = Mathf.Clamp(currentAcceleration.x * sensitivity, -1, 1);
         transform.Rotate(0, 0, -newRotation);
 
         //Constrain character movement to viewport//
         Vector3 boundaryVector = transform.position;
 
         Vector3 pos = Camera.main.WorldToViewportPoint (transform.position);
         pos.x = Mathf.Clamp01(pos.x);
         pos.y = Mathf.Clamp01(pos.y);
         pos.z = Mathf.Clamp (transform.position.z, 100, 50);
 
         transform.position = Camera.main.ViewportToWorldPoint(pos);
 
     }
 
     void calibrate()
     {
             wantedDeadZone = Input.acceleration;
             Quaternion rotateQuaternion = Quaternion.FromToRotation(new Vector3(0f, 0f, -1f), wantedDeadZone);
             //create identity matrix ... rotate our matrix to match up with down vec
             Matrix4x4 matrix = Matrix4x4.TRS(Vector3.zero, rotateQuaternion, new Vector3(1f, 1f, 1f));
             //get the inverse of the matrix
             calibrationMatrix = matrix.inverse;
 
         }
 
         //Method to get the calibrated input 
         Vector3 getAccelerometer(Vector3 accelerator){
             Vector3 accel = this.calibrationMatrix.MultiplyVector(accelerator);
             return accel;
         }
 
         //Finally how you get the accelerometer input
         Vector3 _InputDir;
 
 }

The character rotates a bit slow but at least its a bit closer to what I want.

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

123 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

Related Questions

Touch Controls without virtual joystick 0 Answers

Im trying to make a player move 360 degree gyroscopic movement on my phone 0 Answers

the player input is jittery seems like glitching 0 Answers

Making an object move non stop after button input? 1 Answer

New Movement Script Not Registering Keyboard Input 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