【背景】
上一篇帖子我们成功实现了让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 update
void Start()
{
headBodyOffset = transform.position - headConstraint.position;
}
// Update is called once per frame
void LateUpdate()
{
transform.position = headConstraint.position + headBodyOffset;
transform.forward = Vector3.ProjectOnPlane(headConstraint.up, Vector3.up).normalized;
head.Map();
leftHand.Map();
rightHand.Map();
}
}
编译脚本后在Inspector中进行变量的关联配置。
VR Body初具雏形,只是头和手的位置方向有点问题。 下一篇介绍如何补正角度来解决这个问题。