【背景】
上一篇帖子我们成功实现了让Body整体自动补正和Head之间的位置,不至于出现长脖子的状况。
但是到此为止,还没有实现我们最终的VR身体。
要实现VR身体,需要将我们之前写的两只手和头部的Target与手柄和头盔的位置同步。
下面就介绍解决这个问题的具体方法。
【代码】
先在Hierarchy中导入Oculus的OVR插件。
在原来VR Rig脚本的基础上增加一个结构Map。
利用这个Map作为可以套用的一般方法。
来同步控制器头盔和游戏中两手以及头部的位置。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;[System.Serializable]public class VRMap
{public Transform vrTarget;public Transform rigTarget;public Vector3 trackingPositionOffset;public Vector3 trackingRotationOffset;public void Map(){rigTarget.position = vrTarget.TransformPoint(trackingPositionOffset);rigTarget.rotation = vrTarget.rotation*Quaternion.Euler(trackingRotationOffset);}
}public class VRRig : MonoBehaviour
{public VRMap head;public VRMap leftHand;public VRMap rightHand;public Transform headConstraint;public Vector3 headBodyOffset;// Start is called before the first frame updatevoid Start(){headBodyOffset = transform.position - headConstraint.position;}// Update is called once per framevoid LateUpdate(){transform.position = headConstraint.position + headBodyOffset;transform.forward = Vector3.ProjectOnPlane(headConstraint.up, Vector3.up).normalized;head.Map();leftHand.Map();rightHand.Map();}
}
编译脚本后在Inspector中进行变量的关联配置。
【测试】
VR Body初具雏形,只是头和手的位置方向有点问题。
下一篇介绍如何补正角度来解决这个问题。