Hardware components | ||||||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
Software apps and online services | ||||||
![]() |
| |||||
![]() |
| |||||
Hand tools and fabrication machines | ||||||
![]() |
| |||||
|
When thinking of how to better equip the human in a workplace that is being taken over by robotics, we've decided to grab the best of both worlds. Why not integrate robots with humans? Morever, studies have consistently shown, co-bots, so called robots that work with humans and enhance their abilities, acheive higher productivity while keeping humans relevant in the workplace. Below, we will highlight the dreams we have, the struggles we went through to acheive it, and our future plans. That being said, I invite you to join us on our journey!
The glove motion capture idea has already been around. So called VR haptic gloves track hand motion as well as induce "feeling" in one's hand when interacting inside virtual environments. By all means, the motion tracking technology has been around for some time. However, the gloves are very expensive, almost as expensive as a new gaming console, and they were bulky, which tired the hand and did not immerse the gamer inside the game. Now how is this relevant to our project and why did we still decide to do it? We responded that: 1) even though we are beginners in the arduino technology (electrical in general), high schoolers, as well as slighly incompetent, we believed that the more technological intesive tasks could be easily done, leaving only the math behind it, and 2) this would provide an opportunity for us to grow as fellow hobbiest and create something that would add value to society. Thus, we choose the glove as it allowed us to focus more on the algorithm side, something we thought we could do, while slowly incorporating applicable technology. The result was to be a glove that could help save lives, enhance user experience, and also bolster humans in the workplace.
So we got started on the project as soon as possible, eagerly jumping in for a chance to learn. We started by ordering some of the parts we thought we needed and researched on the unfamiliar electronics parts to gain an understanding of what we would need to do. Splitting our time between school, clubs, extracurriculars, and this project we read up on Kalman Filters, Mahony Filters, Mahogany Filters, Quarternions, and other associated mathematical formulas that were needed to accurately predict the state of the user's hand. Learning electrical was equally challenging, as we started from scratching, moving form what volts/current/resistance are, to more higher level topics like the difference between arduino micro, mini, and nano. Much of our time was spent trying to gain a grasp on a subject we have never seen. When it came time to start connecting wires and trying out our code, we realized that things didn't go according to plan.
The code didn't work for us so we had to constantly change it, look for other source code, look at our electrical diagram, and overall, troubleshoot to find where we messed up. When we started to get data out of it, we used Unity to conver the raw data into usuable vectors that could manipulate 3D objects. Hence, quarternions were introduced, a concept so abstract that it would take us a full month to slowly grasp onto 4D numbers, and armed only with calculus, we weren't in the best position to learn college level abstract math. Despite our hinders, we managed to pull through and get some sort of response from Unity and our IMU. We were ecstatic at having the in-game 3D object respond to IMU data from external stimuli.
Even with our energetic attitude and perserverance, we did not have enough time to produce a workable stage 2 product and coupled with other problems, our prototype is only a simple prototype and still needs work well. However, we aren't discouraged. We know that there is potential in our work and we plan to continue it in order to learn while giving back to the community. We hope that the inclusive community of fellow arduinoists will helps us along our journey and we thank you in advance.
"Have the courage to follow your heart and intuition" - Steve Jobs
Wish us the best of luck!
- Benjamin Nguyen & Jeremy Li
P.S. Big thanks to Kris Winer for his amazing IMU code. We couldn't have done it without him!
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Cleaner : MonoBehaviour {
private static Cleaner inst;
public static Cleaner instance { get { return inst; } }
private void Awake()
{
if (inst != null && inst != this)
Destroy(this.gameObject);
else
inst = this;
}
/// <summary>
/// Gets or sets the sample period.
/// </summary>
[SerializeField] public float SamplePeriod = 501;//501; //delta t. used to be 512
/// <summary>
/// Gets or sets the algorithm gain beta.
/// </summary>
[SerializeField] public float Beta = 0.1f;
/// <summary>
/// Gets or sets the Quaternion output.
/// </summary>
[SerializeField] public float[] quat;
public Quaternion GetQuaternionData(float gz, float gx, float gy, float az, float ax, float ay, float mz, float mx, float my)
{
//float.Parse(stateInfo[0])
MadgwickQuaternionUpdate(gz, gx, gy, az, ax, ay, mz, mx, my);
Quaternion retQuat = new Quaternion(quat[0], quat[1], quat[2], quat[3]);
return retQuat;
}
/// <summary>
/// Algorithm AHRS update method. Requires only gyroscope and accelerometer data.
/// </summary>
/// <param name="gx">
/// Gyroscope x axis measurement in radians/s.
/// </param>
/// <param name="gy">
/// Gyroscope y axis measurement in radians/s.
/// </param>
/// <param name="gz">
/// Gyroscope z axis measurement in radians/s.
/// </param>
/// <param name="ax">
/// Accelerometer x axis measurement in any calibrated units.
/// </param>
/// <param name="ay">
/// Accelerometer y axis measurement in any calibrated units.
/// </param>
/// <param name="az">
/// Accelerometer z axis measurement in any calibrated units.
/// </param>
/// <param name="mx">
/// Magnetometer x axis measurement in any calibrated units.
/// </param>
/// <param name="my">
/// Magnetometer y axis measurement in any calibrated units.
/// </param>
/// <param name="mz">
/// Magnetometer z axis measurement in any calibrated units.
/// </param>
/// <remarks>
/// Optimised for minimal arithmetic.
/// Total : 160
/// Total *: 172
/// Total /: 5
/// Total sqrt: 5
/// </remarks>
public void MadgwickQuaternionUpdate(float gz, float gx, float gy, float az, float ax, float ay, float mz, float mx, float my)
{
float q1 = quat[0], q2 = quat[1], q3 = quat[2], q4 = quat[3]; // short name local variable for readability
float norm;
float hx, hy, _2bx, _2bz;
float s1, s2, s3, s4;
float qDot1, qDot2, qDot3, qDot4;
// Auxiliary variables to avoid repeated arithmetic
float _2q1mx;
float _2q1my;
float _2q1mz;
float _2q2mx;
float _4bx;
float _4bz;
float _2q1 = 2f * q1;
float _2q2 = 2f * q2;
float _2q3 = 2f * q3;
float _2q4 = 2f * q4;
float _2q1q3 = 2f * q1 * q3;
float _2q3q4 = 2f * q3 * q4;
float q1q1 = q1 * q1;
float q1q2 = q1 * q2;
float q1q3 = q1 * q3;
float q1q4 = q1 * q4;
float q2q2 = q2 * q2;
float q2q3 = q2 * q3;
float q2q4 = q2 * q4;
float q3q3 = q3 * q3;
float q3q4 = q3 * q4;
float q4q4 = q4 * q4;
// Normalise accelerometer measurement
norm = (float)Mathf.Sqrt(ax * ax + ay * ay + az * az);
if (norm == 0f) return; // handle NaN
norm = 1 / norm; // use reciprocal for division
ax *= norm;
ay *= norm;
az *= norm;
// Normalise magnetometer measurement
norm = (float)Mathf.Sqrt(mx * mx + my * my + mz * mz);
if (norm == 0f) return; // handle NaN
norm = 1 / norm; // use reciprocal for division
mx *= norm;
my *= norm;
mz *= norm;
// Reference direction of Earth's magnetic field
_2q1mx = 2f * q1 * mx;
_2q1my = 2f * q1 * my;
_2q1mz = 2f * q1 * mz;
_2q2mx = 2f * q2 * mx;
hx = mx * q1q1 - _2q1my * q4 + _2q1mz * q3 + mx * q2q2 + _2q2 * my * q3 + _2q2 * mz * q4 - mx * q3q3 - mx * q4q4;
hy = _2q1mx * q4 + my * q1q1 - _2q1mz * q2 + _2q2mx * q3 - my * q2q2 + my * q3q3 + _2q3 * mz * q4 - my * q4q4;
_2bx = (float)Mathf.Sqrt(hx * hx + hy * hy);
_2bz = -_2q1mx * q3 + _2q1my * q2 + mz * q1q1 + _2q2mx * q4 - mz * q2q2 + _2q3 * my * q4 - mz * q3q3 + mz * q4q4;
_4bx = 2f * _2bx;
_4bz = 2f * _2bz;
// Gradient decent algorithm corrective step
s1 = -_2q3 * (2f * q2q4 - _2q1q3 - ax) + _2q2 * (2f * q1q2 + _2q3q4 - ay) - _2bz * q3 * (_2bx * (0.5f - q3q3 - q4q4) + _2bz * (q2q4 - q1q3) - mx) + (-_2bx * q4 + _2bz * q2) * (_2bx * (q2q3 - q1q4) + _2bz * (q1q2 + q3q4) - my) + _2bx * q3 * (_2bx * (q1q3 + q2q4) + _2bz * (0.5f - q2q2 - q3q3) - mz);
s2 = _2q4 * (2f * q2q4 - _2q1q3 - ax) + _2q1 * (2f * q1q2 + _2q3q4 - ay) - 4f * q2 * (1 - 2f * q2q2 - 2f * q3q3 - az) + _2bz * q4 * (_2bx * (0.5f - q3q3 - q4q4) + _2bz * (q2q4 - q1q3) - mx) + (_2bx * q3 + _2bz * q1) * (_2bx * (q2q3 - q1q4) + _2bz * (q1q2 + q3q4) - my) + (_2bx * q4 - _4bz * q2) * (_2bx * (q1q3 + q2q4) + _2bz * (0.5f - q2q2 - q3q3) - mz);
s3 = -_2q1 * (2f * q2q4 - _2q1q3 - ax) + _2q4 * (2f * q1q2 + _2q3q4 - ay) - 4f * q3 * (1 - 2f * q2q2 - 2f * q3q3 - az) + (-_4bx * q3 - _2bz * q1) * (_2bx * (0.5f - q3q3 - q4q4) + _2bz * (q2q4 - q1q3) - mx) + (_2bx * q2 + _2bz * q4) * (_2bx * (q2q3 - q1q4) + _2bz * (q1q2 + q3q4) - my) + (_2bx * q1 - _4bz * q3) * (_2bx * (q1q3 + q2q4) + _2bz * (0.5f - q2q2 - q3q3) - mz);
s4 = _2q2 * (2f * q2q4 - _2q1q3 - ax) + _2q3 * (2f * q1q2 + _2q3q4 - ay) + (-_4bx * q4 + _2bz * q2) * (_2bx * (0.5f - q3q3 - q4q4) + _2bz * (q2q4 - q1q3) - mx) + (-_2bx * q1 + _2bz * q3) * (_2bx * (q2q3 - q1q4) + _2bz * (q1q2 + q3q4) - my) + _2bx * q2 * (_2bx * (q1q3 + q2q4) + _2bz * (0.5f - q2q2 - q3q3) - mz);
norm = 1f / (float)Mathf.Sqrt(s1 * s1 + s2 * s2 + s3 * s3 + s4 * s4); // normalise step magnitude
s1 *= norm;
s2 *= norm;
s3 *= norm;
s4 *= norm;
// Compute rate of change of quaternion
qDot1 = 0.5f * (-q2 * gx - q3 * gy - q4 * gz) - Beta * s1;
qDot2 = 0.5f * (q1 * gx + q3 * gz - q4 * gy) - Beta * s2;
qDot3 = 0.5f * (q1 * gy - q2 * gz + q4 * gx) - Beta * s3;
qDot4 = 0.5f * (q1 * gz + q2 * gy - q3 * gx) - Beta * s4;
// Integrate to yield quaternion
q1 += qDot1 * SamplePeriod;
q2 += qDot2 * SamplePeriod;
q3 += qDot3 * SamplePeriod;
q4 += qDot4 * SamplePeriod;
norm = 1f / (float)Mathf.Sqrt(q1 * q1 + q2 * q2 + q3 * q3 + q4 * q4); // normalise quaternion
quat[0] = q1 * norm;
quat[1] = q2 * norm;
quat[2] = q3 * norm;
quat[3] = q4 * norm;
}
// NOT DONE YET
public void MahonyQuaternionUpdate(float gz, float gx, float gy, float az, float ax, float ay, float mz, float mx, float my)
{
float q1 = quat[0], q2 = quat[1], q3 = quat[2], q4 = quat[3]; // short name local variable for readability
float norm;
float hx, hy, bx, bz;
float vx, vy, vz, wx, wy, wz;
float ex, ey, ez;
float pa, pb, pc;
// Auxiliary variables to avoid repeated arithmetic
float q1q1 = q1 * q2;
float q1q2 = q1 * q2;
float q1q3 = q1 * q3;
float q1q4 = q1 * q4;
float q2q2 = q2 * q2;
float q2q3 = q2 * q3;
float q2q4 = q2 * q4;
float q3q3 = q3 * q3;
float q3q4 = q3 * q4;
float q4q4 = q4 * q4;
// Normalise accelerometer measurement
norm = (float)Mathf.Sqrt(ax * ax + ay * ay + az * az);
if (norm == 0f) return;
norm = 1.0f / norm;
mx *= norm;
my *= norm;
mz *= norm;
// Reference direction of Earth's magnetic field
hx = 2.0f * mx * (0.5f - q3q3 - q4q4) + 2.0f * my * (q2q3 - q1q4) + 2.0f * mz * (q2q4 + q1q3);
hy = 2.0f * mx * (q2q3 + q1q4) + 2.0f * my * (0.5f - q2q2 + q4q4) + 2.0f * mz * (q3q4 - q1q2);
bx = (float)Mathf.Sqrt((hx * hx) + (hy * hy));
bz = 2.0f * mx * (q2q4 - q1q3) + 2.0f * my * (q3q4 + q1q2) + 2.0f * mz * (0.5f - q2q2 - q3q3);
// Estimated direction of gravity and magnetic field
vx = 2.0f * (q2q4 - q1q3);
vy = 2.0f * (q1q2 + q3q4);
vz = q1q1 - q2q2 - q3q3 + q4q4;
wx = 2.0f * bx * (0.5f - q3q3 - q4q4) + 2.0f * bz * (q2q4 - q1q3);
wy = 2.0f * bx * (q2q3 - q1q4) + 2.0f * bz * (q1q2 + q3q4);
wz = 2.0f * bx * (q1q3 + q2q4) + 2.0f * bz * (0.5f - q2q2 - q3q3);
// Error is cross product between estimated direction and measured direction of gravity
ex = (ay * vz - az * vy) + (my * wz - mz * wy);
ey = (az * vx - ax * vz) + (mz * wx - mx * wz);
ez = (ax * vy - ay * vx) + (mx * wy - my * wx);
/*
*
* unfinished business
* need to keep working
* the below is still just copied from above for reference,
* so therefore the below code has no significance and once reach
* near the same point delete
*
* also have no idea what Ki is above so need to check it out.
* otherwise the code will bork itself
*
* end
*
* */
/*
if (Ki > 0.0f)
{
eInt[0] += ex;
// Gradient decent algorithm corrective step
s1 = -_2q3 * (2f * q2q4 - _2q1q3 - ax) + _2q2 * (2f * q1q2 + _2q3q4 - ay) - _2bz * q3 * (_2bx * (0.5f - q3q3 - q4q4) + _2bz * (q2q4 - q1q3) - mx) + (-_2bx * q4 + _2bz * q2) * (_2bx * (q2q3 - q1q4) + _2bz * (q1q2 + q3q4) - my) + _2bx * q3 * (_2bx * (q1q3 + q2q4) + _2bz * (0.5f - q2q2 - q3q3) - mz);
s2 = _2q4 * (2f * q2q4 - _2q1q3 - ax) + _2q1 * (2f * q1q2 + _2q3q4 - ay) - 4f * q2 * (1 - 2f * q2q2 - 2f * q3q3 - az) + _2bz * q4 * (_2bx * (0.5f - q3q3 - q4q4) + _2bz * (q2q4 - q1q3) - mx) + (_2bx * q3 + _2bz * q1) * (_2bx * (q2q3 - q1q4) + _2bz * (q1q2 + q3q4) - my) + (_2bx * q4 - _4bz * q2) * (_2bx * (q1q3 + q2q4) + _2bz * (0.5f - q2q2 - q3q3) - mz);
s3 = -_2q1 * (2f * q2q4 - _2q1q3 - ax) + _2q4 * (2f * q1q2 + _2q3q4 - ay) - 4f * q3 * (1 - 2f * q2q2 - 2f * q3q3 - az) + (-_4bx * q3 - _2bz * q1) * (_2bx * (0.5f - q3q3 - q4q4) + _2bz * (q2q4 - q1q3) - mx) + (_2bx * q2 + _2bz * q4) * (_2bx * (q2q3 - q1q4) + _2bz * (q1q2 + q3q4) - my) + (_2bx * q1 - _4bz * q3) * (_2bx * (q1q3 + q2q4) + _2bz * (0.5f - q2q2 - q3q3) - mz);
s4 = _2q2 * (2f * q2q4 - _2q1q3 - ax) + _2q3 * (2f * q1q2 + _2q3q4 - ay) + (-_4bx * q4 + _2bz * q2) * (_2bx * (0.5f - q3q3 - q4q4) + _2bz * (q2q4 - q1q3) - mx) + (-_2bx * q1 + _2bz * q3) * (_2bx * (q2q3 - q1q4) + _2bz * (q1q2 + q3q4) - my) + _2bx * q2 * (_2bx * (q1q3 + q2q4) + _2bz * (0.5f - q2q2 - q3q3) - mz);
norm = 1f / (float)Mathf.Sqrt(s1 * s1 + s2 * s2 + s3 * s3 + s4 * s4); // normalise step magnitude
s1 *= norm;
s2 *= norm;
s3 *= norm;
s4 *= norm;
// Compute rate of change of quaternion
qDot1 = 0.5f * (-q2 * gx - q3 * gy - q4 * gz) - Beta * s1;
qDot2 = 0.5f * (q1 * gx + q3 * gz - q4 * gy) - Beta * s2;
qDot3 = 0.5f * (q1 * gy - q2 * gz + q4 * gx) - Beta * s3;
qDot4 = 0.5f * (q1 * gz + q2 * gy - q3 * gx) - Beta * s4;
// Integrate to yield quaternion
q1 += qDot1 * SamplePeriod;
q2 += qDot2 * SamplePeriod;
q3 += qDot3 * SamplePeriod;
q4 += qDot4 * SamplePeriod;
norm = 1f / (float)Mathf.Sqrt(q1 * q1 + q2 * q2 + q3 * q3 + q4 * q4); // normalise quaternion
quat[0] = q1 * norm;
quat[1] = q2 * norm;
quat[2] = q3 * norm;
quat[3] = q4 * norm;
*/
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using System.IO.Ports;
public class DatasetParser : MonoBehaviour {
[Header("Serial Connect")]
public SerialPort sp = new SerialPort("COM3", 115200); // Change Port
public string rawInput = "";
[Header("Sensitivity")]
public float accelerometerSensitivity = 16384f;
public float gyroscopeSensitivity = 131f;
public float magnetometerSensitivity = 0.6f;
public float truncateFactor = 1000;
[Header("Debug Mode")]
public bool debug;
[SerializeField] float axDebug = 0f;
[SerializeField] float ayDebug = 0f;
[SerializeField] float azDebug = 0f;
[SerializeField] float gxDebug = 0f;
[SerializeField] float gyDebug = 0f;
[SerializeField] float gzDebug = 0f;
[SerializeField] float mxDebug = 0f;
[SerializeField] float myDebug = 0f;
[SerializeField] float mzDebug = 0f;
// Parse parameters
[Header("Parsing")]
public TextAsset dataSet;
private char lineSeparator = '\n';
private char fieldSeparator = '\t';
// Info
private string[] rawStates;
public int parseIndex = 3;
string[] stateInfo; //used to be no public
float deltat; //added to read deltat from arduino code
// IMU Dataset Consts
[Header("IMU Processing")]
[SerializeField] int axIndex = 1;
[SerializeField] int ayIndex = 2;
[SerializeField] int azIndex = 3;
[SerializeField] int gxIndex = 7;
[SerializeField] int gyIndex = 8;
[SerializeField] int gzIndex = 9;
[SerializeField] int mxIndex = 10;
[SerializeField] int myIndex = 11;
[SerializeField] int mzIndex = 12;
[SerializeField] float ax = 0f;
[SerializeField] float ay = 0f;
[SerializeField] float az = 0f;
[SerializeField] float gx = 0f;
[SerializeField] float gy = 0f;
[SerializeField] float gz = 0f;
[SerializeField] float mx = 0f;
[SerializeField] float my = 0f;
[SerializeField] float mz = 0f;
[Header("Tranformation")]
Quaternion currRotation;
public Transform cube;
void Start () {
if (!debug)
{
sp.Open();
sp.ReadTimeout = 1;
}
ParseData();
//deltat = float.Parse(stateInfo[0]);
InvokeRepeating("HandleImu", 2f, 0.5f); //last number default 0.1f, should tecnnically be the same as delta t (0.5f seconds), now 0.25f
}
/*void FixedUpdate () {
if (debug)
DebugState();
else
ReadState();
UpdateCube();
}*/
void HandleImu()
{
if (debug)
{
DebugState();
}
else
{
//ReadState();
ReadFromConector();
}
UpdateCube();
}
void UpdateCube()
{
// Unity Compensation
currRotation = Cleaner.instance.GetQuaternionData(gz, gx, gy, az, ax, ay, mz, mx, my);
// General
//currRotation = Cleaner.instance.GetQuaternionData(gx, gy, gz, ax, ay, az, mx, my, mz);
cube.rotation = currRotation;
}
void DebugState()
{
ax = axDebug/* / accelerometerSensitivity*/;
ay = ayDebug /*/ accelerometerSensitivity*/;
az = azDebug/* / accelerometerSensitivity*/;
gx = gxDebug/* / gyroscopeSensitivity * Mathf.PI / 180*/;
gy = gyDebug/* / gyroscopeSensitivity * Mathf.PI / 180*/;
gz = gzDebug /*/ gyroscopeSensitivity * Mathf.PI / 180*/;
mx = mxDebug /*/ magnetometerSensitivity*/;
my = myDebug /*/ magnetometerSensitivity*/;
mz = mzDebug /*/ magnetometerSensitivity*/;
}
void ReadFromConector()
{
rawInput = sp.ReadLine();
stateInfo = rawInput.Split('\t');
print((float.Parse(stateInfo[4]) / gyroscopeSensitivity) + " "
+ (float.Parse(stateInfo[5]) / gyroscopeSensitivity) + " "
+ (float.Parse(stateInfo[6]) / gyroscopeSensitivity));
ax = float.Parse(stateInfo[1]) / accelerometerSensitivity;
ay = float.Parse(stateInfo[2]) / accelerometerSensitivity;
az = float.Parse(stateInfo[3]) / accelerometerSensitivity;
gx = float.Parse(stateInfo[4]) / gyroscopeSensitivity * Mathf.PI/180;
gy = float.Parse(stateInfo[5]) / gyroscopeSensitivity * Mathf.PI / 180;
gz = float.Parse(stateInfo[6]) / gyroscopeSensitivity * Mathf.PI / 180;
mx = float.Parse(stateInfo[7]) / magnetometerSensitivity;
my = float.Parse(stateInfo[8]) / magnetometerSensitivity;
mz = float.Parse(stateInfo[9]) / magnetometerSensitivity;
// Truncate (sig figs?)
ax = Mathf.Round(ax * truncateFactor) / truncateFactor;
ay = Mathf.Round(ay * truncateFactor) / truncateFactor;
az = Mathf.Round(az * truncateFactor) / truncateFactor;
gx = Mathf.Round(gx * truncateFactor) / truncateFactor;
gy = Mathf.Round(gy * truncateFactor) / truncateFactor;
gz = Mathf.Round(gz * truncateFactor) / truncateFactor;
mx = Mathf.Round(mx * truncateFactor) / truncateFactor;
my = Mathf.Round(my * truncateFactor) / truncateFactor;
mz = Mathf.Round(mz * truncateFactor) / truncateFactor;
}
void ReadState()
{
if (parseIndex >= rawStates.Length) return;
stateInfo = rawStates[parseIndex].Split(fieldSeparator);
//print(stateInfo[1]);
ax = float.Parse(stateInfo[axIndex]) / accelerometerSensitivity;
ay = float.Parse(stateInfo[ayIndex]) / accelerometerSensitivity;
az = float.Parse(stateInfo[azIndex]) / accelerometerSensitivity;
gx = float.Parse(stateInfo[gxIndex]) / gyroscopeSensitivity * Mathf.PI / 180;
gy = float.Parse(stateInfo[gyIndex]) / gyroscopeSensitivity * Mathf.PI / 180;
gz = float.Parse(stateInfo[gzIndex]) / gyroscopeSensitivity * Mathf.PI / 180;
mx = float.Parse(stateInfo[mxIndex]) / magnetometerSensitivity;
my = float.Parse(stateInfo[myIndex]) / magnetometerSensitivity;
mz = float.Parse(stateInfo[mzIndex]) / magnetometerSensitivity;
//print(ax + " " + ay + " " + az + " " + gx + " " + gy + " " + gz + " " + mx + " " + my + " " + mz);
// Truncate
ax = Mathf.Round(ax * truncateFactor) / truncateFactor;
ay = Mathf.Round(ay * truncateFactor) / truncateFactor;
az = Mathf.Round(az * truncateFactor) / truncateFactor;
gx = Mathf.Round(gx * truncateFactor) / truncateFactor;
gy = Mathf.Round(gy * truncateFactor) / truncateFactor;
gz = Mathf.Round(gz * truncateFactor) / truncateFactor;
mx = Mathf.Round(mx * truncateFactor) / truncateFactor;
my = Mathf.Round(my * truncateFactor) / truncateFactor;
mz = Mathf.Round(mz * truncateFactor) / truncateFactor;
parseIndex++;
}
void ParseData()
{
rawStates = dataSet.text.Split(lineSeparator);
}
}
/* MPU9250 Basic Example Code
by: Kris Winer
date: April 1, 2014
license: Beerware - Use this code however you'd like. If you
find it useful you can buy me a beer some time.
Modified by Brent Wilkins July 19, 2016
Demonstrate basic MPU-9250 functionality including parameterizing the register
addresses, initializing the sensor, getting properly scaled accelerometer,
gyroscope, and magnetometer data out. Added display functions to allow display
to on breadboard monitor. Addition of 9 DoF sensor fusion using open source
Madgwick and Mahony filter algorithms. Sketch runs on the 3.3 V 8 MHz Pro Mini
and the Teensy 3.1.
SDA and SCL should have external pull-up resistors (to 3.3V).
10k resistors are on the EMSENSR-9250 breakout board.
Hardware setup:
MPU9250 Breakout --------- Arduino
VDD ---------------------- 3.3V
VDDI --------------------- 3.3V
SDA ----------------------- A4
SCL ----------------------- A5
GND ---------------------- GND
*/
#include "quaternionFilters.h"
#include "MPU9250.h"
#define AHRS true // Set to false for basic data read
#define SerialDebug true // Set to true to get Serial output for debugging
#define Information false // Set to true to get imu info
// Pin definitions
int intPin = 12; // These can be changed, 2 and 3 are the Arduinos ext int pins
int myLed = 13; // Set up pin 13 led for toggling
MPU9250 myIMU;
void setup()
{
Wire.begin();
// TWBR = 12; // 400 kbit/sec I2C speed
Serial.begin(115200);
// Set up the interrupt pin, its set as active high, push-pull
pinMode(intPin, INPUT);
digitalWrite(intPin, LOW);
pinMode(myLed, OUTPUT);
digitalWrite(myLed, HIGH);
// Read the WHO_AM_I register, this is a good test of communication
byte c = myIMU.readByte(MPU9250_ADDRESS, WHO_AM_I_MPU9250);
Serial.print("MPU9250 "); Serial.print("I AM "); Serial.print(c, HEX);
Serial.print(" I should be "); Serial.println(0x71, HEX);
if (c == 0x71) // WHO_AM_I should always be 0x68
{
Serial.println("MPU9250 is online...");
// Start by performing self test and reporting values
myIMU.MPU9250SelfTest(myIMU.SelfTest);
if(Information)
{
Serial.print("x-axis self test: acceleration trim within : ");
Serial.print(myIMU.SelfTest[0],1); Serial.println("% of factory value");
Serial.print("y-axis self test: acceleration trim within : ");
Serial.print(myIMU.SelfTest[1],1); Serial.println("% of factory value");
Serial.print("z-axis self test: acceleration trim within : ");
Serial.print(myIMU.SelfTest[2],1); Serial.println("% of factory value");
Serial.print("x-axis self test: gyration trim within : ");
Serial.print(myIMU.SelfTest[3],1); Serial.println("% of factory value");
Serial.print("y-axis self test: gyration trim within : ");
Serial.print(myIMU.SelfTest[4],1); Serial.println("% of factory value");
Serial.print("z-axis self test: gyration trim within : ");
Serial.print(myIMU.SelfTest[5],1); Serial.println("% of factory value");
}
// Calibrate gyro and accelerometers, load biases in bias registers
myIMU.calibrateMPU9250(myIMU.gyroBias, myIMU.accelBias);
myIMU.initMPU9250();
// Initialize device for active mode read of acclerometer, gyroscope, and
// temperature
Serial.println("MPU9250 initialized for active data mode....");
// Read the WHO_AM_I register of the magnetometer, this is a good test of
// communication
byte d = myIMU.readByte(AK8963_ADDRESS, WHO_AM_I_AK8963);
if(Information){
Serial.print("AK8963 "); Serial.print("I AM "); Serial.print(d, HEX);
Serial.print(" I should be "); Serial.println(0x48, HEX);
}
// Get magnetometer calibration from AK8963 ROM
myIMU.initAK8963(myIMU.magCalibration);
// Initialize device for active mode read of magnetometer
Serial.println("AK8963 initialized for active data mode....");
if (SerialDebug && Information)
{
Serial.println("Calibration values: ");
Serial.print("X-Axis sensitivity adjustment value ");
Serial.println(myIMU.magCalibration[0], 2);
Serial.print("Y-Axis sensitivity adjustment value ");
Serial.println(myIMU.magCalibration[1], 2);
Serial.print("Z-Axis sensitivity adjustment value ");
Serial.println(myIMU.magCalibration[2], 2);
}
} // if (c == 0x71)
else
{
Serial.print("Could not connect to MPU9250: 0x");
Serial.println(c, HEX);
while(1) ; // Loop forever if communication doesn't happen
}
}
void loop()
{
// If intPin goes high, all data registers have new data
// On interrupt, check if data ready interrupt
if (myIMU.readByte(MPU9250_ADDRESS, INT_STATUS) & 0x01)
{
myIMU.readAccelData(myIMU.accelCount); // Read the x/y/z adc values
myIMU.getAres();
// Now we'll calculate the accleration value into actual g's
// This depends on scale being set
myIMU.ax = (float)myIMU.accelCount[0]*myIMU.aRes; // - accelBias[0];
myIMU.ay = (float)myIMU.accelCount[1]*myIMU.aRes; // - accelBias[1];
myIMU.az = (float)myIMU.accelCount[2]*myIMU.aRes; // - accelBias[2];
myIMU.readGyroData(myIMU.gyroCount); // Read the x/y/z adc values
myIMU.getGres();
// Calculate the gyro value into actual degrees per second
// This depends on scale being set
myIMU.gx = (float)myIMU.gyroCount[0]*myIMU.gRes;
myIMU.gy = (float)myIMU.gyroCount[1]*myIMU.gRes;
myIMU.gz = (float)myIMU.gyroCount[2]*myIMU.gRes;
myIMU.readMagData(myIMU.magCount); // Read the x/y/z adc values
myIMU.getMres();
// User environmental x-axis correction in milliGauss, should be
// automatically calculated
myIMU.magbias[0] = +470.;
// User environmental x-axis correction in milliGauss TODO axis??
myIMU.magbias[1] = +120.;
// User environmental x-axis correction in milliGauss
myIMU.magbias[2] = +125.;
// Calculate the magnetometer values in milliGauss
// Include factory calibration per data sheet and user environmental
// corrections
// Get actual magnetometer value, this depends on scale being set
myIMU.mx = (float)myIMU.magCount[0]*myIMU.mRes*myIMU.magCalibration[0] -
myIMU.magbias[0];
myIMU.my = (float)myIMU.magCount[1]*myIMU.mRes*myIMU.magCalibration[1] -
myIMU.magbias[1];
myIMU.mz = (float)myIMU.magCount[2]*myIMU.mRes*myIMU.magCalibration[2] -
myIMU.magbias[2];
} // if (readByte(MPU9250_ADDRESS, INT_STATUS) & 0x01)
// Must be called before updating quaternions!
myIMU.updateTime();
// Sensors x (y)-axis of the accelerometer is aligned with the y (x)-axis of
// the magnetometer; the magnetometer z-axis (+ down) is opposite to z-axis
// (+ up) of accelerometer and gyro! We have to make some allowance for this
// orientationmismatch in feeding the output to the quaternion filter. For the
// MPU-9250, we have chosen a magnetic rotation that keeps the sensor forward
// along the x-axis just like in the LSM9DS0 sensor. This rotation can be
// modified to allow any convenient orientation convention. This is ok by
// aircraft orientation standards! Pass gyro rate as rad/s
// MadgwickQuaternionUpdate(ax, ay, az, gx*PI/180.0f, gy*PI/180.0f, gz*PI/180.0f, my, mx, mz);
MahonyQuaternionUpdate(myIMU.ax, myIMU.ay, myIMU.az, myIMU.gx*DEG_TO_RAD,
myIMU.gy*DEG_TO_RAD, myIMU.gz*DEG_TO_RAD, myIMU.my,
myIMU.mx, myIMU.mz, myIMU.deltat);
if (!AHRS)
{
myIMU.delt_t = millis() - myIMU.count;
if (myIMU.delt_t > 500)
{
if(SerialDebug)
{
// Print acceleration values in milligs!
Serial.print("X-acceleration: "); Serial.print(1000*myIMU.ax);
Serial.print(" mg ");
Serial.print("Y-acceleration: "); Serial.print(1000*myIMU.ay);
Serial.print(" mg ");
Serial.print("Z-acceleration: "); Serial.print(1000*myIMU.az);
Serial.println(" mg ");
// Print gyro values in degree/sec
Serial.print("X-gyro rate: "); Serial.print(myIMU.gx, 3);
Serial.print(" degrees/sec ");
Serial.print("Y-gyro rate: "); Serial.print(myIMU.gy, 3);
Serial.print(" degrees/sec ");
Serial.print("Z-gyro rate: "); Serial.print(myIMU.gz, 3);
Serial.println(" degrees/sec");
// Print mag values in degree/sec
Serial.print("X-mag field: "); Serial.print(myIMU.mx);
Serial.print(" mG ");
Serial.print("Y-mag field: "); Serial.print(myIMU.my);
Serial.print(" mG ");
Serial.print("Z-mag field: "); Serial.print(myIMU.mz);
Serial.println(" mG");
myIMU.tempCount = myIMU.readTempData(); // Read the adc values
// Temperature in degrees Centigrade
myIMU.temperature = ((float) myIMU.tempCount) / 333.87 + 21.0;
// Print temperature in degrees Centigrade
Serial.print("Temperature is "); Serial.print(myIMU.temperature, 1);
Serial.println(" degrees C");
}
myIMU.count = millis();
digitalWrite(myLed, !digitalRead(myLed)); // toggle led
} // if (myIMU.delt_t > 500)
} // if (!AHRS)
else
{
// Serial print and/or display at 0.5 s rate independent of data rates
myIMU.delt_t = millis() - myIMU.count;
// update LCD once per half-second independent of read rate
if (myIMU.delt_t > 500)
{
if(SerialDebug)
{
// time
Serial.print (myIMU.delt_t);
Serial.print("\t");
//Serial.print("ax = ");
Serial.print(round((int)1000*myIMU.ax));
Serial.print ("\t");
//Serial.print(" ay = ");
Serial.print(round((int)1000*myIMU.ay ));
Serial.print ("\t");
//Serial.print(" az = ");
Serial.print(round((int)1000*myIMU.az));
Serial.print ("\t");
//Serial.println(" mg");
//Serial.print("gx = ");
Serial.print( round(myIMU.gx)); //leaves in degrees per sec
//* 3.14159/180));
//, 2);
Serial.print ("\t");
//Serial.print(" gy = ");
Serial.print(round( myIMU.gy));
//* 3.14159/180));
//, 2);
Serial.print ("\t");
//Serial.print(" gz = ");
Serial.print( round(myIMU.gz));
//* 3.14159/180));
//, 2);
Serial.print ("\t");
//Serial.println(" deg/s");
//Serial.print("mx = ");
Serial.print( round((int)myIMU.mx) );
Serial.print ("\t");
//Serial.print(" my = ");
Serial.print( round((int)myIMU.my) );
Serial.print ("\t");
//Serial.print(" mz = ");
Serial.print( round((int)myIMU.mz) );
//Serial.print("/t");
/** Quarternions */
/*
Serial.print(*getQ());
Serial.print("\t");
Serial.print(*(getQ() + 1));
Serial.print("\t");
Serial.print(*(getQ() + 2));
Serial.print("\t");
Serial.println(*(getQ() + 3));
Serial.println("");
//Serial.println(" mG");
*/
Serial.println("");
/*
Serial.print("q0 = "); Serial.print(*getQ());
Serial.print(" qx = "); Serial.print(*(getQ() + 1));
Serial.print(" qy = "); Serial.print(*(getQ() + 2));
Serial.print(" qz = "); Serial.println(*(getQ() + 3));
*/
}
// Define output variables from updated quaternion---these are Tait-Bryan
// angles, commonly used in aircraft orientation. In this coordinate system,
// the positive z-axis is down toward Earth. Yaw is the angle between Sensor
// x-axis and Earth magnetic North (or true North if corrected for local
// declination, looking down on the sensor positive yaw is counterclockwise.
// Pitch is angle between sensor x-axis and Earth ground plane, toward the
// Earth is positive, up toward the sky is negative. Roll is angle between
// sensor y-axis and Earth ground plane, y-axis up is positive roll. These
// arise from the definition of the homogeneous rotation matrix constructed
// from quaternions. Tait-Bryan angles as well as Euler angles are
// non-commutative; that is, the get the correct orientation the rotations
// must be applied in the correct order which for this configuration is yaw,
// pitch, and then roll.
// For more see
// http://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles
// which has additional links.
myIMU.yaw = atan2(2.0f * (*(getQ()+1) * *(getQ()+2) + *getQ() *
*(getQ()+3)), *getQ() * *getQ() + *(getQ()+1) * *(getQ()+1)
- *(getQ()+2) * *(getQ()+2) - *(getQ()+3) * *(getQ()+3));
myIMU.pitch = -asin(2.0f * (*(getQ()+1) * *(getQ()+3) - *getQ() *
*(getQ()+2)));
myIMU.roll = atan2(2.0f * (*getQ() * *(getQ()+1) + *(getQ()+2) *
*(getQ()+3)), *getQ() * *getQ() - *(getQ()+1) * *(getQ()+1)
- *(getQ()+2) * *(getQ()+2) + *(getQ()+3) * *(getQ()+3));
myIMU.pitch *= RAD_TO_DEG;
myIMU.yaw *= RAD_TO_DEG;
// Declination of SparkFun Electronics (4005'26.6"N 10511'05.9"W) is
// 8 30' E 0 21' (or 8.5) on 2016-07-19
// - http://www.ngdc.noaa.gov/geomag-web/#declination
// Declination of XYZ place (3739'45.9"N 12150'33.3"W)
//(Pleasanton, California) 13.32 E 0.34 on 2018-08-29, changing by 0.10W per year
//myIMU.yaw -= 8.5;
myIMU.yaw -= 13.32;
myIMU.roll *= RAD_TO_DEG;
if(SerialDebug)
{
/*
Serial.print("Yaw, Pitch, Roll: ");
Serial.print(myIMU.yaw, 2);
Serial.print(", ");
Serial.print(myIMU.pitch, 2);
Serial.print(", ");
Serial.println(myIMU.roll, 2);
*/
/*
Serial.print("rate = ");
Serial.print((float)myIMU.sumCount/myIMU.sum, 2);
Serial.println(" Hz");
*/
}
myIMU.count = millis();
myIMU.sumCount = 0;
myIMU.sum = 0;
} // if (myIMU.delt_t > 500)
} // if (AHRS)
}
SampleScene.unity
C#%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!29 &1
OcclusionCullingSettings:
m_ObjectHideFlags: 0
serializedVersion: 2
m_OcclusionBakeSettings:
smallestOccluder: 5
smallestHole: 0.25
backfaceThreshold: 100
m_SceneGUID: 00000000000000000000000000000000
m_OcclusionCullingData: {fileID: 0}
--- !u!104 &2
RenderSettings:
m_ObjectHideFlags: 0
serializedVersion: 9
m_Fog: 0
m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
m_FogMode: 3
m_FogDensity: 0.01
m_LinearFogStart: 0
m_LinearFogEnd: 300
m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
m_AmbientIntensity: 1
m_AmbientMode: 0
m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
m_HaloStrength: 0.5
m_FlareStrength: 1
m_FlareFadeSpeed: 3
m_HaloTexture: {fileID: 0}
m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
m_DefaultReflectionMode: 0
m_DefaultReflectionResolution: 128
m_ReflectionBounces: 1
m_ReflectionIntensity: 1
m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 0}
m_IndirectSpecularColor: {r: 0.44657898, g: 0.4964133, b: 0.5748178, a: 1}
m_UseRadianceAmbientProbe: 0
--- !u!157 &3
LightmapSettings:
m_ObjectHideFlags: 0
serializedVersion: 11
m_GIWorkflowMode: 0
m_GISettings:
serializedVersion: 2
m_BounceScale: 1
m_IndirectOutputScale: 1
m_AlbedoBoost: 1
m_TemporalCoherenceThreshold: 1
m_EnvironmentLightingMode: 0
m_EnableBakedLightmaps: 1
m_EnableRealtimeLightmaps: 0
m_LightmapEditorSettings:
serializedVersion: 10
m_Resolution: 2
m_BakeResolution: 10
m_AtlasSize: 512
m_AO: 0
m_AOMaxDistance: 1
m_CompAOExponent: 1
m_CompAOExponentDirect: 0
m_Padding: 2
m_LightmapParameters: {fileID: 0}
m_LightmapsBakeMode: 1
m_TextureCompression: 1
m_FinalGather: 0
m_FinalGatherFiltering: 1
m_FinalGatherRayCount: 256
m_ReflectionCompression: 2
m_MixedBakeMode: 2
m_BakeBackend: 1
m_PVRSampling: 1
m_PVRDirectSampleCount: 32
m_PVRSampleCount: 256
m_PVRBounces: 2
m_PVRFilterTypeDirect: 0
m_PVRFilterTypeIndirect: 0
m_PVRFilterTypeAO: 0
m_PVRFilteringMode: 1
m_PVRCulling: 1
m_PVRFilteringGaussRadiusDirect: 1
m_PVRFilteringGaussRadiusIndirect: 5
m_PVRFilteringGaussRadiusAO: 2
m_PVRFilteringAtrousPositionSigmaDirect: 0.5
m_PVRFilteringAtrousPositionSigmaIndirect: 2
m_PVRFilteringAtrousPositionSigmaAO: 1
m_ShowResolutionOverlay: 1
m_LightingDataAsset: {fileID: 0}
m_UseShadowmask: 1
--- !u!196 &4
NavMeshSettings:
serializedVersion: 2
m_ObjectHideFlags: 0
m_BuildSettings:
serializedVersion: 2
agentTypeID: 0
agentRadius: 0.5
agentHeight: 2
agentSlope: 45
agentClimb: 0.4
ledgeDropHeight: 0
maxJumpAcrossDistance: 0
minRegionArea: 2
manualCellSize: 0
cellSize: 0.16666667
manualTileSize: 0
tileSize: 256
accuratePlacement: 0
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
--- !u!1 &170076733
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 170076735}
- component: {fileID: 170076734}
m_Layer: 0
m_Name: Directional Light
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!108 &170076734
Light:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 170076733}
m_Enabled: 1
serializedVersion: 8
m_Type: 1
m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
m_Intensity: 1
m_Range: 10
m_SpotAngle: 30
m_CookieSize: 10
m_Shadows:
m_Type: 2
m_Resolution: -1
m_CustomResolution: -1
m_Strength: 1
m_Bias: 0.05
m_NormalBias: 0.4
m_NearPlane: 0.2
m_Cookie: {fileID: 0}
m_DrawHalo: 0
m_Flare: {fileID: 0}
m_RenderMode: 0
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_Lightmapping: 1
m_LightShadowCasterMode: 0
m_AreaSize: {x: 1, y: 1}
m_BounceIntensity: 1
m_ColorTemperature: 6570
m_UseColorTemperature: 0
m_ShadowRadius: 0
m_ShadowAngle: 0
--- !u!4 &170076735
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 170076733}
m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
m_LocalPosition: {x: 0, y: 3, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
--- !u!1 &282840810
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 282840814}
- component: {fileID: 282840813}
- component: {fileID: 282840811}
m_Layer: 0
m_Name: Main Camera
m_TagString: MainCamera
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!81 &282840811
AudioListener:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 282840810}
m_Enabled: 1
--- !u!20 &282840813
Camera:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 282840810}
m_Enabled: 1
serializedVersion: 2
m_ClearFlags: 1
m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
m_projectionMatrixMode: 1
m_SensorSize: {x: 36, y: 24}
m_LensShift: {x: 0, y: 0}
m_FocalLength: 50
m_NormalizedViewPortRect:
serializedVersion: 2
x: 0
y: 0
width: 1
height: 1
near clip plane: 0.3
far clip plane: 1000
field of view: 60
orthographic: 0
orthographic size: 5
m_Depth: -1
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_RenderingPath: -1
m_TargetTexture: {fileID: 0}
m_TargetDisplay: 0
m_TargetEye: 3
m_HDR: 1
m_AllowMSAA: 1
m_AllowDynamicResolution: 0
m_ForceIntoRT: 1
m_OcclusionCulling: 1
m_StereoConvergence: 10
m_StereoSeparation: 0.022
--- !u!4 &282840814
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 282840810}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 1, z: -10}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &359781717
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 359781721}
- component: {fileID: 359781720}
- component: {fileID: 359781719}
- component: {fileID: 359781718}
m_Layer: 0
m_Name: Cube
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!65 &359781718
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 359781717}
m_Material: {fileID: 0}
m_IsTrigger: 0
m_Enabled: 1
serializedVersion: 2
m_Size: {x: 1, y: 1, z: 1}
m_Center: {x: 0, y: 0, z: 0}
--- !u!23 &359781719
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 359781717}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RenderingLayerMask: 4294967295
m_Materials:
- {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
--- !u!33 &359781720
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 359781717}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!4 &359781721
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 359781717}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 0.2260268, z: 2.0065644}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &618750917
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 618750918}
- component: {fileID: 618750919}
m_Layer: 0
m_Name: Right Hand
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &618750918
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 618750917}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 638365778}
- {fileID: 1834950146}
- {fileID: 1342024134}
- {fileID: 1156108526}
- {fileID: 2126949329}
- {fileID: 649102870}
m_Father: {fileID: 1634297806}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &618750919
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 618750917}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 97d3efc7a87236943b45c903b94f56f1, type: 3}
m_Name:
m_EditorClassIdentifier:
jointType: 1
wrist: {fileID: 638365779}
thumb: {fileID: 1834950147}
index: {fileID: 1342024135}
middle: {fileID: 1156108527}
ring: {fileID: 2126949330}
pinky: {fileID: 649102871}
--- !u!1 &638365777
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 638365778}
- component: {fileID: 638365779}
m_Layer: 0
m_Name: Wrist
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &638365778
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 638365777}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 618750918}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &638365779
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 638365777}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 7e9a3f3986544564fa640a3a2fa4835d, type: 3}
m_Name:
m_EditorClassIdentifier:
jointType: 7
rotationValues: {x: 0, y: 0, z: 0}
--- !u!1 &649102869
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 649102870}
- component: {fileID: 649102871}
m_Layer: 0
m_Name: Pinky
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &649102870
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 649102869}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 618750918}
m_RootOrder: 5
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &649102871
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 649102869}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 7e9a3f3986544564fa640a3a2fa4835d, type: 3}
m_Name:
m_EditorClassIdentifier:
jointType: 6
rotationValues: {x: 0, y: 0, z: 0}
--- !u!1 &715455438
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 715455439}
- component: {fileID: 715455440}
m_Layer: 0
m_Name: Ring
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &715455439
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 715455438}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 1375661944}
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &715455440
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 715455438}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 7e9a3f3986544564fa640a3a2fa4835d, type: 3}
m_Name:
m_EditorClassIdentifier:
jointType: 5
rotationValues: {x: 0, y: 0, z: 0}
--- !u!1 &1156108525
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1156108526}
- component: {fileID: 1156108527}
m_Layer: 0
m_Name: Middle
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1156108526
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1156108525}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 618750918}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1156108527
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1156108525}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 7e9a3f3986544564fa640a3a2fa4835d, type: 3}
m_Name:
m_EditorClassIdentifier:
jointType: 4
rotationValues: {x: 0, y: 0, z: 0}
--- !u!1 &1182598610
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1182598611}
- component: {fileID: 1182598612}
m_Layer: 0
m_Name: Middle
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1182598611
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1182598610}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 1375661944}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1182598612
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1182598610}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 7e9a3f3986544564fa640a3a2fa4835d, type: 3}
m_Name:
m_EditorClassIdentifier:
jointType: 4
rotationValues: {x: 0, y: 0, z: 0}
--- !u!1 &1342024133
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1342024134}
- component: {fileID: 1342024135}
m_Layer: 0
m_Name: Index
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1342024134
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1342024133}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 618750918}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1342024135
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1342024133}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 7e9a3f3986544564fa640a3a2fa4835d, type: 3}
m_Name:
m_EditorClassIdentifier:
jointType: 3
rotationValues: {x: 0, y: 0, z: 0}
--- !u!1 &1375661943
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1375661944}
- component: {fileID: 1375661945}
m_Layer: 0
m_Name: Left Hand
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1375661944
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1375661943}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 2139301569}
- {fileID: 1920256460}
- {fileID: 1734569599}
- {fileID: 1182598611}
- {fileID: 715455439}
- {fileID: 1489611121}
m_Father: {fileID: 1634297806}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1375661945
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1375661943}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 97d3efc7a87236943b45c903b94f56f1, type: 3}
m_Name:
m_EditorClassIdentifier:
jointType: 0
wrist: {fileID: 2139301570}
thumb: {fileID: 1920256461}
index: {fileID: 1734569600}
middle: {fileID: 1182598612}
ring: {fileID: 715455440}
pinky: {fileID: 1489611122}
--- !u!1 &1489611120
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1489611121}
- component: {fileID: 1489611122}
m_Layer: 0
m_Name: Pinky
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1489611121
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1489611120}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 1375661944}
m_RootOrder: 5
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1489611122
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1489611120}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 7e9a3f3986544564fa640a3a2fa4835d, type: 3}
m_Name:
m_EditorClassIdentifier:
jointType: 6
rotationValues: {x: 0, y: 0, z: 0}
--- !u!1 &1634297804
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1634297806}
- component: {fileID: 1634297805}
- component: {fileID: 1634297807}
- component: {fileID: 1634297809}
- component: {fileID: 1634297808}
m_Layer: 0
m_Name: Manager
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &1634297805
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1634297804}
m_Enabled: 0
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 69efc1ee053c2584bb05fc39be1dc2fa, type: 3}
m_Name:
m_EditorClassIdentifier:
debugInput: 0
rawInput: "<leftHand> \t<wrist>12,12,12</wrist> \t<thumb>12,12,12</thumb> \t<index>12,12,12</index>
\t<middle>12,12,12</middle> \t<ring>12,12,12</ring> \t<pinky>12,12,12</pinky>
</leftHand> <rightHand> \t<wrist>12,12,12</wrist> \t<thumb>12,12,12</thumb> \t<index>12,12,12</index>
\t<middle>12,12,12</middle> \t<ring>12,12,12</ring> \t<pinky>12,12,12</pinky>
</rightHand>"
separators:
- ','
leftHand: {fileID: 1375661945}
rightHand: {fileID: 618750919}
--- !u!4 &1634297806
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1634297804}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 1375661944}
- {fileID: 618750918}
m_Father: {fileID: 0}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1634297807
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1634297804}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f95131f0b00481045aecb0720acf8392, type: 3}
m_Name:
m_EditorClassIdentifier:
SamplePeriod: 512
Beta: 20
quat:
- 1
- 0
- 0
- 0
--- !u!114 &1634297808
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1634297804}
m_Enabled: 0
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 423e01db97df98b4e9eb0352ebc16864, type: 3}
m_Name:
m_EditorClassIdentifier:
rawInput:
accelerometerSensitivity: 16384
gyroscopeSensitivity: 131
magnetometerSensitivity: 0.6
truncateFactor: 1000
debug: 0
axDebug: 0
ayDebug: 0
azDebug: 0
gxDebug: 0
gyDebug: 0
gzDebug: 0
mxDebug: 0
myDebug: 0
mzDebug: 0
dataSet: {fileID: 4900000, guid: ff342d1bba19e9c48a249264ed593c82, type: 3}
parseIndex: 3
axIndex: 1
ayIndex: 2
azIndex: 3
gxIndex: 7
gyIndex: 8
gzIndex: 9
mxIndex: 10
myIndex: 11
mzIndex: 12
ax: 0
ay: 0
az: 0
gx: 0
gy: 0
gz: 0
mx: 0
my: 0
mz: 0
cube: {fileID: 359781721}
--- !u!114 &1634297809
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1634297804}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5301478171ed98d4c957c7fe59f725ff, type: 3}
m_Name:
m_EditorClassIdentifier:
rawInput:
accelerometerSensitivity: 16384
gyroscopeSensitivity: 131
magnetometerSensitivity: 0.6
truncateFactor: 100
debug: 0
axDebug: 1
ayDebug: 0
azDebug: 0
gxDebug: 0
gyDebug: 0
gzDebug: 0
mxDebug: 1
myDebug: 0
mzDebug: 0
dataSet: {fileID: 4900000, guid: ff342d1bba19e9c48a249264ed593c82, type: 3}
parseIndex: 2500
axIndex: 1
ayIndex: 2
azIndex: 3
gxIndex: 7
gyIndex: 8
gzIndex: 9
mxIndex: 10
myIndex: 11
mzIndex: 12
ax: 0
ay: 0
az: 0
gx: 0
gy: 0
gz: 0
mx: 0
my: 0
mz: 0
cube: {fileID: 359781721}
--- !u!1 &1734569598
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1734569599}
- component: {fileID: 1734569600}
m_Layer: 0
m_Name: Index
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1734569599
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1734569598}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 1375661944}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1734569600
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1734569598}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 7e9a3f3986544564fa640a3a2fa4835d, type: 3}
m_Name:
m_EditorClassIdentifier:
jointType: 3
rotationValues: {x: 0, y: 0, z: 0}
--- !u!1 &1834950145
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1834950146}
- component: {fileID: 1834950147}
m_Layer: 0
m_Name: Thumb
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1834950146
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1834950145}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 618750918}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1834950147
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1834950145}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 7e9a3f3986544564fa640a3a2fa4835d, type: 3}
m_Name:
m_EditorClassIdentifier:
jointType: 2
rotationValues: {x: 0, y: 0, z: 0}
--- !u!1 &1920256459
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
serializedVersion: 6
...
This file has been truncated, please download it to see its full contents.
Comments