*
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
using UnityEngine;
|
||||
using System.Collections;
|
||||
|
||||
public class EngineRod : MonoBehaviour
|
||||
{
|
||||
public Transform anchor;
|
||||
public Transform piston;
|
||||
|
||||
public float rodLength;
|
||||
public Vector3 upVector;
|
||||
|
||||
private Vector3 startPosition;
|
||||
private Quaternion rotation;
|
||||
private Quaternion pistonRotation;
|
||||
// Use this for initialization
|
||||
void Start ()
|
||||
{
|
||||
upVector = piston.position - anchor.position;
|
||||
|
||||
rodLength = (transform.localPosition - transform.parent.InverseTransformPoint(piston.position)).magnitude;
|
||||
|
||||
upVector.Normalize();
|
||||
startPosition = transform.localPosition;
|
||||
upVector = transform.parent.InverseTransformVector(upVector);
|
||||
|
||||
rotation = transform.localRotation;
|
||||
pistonRotation = piston.localRotation;
|
||||
}
|
||||
|
||||
public float projectionDistance;
|
||||
// Update is called once per frame
|
||||
void Update () {
|
||||
if (anchor != null)
|
||||
{
|
||||
transform.position = anchor.position;
|
||||
|
||||
Ray r = new Ray(startPosition, upVector);
|
||||
var localPosProjected = r.Project(transform.localPosition);
|
||||
projectionDistance = (localPosProjected - transform.localPosition).magnitude;
|
||||
|
||||
float pistonOffset = Mathf.Sqrt(rodLength*rodLength - projectionDistance*projectionDistance);
|
||||
|
||||
float angle = (90.0f - Mathf.Asin(pistonOffset/rodLength) * Mathf.Rad2Deg) *- Mathf.Sign(Vector3.Dot(transform.localPosition - localPosProjected, Vector3.forward));
|
||||
|
||||
|
||||
transform.localRotation = Quaternion.AngleAxis(angle, Vector3.right) * rotation;
|
||||
|
||||
piston.localRotation = pistonRotation * Quaternion.AngleAxis(-angle, Vector3.right);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: dd6ab127f9809c7448d4d9b971a91c0b
|
||||
timeCreated: 1454273101
|
||||
licenseType: Free
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,21 @@
|
||||
using UnityEngine;
|
||||
using System.Collections;
|
||||
|
||||
public class RotationAnimation : MonoBehaviour
|
||||
{
|
||||
public Vector3 axis = Vector3.right;
|
||||
public float angle;
|
||||
|
||||
// Use this for initialization
|
||||
void Start () {
|
||||
|
||||
}
|
||||
|
||||
// Update is called once per frame
|
||||
void Update ()
|
||||
{
|
||||
transform.localRotation = Quaternion.AngleAxis(angle*Time.deltaTime, axis.normalized)* transform.localRotation;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: cefd9fdcf43268c488994d0c89f25194
|
||||
timeCreated: 1454272681
|
||||
licenseType: Free
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user