Created
February 25, 2017 12:09
-
-
Save takoyakiroom/4e7d8e4c2179bf1945b76b7777ce80e7 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using UnityEngine; | |
using System; | |
using System.Collections; | |
using VRTK; | |
public class IK : MonoBehaviour | |
{ | |
Animator avatar; // アバター | |
public Transform lookAt = null; // 見る対象 | |
public GameObject body = null; // 身体 | |
public Transform leftHand = null; // 左手 | |
public Transform rightHand = null; // 右手 | |
public Transform leftFoot = null; // 左足 | |
public Transform rightFoot = null; // 右足 | |
public Transform leftElbow = null; // 左ひじ | |
public Transform rightElbow = null; // 右ひじ | |
public Transform leftKnee = null; // 左ひざ | |
public Transform rightKnee = null; // 右ひざ | |
void OnAnimatorIK(int layerIndex) | |
{ | |
if (avatar == null) | |
{ | |
// 初期化 | |
InitAvatar(); | |
} | |
else | |
{ | |
// 動かす | |
MoveAvatar(); | |
} | |
} | |
void InitAvatar() | |
{ | |
Debug.Log("InitAvatar"); | |
avatar = GetComponent<Animator>(); // アバター設定 | |
// 見る対象 | |
if (lookAt == null) | |
{ | |
// 設定されていない場合、VRヘッドセットの方を向くようにする | |
lookAt = GameObject.Find("VRTK").GetComponent<VRTK_SDKManager>().actualHeadset.transform; | |
} | |
// グリップの位置初期化 | |
// 身体 | |
body.transform.position = avatar.bodyPosition; | |
body.transform.rotation = avatar.bodyRotation; | |
// 手 | |
leftHand.position = avatar.GetBoneTransform(HumanBodyBones.LeftHand).position; | |
//leftHand.rotation = avatar.GetBoneTransform(HumanBodyBones.LeftHand).rotation; | |
rightHand.position = avatar.GetBoneTransform(HumanBodyBones.RightHand).position; | |
//rightHand.rotation = avatar.GetBoneTransform(HumanBodyBones.RightHand).rotation; | |
// ひじ | |
leftElbow.position = avatar.GetBoneTransform(HumanBodyBones.LeftLowerArm).position; | |
rightElbow.position = avatar.GetBoneTransform(HumanBodyBones.RightLowerArm).position; | |
// 足 | |
leftFoot.position = avatar.GetBoneTransform(HumanBodyBones.LeftFoot).position; | |
//leftFoot.rotation = avatar.GetBoneTransform(HumanBodyBones.LeftFoot).rotation; | |
rightFoot.position = avatar.GetBoneTransform(HumanBodyBones.RightFoot).position; | |
//rightFoot.rotation = avatar.GetBoneTransform(HumanBodyBones.RightFoot).rotation; | |
// ひざ | |
leftKnee.position = avatar.GetBoneTransform(HumanBodyBones.LeftLowerLeg).position; | |
rightKnee.position = avatar.GetBoneTransform(HumanBodyBones.RightLowerLeg).position; | |
} | |
void MoveAvatar() | |
{ | |
// 顔の向き | |
avatar.SetLookAtPosition(lookAt.position); | |
// 身体 | |
avatar.bodyPosition = body.transform.position; | |
avatar.bodyRotation = body.transform.rotation; | |
// 移動先を設定 | |
avatar.SetIKPosition(AvatarIKGoal.LeftHand, leftHand.position); | |
avatar.SetIKRotation(AvatarIKGoal.LeftHand, leftHand.rotation); | |
avatar.SetIKPosition(AvatarIKGoal.RightHand, rightHand.position); | |
avatar.SetIKRotation(AvatarIKGoal.RightHand, rightHand.rotation); | |
avatar.SetIKPosition(AvatarIKGoal.LeftFoot, leftFoot.position); | |
avatar.SetIKRotation(AvatarIKGoal.LeftFoot, leftFoot.rotation); | |
avatar.SetIKPosition(AvatarIKGoal.RightFoot, rightFoot.position); | |
avatar.SetIKRotation(AvatarIKGoal.RightFoot, rightFoot.rotation); | |
avatar.SetIKHintPosition(AvatarIKHint.LeftElbow, leftElbow.position); | |
avatar.SetIKHintPosition(AvatarIKHint.RightElbow, rightElbow.position); | |
avatar.SetIKHintPosition(AvatarIKHint.LeftKnee, leftKnee.position); | |
avatar.SetIKHintPosition(AvatarIKHint.RightKnee, rightKnee.position); | |
// 移動 | |
avatar.SetIKPositionWeight(AvatarIKGoal.LeftHand, 1.0f); | |
avatar.SetIKRotationWeight(AvatarIKGoal.LeftHand, 1.0f); | |
avatar.SetIKPositionWeight(AvatarIKGoal.RightHand, 1.0f); | |
avatar.SetIKRotationWeight(AvatarIKGoal.RightHand, 1.0f); | |
avatar.SetIKPositionWeight(AvatarIKGoal.LeftFoot, 1.0f); | |
avatar.SetIKRotationWeight(AvatarIKGoal.LeftFoot, 1.0f); | |
avatar.SetIKPositionWeight(AvatarIKGoal.RightFoot, 1.0f); | |
avatar.SetIKRotationWeight(AvatarIKGoal.RightFoot, 1.0f); | |
avatar.SetIKHintPositionWeight(AvatarIKHint.LeftElbow, 1.0f); | |
avatar.SetIKHintPositionWeight(AvatarIKHint.RightElbow, 1.0f); | |
avatar.SetIKHintPositionWeight(AvatarIKHint.LeftKnee, 1.0f); | |
avatar.SetIKHintPositionWeight(AvatarIKHint.RightKnee, 1.0f); | |
avatar.SetLookAtWeight(1.0f, 0.3f, 0.6f, 1.0f, 0.5f); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment