unity pico开发 三 移动 旋转 传送
文章目录
- LocomtionSystem
- 平滑移动
- 转身
- 碰撞体随相机改变身高
- 传送
- 添加射线
- 两种传送区域
- TeleportationArea
- TeleportationArea
- 美化传送射线
LocomtionSystem
在XR Origin上添加LocomtionSystem脚本,并拖拽XR Origin属性
这是移动的基础
平滑移动
在XR Origin上添加Continuous Move Provider脚本,注意是Action-Base版的脚本,并进行如下设置
Gravity application Model:重力的模式, 只推荐用immediately模式,另一个模式有很多问题
LeftHandMoveAction:左手用哪个动作触发移动,勾选use reference,然后选择
为xr origin物体添加一个characterController,将Center调整为1(让碰撞盒高一点别调到地下),创建一个地面
转身
转身分为平滑转身和snap闪现
两者是一样的,这里以snap为例
XR Origin物体挂载snapTurnProvider(Action-base),然后如下设置
EnableTurnAround:如果勾选,将摇杆前后推可以直接转180度
RightHandSnapTurnAciton:右手使用哪个动作触发转身
碰撞体随相机改变身高
我们蹲下时希望碰撞体可以变小
为XR Origin添加如下脚本,并指定LocomotionProvider为移动用的Provider,例如Continuous Move Provider,注意不是XR Origin脚本
同时确保移动用的Provider的Gravity application Model为immediately模式
传送
添加射线
默认左右手会有三个交互射线的组件,我们把以下这些删掉,从头开始
为XROrigin创建射线子物体,同时将自动创建一个XR Interaction Manager物体用来处理交互
选中射线,以右手为例
找到射线的XRController组件,选择预制数据,选择右手数据
默认使用抓取键进行传送,如果需要改成trigger键,可以修改射线的XRController里的SelectAction为active事件
两种传送区域
TeleportationArea
整个区域都可以传送
为地面挂载TeleportationArea脚本,并拖入碰撞盒
此时即可使用射线进行传送
TeleportationArea
传送点,同样需要设置碰撞盒,此外还需要设置TeleportAnchorTransform,这是传送后的落点
SelectMode: single如果处于当前位置不能再次传送,multiple即使处于当前位置也可以再次传送
MatchOrientation:传送后的朝向,默认是保持原朝向,图中的设置可以让玩家对齐传送后位置的z轴
美化传送射线
直线改为曲线
选中射线,找到XRRayInteractor组件,如下修改
添加一个端点指示
创建一个圆柱,去掉碰撞体,压扁,放到射线子物体,然后为射线的 XR InteractorLineVisual指定
不用时隐藏射线
编写以下脚本
public class ActivateTeleportationRay : MonoBehaviour
{
public GameObject teletportation;
public InputActionProperty activate;
private void Update()
{
teletportation.SetActive(activate.action.ReadValue<float>()>0.01f);
}
}
挂在到一个非射线物体上,将teletportation指定为射线,activate指定为触发传送的案件的动作,推荐使用value版本的动作,可以获取到精确值,非value版本的动作只能获取0和1
如下图分别表示active(也就是扳机键)是否被按下和扳机键的值