骑马与砍杀中文站论坛

 找回密码
 注册(Register!)

QQ登录

只需一步,快速开始

搜索
查看: 1265|回复: 9

[功能与代码] 【战团】镜头分离、操作、聚焦代码 mission cam

[复制链接]

31

主题

200

回帖

184

积分

见习骑士

Rank: 3

UID
2462463
第纳尔
1572
精华
0
互助
23
荣誉
0
贡献
0
魅力
80
注册时间
2015-3-3
鲜花(55) 鸡蛋(0)
发表于 2023-5-17 11:34:27 | 显示全部楼层 |阅读模式
本帖最后由 战争傀儡阿格兰 于 2023-5-17 13:54 编辑

代码环境1.171。
【战团】阿格兰魔球修改器——合集https://bbs.mountblade.com.cn/thread-2097734-1-1.html

为了做实时演算,镜头的操作必不可少。在此我抛砖引玉,丢出一段我写的镜头操作代码。

先介绍原理:
1.使用 (mission_cam_set_mode,1,0,0),代码后,镜头会独立开来,不再跟着玩家跑,切换场景后失效
2.使用(mission_cam_set_mode,0),代码后,镜头会回到自己身上。
3.虽然不知道怎么获得cam的位置,但是可以用mission_cam_set_position,pos52),
   或者 (mission_cam_animate_to_position,pos52,50,0),移动镜头到指定位置。
  但是这两个代码都会旋转镜头方向,比方你指定的位置是agent的pos,那么,
  镜头一定会在agent的身后,拍的agent的背部。




贴上native婚礼镜头代码:
11.png

可以看到,这个镜头所有的移动都是手动设置好起点,终点、并且手动聚焦到要拍的对象。
设置移动路径还好,毕竟你想运镜,就要移动镜头。但是,聚焦还要手动对准,这个就需要大大量测试与模拟。
举个例子,我要看着一个人,s型跑位,无规律变化那种,就遇到困难了,我镜头不需要动,但是要不停地调整角度去对准它,
更别提,如果镜头和目标对象都在无规则运动时,镜头的对准了。
我提供的方案是个框架,减少你聚焦的工作,并提供一些便利。



代码实际效果:
1.首先你要设定镜头焦点,即拍谁
2.鼠标轮距调整镜头远近,你也可以设为固定值。
3.镜头随便动,基本不会穿模型、穿地面这些有碰撞体积的东西。
4.两种模式:   模式0是跟着目标,鼠标自由视角,类似于骑砍默认;
            模式1是镜头自动对准被拍摄目标。镜头的移动的话没做,你既然打开了这个帖子,
            你肯定是有自己运镜需求,你可以参考我给出的native婚礼镜头,手动设置起点终点,
            也可以额外写个wasd控制镜头移动。在scrip_pos_aim_at_pos脚本中写好了如何移动镜头,在下面引号里。


代码使用方式:要一直触发,但是频率不用太高,减轻cpu负担。模式的切换要你自己去寻找合适的使用方式。




#camera
    #把镜头分离出去,条件自己加
            (mission_cam_set_mode,1,0,0),
    #把镜头变回来,条件自己加
            (mission_cam_set_mode,0),
    #去定义一个中心目标点pos47,具体自己选
            (agent_get_position, pos47, 镜头中心人),
            (prop_instance_get_position,pos47,镜头中心物),
    #camera distance  镜头拉远推进距离,鼠标滚轮控制
            (scene_prop_get_slot,":cam_distance",随便找个东西,第n号slot),#默认-1000
            (try_begin),
                (key_is_down,key_mouse_scroll_up),
                (val_add,":cam_distance",200),
                (try_begin),
                    (gt,":cam_distance",-400),
                    (assign,":cam_distance",-400),
                (try_end),
                (scene_prop_set_slot,随便找个东西,第n号slot,":cam_distance"),
            (else_try),
                (key_is_down,key_mouse_scroll_down),
                (val_sub,":cam_distance",200),
                (try_begin),
                    (lt,":cam_distance",-2000),
                    (assign,":cam_distance",-2000),
                (try_end),
                (scene_prop_set_slot,随便找个东西,第n号slot,":cam_distance"),

            (try_end),

    #camera mode镜头模式
            (scene_prop_get_slot,":cam_mode",随便找个东西,第n+1号slot),
            #默认0,0是跟着目标,鼠标自由视角,类似于骑砍默认,1是锁定目标,镜头的移动需要代码调整,或者额外写个wasd控制镜头移动,角度不用设置,自动对准
            (try_begin),
                (game_key_clicked,gk_cam_toggle),#(game_key_clicked,gk_view_char),
                (try_begin),
                    (eq,":cam_mode",0),
                    (assign,":cam_mode",1),
                    (scene_prop_set_slot,随便找个东西,第n+1号slot,":cam_mode"),
                (else_try),
                    (eq,":cam_mode",1),
                    (assign,":cam_mode",0),
                    (scene_prop_set_slot,随便找个东西,第n+1号slot,":cam_mode"),
                (try_end),
            (try_end),

    #camera movement镜头的移动

        #模式0
            (try_begin),
                (eq,":cam_mode",0),
                (copy_position,pos60,pos47),
            #我抬高了,远近在上面调,要移动镜头在这里调
                (position_move_z,pos60,300),

            #获取玩家鼠标移动视角,联机环境下不是这句话,没测试
                (get_player_agent_no, ":player_agent"),
                (agent_get_look_position,pos43,":player_agent"),

            #cast ray,自动的不用改
                (position_copy_rotation,pos60,pos43),#define ray rotation
                (try_begin),
                    (copy_position,pos58,pos60),
                    (position_rotate_x,pos58,180),
                    (store_mul,":cam_ray",":cam_distance",-10),#fixed_point
                    (cast_ray,":uselessness",pos52,pos58,":cam_ray"),
                    (get_distance_between_positions,":dist_cam_ray",pos52,pos58),
                    (position_copy_rotation,pos52,pos43),


                    (val_div,":dist_cam_ray",-30),#fixed_point
                    (position_move_y,pos52,":dist_cam_ray"),
                    (position_rotate_x,pos52,-3),
                    (position_move_z,pos52,50),
                    #(mission_cam_set_position,pos52),
                #这个50是镜头移动速度
                    (mission_cam_animate_to_position,pos52,50,0),
                (else_try),
                    (position_move_y,pos60,":cam_distance"),
                    (copy_position,pos52,pos60),
                    #(mission_cam_set_position,pos52),
                    (mission_cam_animate_to_position,pos52,50,0),
                (try_end),
        #模式1
            (else_try),
                (eq,":cam_mode",1),
                (copy_position,pos60,pos47),
            #我抬高了,远近在上面调,要移动镜头在这里调
                (position_move_z,pos60,300),
               
            #镜头对准目标
                (call_script, "script_pos_aim_at_pos", pos60, pos47),
                #【战团】3d空间的瞄准代码。相机聚焦 addmisle 飞行物 战场ai 场景动画 2d动画https://bbs.mountblade.com.cn/thread-2098881-1-1.html
                #这个脚本是我写的,也可以拆出来,用assign写


            #cast ray,自动的不用改
                (position_copy_rotation,pos60,pos43),#define ray rotation
                (try_begin),
                    (copy_position,pos58,pos60),
                    (position_rotate_x,pos58,180),
                    (store_mul,":cam_ray",":cam_distance",-10),#fixed_point
                    (cast_ray,":uselessness",pos52,pos58,":cam_ray"),
                    (get_distance_between_positions,":dist_cam_ray",pos52,pos58),
                    (position_copy_rotation,pos52,pos43),


                    (val_div,":dist_cam_ray",-30),#fixed_point
                    (position_move_y,pos52,":dist_cam_ray"),
                    (position_rotate_x,pos52,-3),
                    (position_move_z,pos52,50),
                    #(mission_cam_set_position,pos52),
                #这个50是镜头移动速度
                    (mission_cam_animate_to_position,pos52,50,0),
                (else_try),
                    (position_move_y,pos60,":cam_distance"),
                    (copy_position,pos52,pos60),
                    #(mission_cam_set_position,pos52),
                    (mission_cam_animate_to_position,pos52,50,0),
                (try_end),
            (try_end),

评分

参与人数 1第纳尔 +20 魅力 +10 收起 理由
幼稚园殺手 + 20 + 10 您的帖子很有价值!

查看全部评分

鲜花鸡蛋

幼稚园殺手  在2023-5-18 12:19  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下
815208129  在2023-5-17 15:13  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下

16

主题

591

回帖

327

积分

见习骑士

Rank: 3

UID
3102512
第纳尔
2370
精华
0
互助
29
荣誉
0
贡献
0
魅力
63
注册时间
2019-9-6

骑砍中文站APP会员勋章战团正版勋章霸主正版勋章

鲜花(51) 鸡蛋(0)
发表于 2023-5-17 12:52:10 来自手机 | 显示全部楼层
很实用的文章,让我学到了很多~~来自: Android客户端

29

主题

187

回帖

65

积分

扈从

Rank: 2Rank: 2

UID
3228783
第纳尔
868
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2021-3-28
鲜花(7) 鸡蛋(0)
发表于 2023-5-17 13:44:13 来自手机 | 显示全部楼层
只想让镜头往后拉,能看到角色全身,不用分离,好像很难实现来自: Android客户端

31

主题

200

回帖

184

积分

见习骑士

Rank: 3

UID
2462463
第纳尔
1572
精华
0
互助
23
荣誉
0
贡献
0
魅力
80
注册时间
2015-3-3
鲜花(55) 鸡蛋(0)
 楼主| 发表于 2023-5-17 13:56:23 | 显示全部楼层
摩杰社 发表于 2023-5-17 13:44
只想让镜头往后拉,能看到角色全身,不用分离,好像很难实现

就是我的模式0啊,简单粗暴,拉远了镜头

29

主题

187

回帖

65

积分

扈从

Rank: 2Rank: 2

UID
3228783
第纳尔
868
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2021-3-28
鲜花(7) 鸡蛋(0)
发表于 2023-5-18 07:16:59 来自手机 | 显示全部楼层
战争傀儡阿格兰 发表于 2023-5-17 13:56
就是我的模式0啊,简单粗暴,拉远了镜头

按键盘+,—可以调近和调远镜头,但可调范围范围小,我的意思是按+可以拉的更远,而且换场景机位保存,摄像机碰撞功能都有来自: Android客户端

31

主题

200

回帖

184

积分

见习骑士

Rank: 3

UID
2462463
第纳尔
1572
精华
0
互助
23
荣誉
0
贡献
0
魅力
80
注册时间
2015-3-3
鲜花(55) 鸡蛋(0)
 楼主| 发表于 2023-5-18 14:03:49 | 显示全部楼层
摩杰社 发表于 2023-5-18 07:16
按键盘+,—可以调近和调远镜头,但可调范围范围小,我的意思是按+可以拉的更远,而且换场景机位保存,摄 ...

这个是系统自带相机系统,没有接口去修改。。

29

主题

187

回帖

65

积分

扈从

Rank: 2Rank: 2

UID
3228783
第纳尔
868
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2021-3-28
鲜花(7) 鸡蛋(0)
发表于 2023-5-18 21:40:38 来自手机 | 显示全部楼层
战争傀儡阿格兰 发表于 2023-5-18 14:03
这个是系统自带相机系统,没有接口去修改。。

如果引擎开源了,也许就好改了来自: Android客户端

31

主题

200

回帖

184

积分

见习骑士

Rank: 3

UID
2462463
第纳尔
1572
精华
0
互助
23
荣誉
0
贡献
0
魅力
80
注册时间
2015-3-3
鲜花(55) 鸡蛋(0)
 楼主| 发表于 2023-5-19 13:47:55 | 显示全部楼层
摩杰社 发表于 2023-5-18 21:40
如果引擎开源了,也许就好改了

我不是改好了吗

0

主题

4

回帖

6

积分

平民

Rank: 1

UID
3555993
第纳尔
0
精华
0
互助
1
荣誉
0
贡献
0
魅力
0
注册时间
2023-8-27
鲜花(0) 鸡蛋(0)
发表于 2023-8-30 06:18:02 | 显示全部楼层
楼主,如何把单机模式下的镜头视角 调成像联机镜头那样 就是镜头视角随着人物转动  单机模式下第三人称镜头是固定的 按~键➕鼠标太能转动,就是如何把第三人称 改成像第一人称那样镜头视角随着人物转动

42

主题

504

回帖

399

积分

骑士

Rank: 4Rank: 4

UID
3398051
第纳尔
1419
精华
0
互助
39
荣誉
4
贡献
10
魅力
300
注册时间
2022-8-13
鲜花(48) 鸡蛋(0)
发表于 2023-8-30 18:00:08 | 显示全部楼层
悠悠我心殇 发表于 2023-8-30 06:18
楼主,如何把单机模式下的镜头视角 调成像联机镜头那样 就是镜头视角随着人物转动  单机模式下第三人称镜头 ...

战场延续,里面有镜头操作
https://bbs.mountblade.com.cn/thread-485769-1-1.html
(出处: 骑马与砍杀中文站论坛)
您需要登录后才可以回帖 登录 | 注册(Register!)

本版积分规则

Archiver|手机版|小黑屋|骑马与砍杀中文站

GMT+8, 2024-5-27 05:54 , Processed in 0.138454 second(s), 28 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表