zoukankan      html  css  js  c++  java
  • 虚幻蓝图学习笔记 简单VR功能实现

    1.创建GameMome, Pawn, Interface, Actor类型蓝图

    在接口interface中定义两个方法用来抓取与释放事件,在抓取事件中输入变量组件类型SceneComponent

    在Actor蓝图中添加StaticMesh用来显示被抓取的对象加载接口Interfaces->inplemented interfaces并实现抓取与释放方法

    在抓取事件中首先取消物理属性Set Simulate Physics ,之后将自己附加在传入的组件上AttachComponentToComponent,

    在释放事件上,首先设置物理属性Set SimulatePhysics,之后分离组件DetachFromActor

     2.在手的蓝图类,并添加Skeleta Mesh添加手的模型, 触发器Sphere,Spline样条用来移动线路 ,Arrow设置方向,StaticMesh移动地点显示;

     

    3,在pawn蓝图中,添加Camera,并在event BeginPlay事件中创建SpawnActor手,并保持至变量,并把手依附AttachActorToComponent到Camera上

     

    4,在Pawn根据输入映射,实现手的移动 方向是根据手的Arrow

    Get Forward Vector/Get Right Vector ->AddActor WorldOffset

    鼠标X轴->Add controller yaw input

    鼠标Y轴-> Add Controller Ritch input

     

    5.用鼠标左键控制手Motinoncontroller抓取(GragActor)与释放(ReleaseActor)物品(在手的蓝图中定义的方法)

     

     

    6.鼠标右键控制移动,在移动时显示线路Activeteleporter,释放时移动到位置Execte Teleportation,并清除线路ClearArc(Activeteleporter与ClearArc时在手蓝图中创建的方法)

    在移动Execte Teleportation中,先设一个变量用来判断是否移动is Teleporting,在判断是否可以移动,

    之后把状态同步到手蓝图中DisableTeleport(自定义方法),如果可以移动将移动标记Is Teleporting设置为true

    同时设置镜头黑屏过度,GetPlayerCameraManager->StartCameraFade(ToAlpha=1;Duration=0.2) ,并根据手中的位置NavMeshLoaction(用来存储移动位置的变量) 并获取角度GetActorRotation->Teleport; 并恢复镜头效果StartCameraFade,最后设置移动标记IsTeleporting为false

     

     

    6,手的蓝图方法实现

    在Tick事件中判断是否移动,如果时,清除辅助线C;earArc, 计算抛物线长度TraceTeleportDestination,获取最后目标判断是否有目标, 并将位置记录,并把辅助物体设置到最后StaticMesh->SetWorldLocation,并添加线路UpdateArcSpline,

     1).清除辅助线函数;清空集合中的组件DestroyComponent,并清空集合Clear,清空样条Clear Spline Points

     2)计算抛物线TraceTeleportDestination,使用PredictProjectilePathByObjectTpe

    获取Arrow的位置GetWorldLocation->Start Pos/GetForwardVector->Launch Velocity 获取最后一个hit, 并获取导航组件getNavigation System->ProjectPointToNavigation 上的点的位置, 并把值返回出去;

     3)更新Spline的方法UpdateArcSpline

    根据计算出点在Spline中添加Point; 完成后, 设置Spline类型SetSplinePointType (CurveClamped) 并遍历添加组件GetNumberOfSplinePoints减2去掉头尾, Add Spline Mesh Component, 并添加到集合中,并获取Get Tangent at Spline Point->Tangent

     4),取消标记 事件DisableTeleport当IsTeleporteractive等于true ,先设置为false, 并把辅助线隐藏

     5)激活标记事件ActiveTeleporter , 设置激活并显示辅助线

    6)抓取事件GragActor; 获取在触发器内的ActorGetOverlappingActors  并遍历, 判断是否时可以拿起来的物品,DoesImplementInterface(实现自定义接口的方法) 

    并判断它的位置是否小于我们定义的位置,并把长度与它赋值给ArrayElement; 完成后判断ArrayElement是否有效isValid 并调用物品绑定的事件Grab1

     7)是否事件ReleaseActor

    判断ArrayElement是否有效IsValid ,并判断是否时手RootComponent->GetAttachParent; 如果时将调用物品的Release , 并清空ArrayElemt ->NearestLength 

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    响应式布局,流式布局与固定布局
    垃圾回收机制
    形象讲解时间复杂度
    数据结构和算法简介
    数据结构之栈和队列
    十、str的索引、切片和str常用的操作方法(重点)
    九、基础数类型总览和str、int、bool之间的相互转化
    八、编码的初识和进阶
    七、格式化输出和运算符
    六、while循环
  • 原文地址:https://www.cnblogs.com/qq964107326/p/15169967.html
Copyright © 2011-2022 走看看