【背景】
上一篇帖子我们成功实现了让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初具雏形,只是头和手的位置方向有点问题。
下一篇介绍如何补正角度来解决这个问题。