1
This repository has been archived on 2025-03-15. You can view files and clone it, but cannot push or open issues or pull requests.

105 lines
3.2 KiB
C#
Raw Normal View History

2025-03-15 20:02:21 +01:00
// Copyright 2016 Google Inc. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// This script is not available for versions of Unity without the
// GVR native integration.
using UnityEngine;
using System.Collections;
/// This script positions and rotates the transform that it is attached to
/// according to a joint in the arm model. See GvrArmModel.cs for details.
public class GvrArmModelOffsets : MonoBehaviour {
#if UNITY_HAS_GOOGLEVR && (UNITY_ANDROID || UNITY_EDITOR)
/// Used to draw a line between joints for debugging purposes.
private LineRenderer lineRenderer;
public enum Joint {
Pointer,
Wrist,
Shoulder,
Elbow
}
/// Determines which joint to set the position and rotation to.
public Joint joint;
/// Determines what object to draw a line to (for debugging purposes).
public GameObject debugDrawTo;
void Awake() {
lineRenderer = gameObject.GetComponent<LineRenderer>();
}
void Start() {
if (GvrArmModel.Instance != null) {
GvrArmModel.Instance.OnArmModelUpdate += OnArmModelUpdate;
} else {
Debug.LogError("Unable to find GvrArmModel.");
}
}
void OnDestroy() {
if (GvrArmModel.Instance != null) {
GvrArmModel.Instance.OnArmModelUpdate -= OnArmModelUpdate;
}
}
private void OnArmModelUpdate() {
Vector3 jointPosition;
Quaternion jointRotation;
switch (joint) {
case Joint.Pointer:
jointPosition = GvrArmModel.Instance.pointerPosition;
jointRotation = GvrArmModel.Instance.pointerRotation;
break;
case Joint.Wrist:
jointPosition = GvrArmModel.Instance.wristPosition;
jointRotation = GvrArmModel.Instance.wristRotation;
break;
case Joint.Elbow:
jointPosition = GvrArmModel.Instance.elbowPosition;
jointRotation = GvrArmModel.Instance.elbowRotation;
break;
case Joint.Shoulder:
jointPosition = GvrArmModel.Instance.shoulderPosition;
jointRotation = GvrArmModel.Instance.shoulderRotation;
break;
default:
throw new System.Exception("Invalid FromJoint.");
}
transform.localPosition = jointPosition;
transform.localRotation = jointRotation;
DrawDebugLine();
}
private void DrawDebugLine() {
if (lineRenderer == null || debugDrawTo == null) {
return;
}
if (lineRenderer.useWorldSpace) {
lineRenderer.SetPosition(0, transform.position);
lineRenderer.SetPosition(1, debugDrawTo.transform.position);
} else {
lineRenderer.SetPosition(0, Vector3.zero);
lineRenderer.SetPosition(1, transform.InverseTransformPoint(debugDrawTo.transform.position));
}
}
#endif // UNITY_HAS_GOOGLEVR && (UNITY_ANDROID || UNITY_EDITOR)
}