如何用ad键来实现,摄像机的左右旋转。

该主题包含 6 个回复,有 2 个参与人,并且由 风之神韵 的头像 风之神韵2 年 前 最后一次更新。

正在查看 7 个帖子 - 1 至 7 (共计 7 条)
  • 作者
    帖子
  • #7039
    52Lincc 的头像
    52Lincc
    学员
    注册日期: 2014/11/17
    发帖数: 1
    回帖数: 3

    想要实现类似与角色预览的功能。想要通过ad键来控制摄像机,以角色为中心进行旋转。不知道要怎么实现这样的功能?

    #7049
    风之神韵 的头像
    风之神韵
    教师
    注册日期: 2014/06/20
    发帖数: 2
    回帖数: 358

    这个角色可以是Pawn,也可以是单纯的一个模型SkeletalMeshActor。
    建议还是直接用SkeletalMeshActor,剩下的就是计算摄像机的位置和旋转。
    摄像机的位置旋转计算都在你控制的Pawn类的函数叫做CalcCamera。

    在CalcCamera函数中你所做的就是:

    如果正在预览一个角色,则:

    //这里直接使用Controller的旋转,当你旋转鼠标,就是在旋转Controller,也就是在旋转预览角色
    CameraRot=Controller.Rotation;
    //从角色的中心朝着摄像机旋转方向的反方向延伸一段距离Dist
    CamLoc = ThisSkeletalMeshActor.Location;
    CamLoc = CameraLoc – CameraRot*Dist;

    这样你得到一个第三人称旋转视角,如果你想用AD取代鼠标的左右旋转,可以接受AD键的消息,
    如果A按下,则RotateSpeed=1000,
    如果D按下,则RotateSpeed=-1000,
    这里的1000可以随便调整,最后修改Yaw也就是航向角的数值:
    CameraRot.Yaw += DeltaTime*RotateSpeed;

    #7210
    52Lincc 的头像
    52Lincc
    学员
    注册日期: 2014/11/17
    发帖数: 1
    回帖数: 3

    感谢大大,我先去实践一下看看。

    #7239
    52Lincc 的头像
    52Lincc
    学员
    注册日期: 2014/11/17
    发帖数: 1
    回帖数: 3

    大大,这个RotateSpeed要怎么声明?参数什么的

    #7274
    风之神韵 的头像
    风之神韵
    教师
    注册日期: 2014/06/20
    发帖数: 2
    回帖数: 358

    随便一个float型数值就可以.

    var float RotateSpeed;

    #7317
    52Lincc 的头像
    52Lincc
    学员
    注册日期: 2014/11/17
    发帖数: 1
    回帖数: 3

    大大,你看看我的代码,哪里有问题,执行的时候没有报错,但是按下f和g两个键没有反应。我按键也已经替换过了

    上传附件/图片:
    您必须登陆才能查看附件
    #7399
    风之神韵 的头像
    风之神韵
    教师
    注册日期: 2014/06/20
    发帖数: 2
    回帖数: 358

    定义一个全局变量
    var RoleSuroundingRot;

    RoleSuroundingRot.Yaw+=fDeltaTime*RotateSpeed;
    out_CamLoc = Location + Vector(RoleSuroundingRot)*300.f;
    out_CamRot=Rotator(Location – out_CamLoc);

正在查看 7 个帖子 - 1 至 7 (共计 7 条)

抱歉,回复评论必需登录。