主贴链接:
https://tieba.baidu.com/p/6574833207
接着之前的,既然我们有了机瞄,那么接下来我们就要实装“倍镜”效果,而倍镜实现的效果大致有两种:
(1)适应性,即整个画面都放大
![](http://tiebapic.baidu.com/forum/w%3D580/sign=c80131976a1ed21b79c92eed9d6fddae/277f0c30e924b899e694d95d79061d950b7bf6f6.jpg?tbpicau=2024-09-19-05_9c527b223c8afab2a786dfee8b6bab06)
(2)真实型
![](http://tiebapic.baidu.com/forum/w%3D580/sign=d5b2dc011e23dd542173a760e108b3df/4de0ca33c895d143b3ea444664f082025baf07f9.jpg?tbpicau=2024-09-19-05_95efe1dc5089462a383ab17cb5de9bac)
我们首先做(1),依旧得益于Godot强大的动画系统,我们根本不需要写代码:
相机下有一个fov(视场角)属性,默认70,只要将其调小,就可以实现放大效果
![](http://tiebapic.baidu.com/forum/w%3D580/sign=3680d145ae12c8fcb4f3f6c5cc0392b4/45aa3d738bd4b31cc30a37de90d6277f9e2ff86c.jpg?tbpicau=2024-09-19-05_1d61cbc0516b34068a7631e9b82ca2f8)
点击我们之前创建的AnimationPlayer,到动画编辑界面中,点击添加轨道 -> 属性轨道:
![](http://tiebapic.baidu.com/forum/w%3D580/sign=ebf5eb4bc51b0ef46ce89856edc551a1/1077fa24b899a901033ff8530a950a7b0208f510.jpg?tbpicau=2024-09-19-05_076377dabbebf777d298619d7a1e5a9c)
再找到eye(相机)
![](http://tiebapic.baidu.com/forum/w%3D580/sign=ea67427f3f34349b74066e8df9eb1521/b3764f6034a85edf42fb5d465e540923dd547523.jpg?tbpicau=2024-09-19-05_62af9dbb5da3b4e67ca024095ddd708a)
再找到fov
![](http://tiebapic.baidu.com/forum/w%3D580/sign=e346ac7c3af5e0feee1889096c6134e5/0663b818972bd40726a370986c899e510fb30931.jpg?tbpicau=2024-09-19-05_4408691295222c074bf835b2ddbbc9f0)
添加完成后直接插入一个关键帧:
![](http://tiebapic.baidu.com/forum/w%3D580/sign=b300087a10082838680ddc1c8898a964/3a6dd55c103853436f8d24448413b07ecb8088d8.jpg?tbpicau=2024-09-19-05_4e8367af5c2c1fb4c8143574e4f1ba2c)
再把时间轴拖到最后,并把fov调低(我设置20),再插入关键帧
![](http://tiebapic.baidu.com/forum/w%3D580/sign=e06dacd2fe50352ab16125006342fb1a/de4ea0de9c82d1581621fad4970a19d8bd3e42ff.jpg?tbpicau=2024-09-19-05_b7817e360809ba13cc2b28ebbb340633)
再把时间轴拖回最开始,这样(1)就已经做好了
(这里我懒得改瞄准镜了)
![](http://tiebapic.baidu.com/forum/w%3D580/sign=16f34b01414e9258a63486e6ac83d1d1/c7d2c243ad4bd1136c2014574dafa40f4afb05a8.jpg?tbpicau=2024-09-19-05_0fe6b91c9f4cdb8827970d934527bc37)
接下来我们再做(2)
首先,关闭(1)的效果
![](http://tiebapic.baidu.com/forum/w%3D580/sign=8ee5e4de5010b912bfc1f6f6f3fcfcb5/d5f359ed2e738bd4f0e81154b68b87d6267ff955.jpg?tbpicau=2024-09-19-05_0020728484e962a96caafe82e7c6e83b)
接下来调整一下瞄准镜
![](http://tiebapic.baidu.com/forum/w%3D580/sign=7424e4d8be773912c4268569c8198675/d6bec42a6059252d560dbf61239b033b5bb5b900.jpg?tbpicau=2024-09-19-05_a2d5988df1b140c6ccfa36a9f48e332f)
并添加以下节点
![](http://tiebapic.baidu.com/forum/w%3D580/sign=481b3a614e82b2b7a79f39cc01accb0a/984d234e251f95ca389730d3de177f3e67095238.jpg?tbpicau=2024-09-19-05_a4f2954912e40c770bd77f7f49cd7135)
接着,先调整Viewport的size(这是倍镜画面的分辨率)
![](http://tiebapic.baidu.com/forum/w%3D580/sign=76990088b644ad342ebf878fe0a30c08/f2585234970a304ec2a5029fc6c8a786c8175c93.jpg?tbpicau=2024-09-19-05_afc018a8edc6f00a2d3ddd392c772ce1)
并且将Viewport下的Camera的fov更改:
![](http://tiebapic.baidu.com/forum/w%3D580/sign=fa44bc8475d9f2d3201124e799ed8a53/ae03be345982b2b75112baa126adcbef77099b89.jpg?tbpicau=2024-09-19-05_3b85b9e37dbc9aed16f0454b15893445)
到Sprite3D属性面板中,把材质改为Viewport材质:
![](http://tiebapic.baidu.com/forum/w%3D580/sign=e9f15109073853438ccf8729a312b01f/de1fdfbf6c81800ac5032b6ba63533fa838b47bc.jpg?tbpicau=2024-09-19-05_234826ac5695772c1b7a4c23e7efdb5b)
![](http://tiebapic.baidu.com/forum/w%3D580/sign=b04dede0deea15ce41eee00186013a25/82f6d813495409236e22e01b8558d109b2de49d7.jpg?tbpicau=2024-09-19-05_aeb9d870df48d314a9ad86f1fe9a217d)
再把它调整到倍镜后端:
![](http://tiebapic.baidu.com/forum/w%3D580/sign=ecdaf5fc9526cffc692abfba89004a7d/6424e5246b600c33dcdb5dad0d4c510fd8f9a1f8.jpg?tbpicau=2024-09-19-05_bcc85b4aef1d82d7c2c3745ef8b1e082)
最后来到player的脚本中:
在_process()函数中添加如下代码
![](http://tiebapic.baidu.com/forum/w%3D580/sign=c8288b3842fbb2fb342b581a7f4b2043/3646323fb80e7becc5218084382eb9389a506ba7.jpg?tbpicau=2024-09-19-05_b5bbd0896e8d5711a88d62281f9014ec)
就是获取Viewport下的Camera的全局变换,并将其设置为ker的全局变换
这样,ker指哪,这个Camera就会看哪了
(如果有穿模问题的话,请自行更改相机偏移或遮罩,这里就不多赘述了)
效果:
![](http://tiebapic.baidu.com/forum/w%3D580/sign=85e3e668319759ee4a5060c382fb434e/739e9e1001e93901ac260f5b6cec54e736d19672.jpg?tbpicau=2024-09-19-05_9903e6157c6d8bd3ab81a0021baee214)
https://tieba.baidu.com/p/6574833207
接着之前的,既然我们有了机瞄,那么接下来我们就要实装“倍镜”效果,而倍镜实现的效果大致有两种:
(1)适应性,即整个画面都放大
![](http://tiebapic.baidu.com/forum/w%3D580/sign=c80131976a1ed21b79c92eed9d6fddae/277f0c30e924b899e694d95d79061d950b7bf6f6.jpg?tbpicau=2024-09-19-05_9c527b223c8afab2a786dfee8b6bab06)
(2)真实型
![](http://tiebapic.baidu.com/forum/w%3D580/sign=d5b2dc011e23dd542173a760e108b3df/4de0ca33c895d143b3ea444664f082025baf07f9.jpg?tbpicau=2024-09-19-05_95efe1dc5089462a383ab17cb5de9bac)
我们首先做(1),依旧得益于Godot强大的动画系统,我们根本不需要写代码:
相机下有一个fov(视场角)属性,默认70,只要将其调小,就可以实现放大效果
![](http://tiebapic.baidu.com/forum/w%3D580/sign=3680d145ae12c8fcb4f3f6c5cc0392b4/45aa3d738bd4b31cc30a37de90d6277f9e2ff86c.jpg?tbpicau=2024-09-19-05_1d61cbc0516b34068a7631e9b82ca2f8)
点击我们之前创建的AnimationPlayer,到动画编辑界面中,点击添加轨道 -> 属性轨道:
![](http://tiebapic.baidu.com/forum/w%3D580/sign=ebf5eb4bc51b0ef46ce89856edc551a1/1077fa24b899a901033ff8530a950a7b0208f510.jpg?tbpicau=2024-09-19-05_076377dabbebf777d298619d7a1e5a9c)
再找到eye(相机)
![](http://tiebapic.baidu.com/forum/w%3D580/sign=ea67427f3f34349b74066e8df9eb1521/b3764f6034a85edf42fb5d465e540923dd547523.jpg?tbpicau=2024-09-19-05_62af9dbb5da3b4e67ca024095ddd708a)
再找到fov
![](http://tiebapic.baidu.com/forum/w%3D580/sign=e346ac7c3af5e0feee1889096c6134e5/0663b818972bd40726a370986c899e510fb30931.jpg?tbpicau=2024-09-19-05_4408691295222c074bf835b2ddbbc9f0)
添加完成后直接插入一个关键帧:
![](http://tiebapic.baidu.com/forum/w%3D580/sign=b300087a10082838680ddc1c8898a964/3a6dd55c103853436f8d24448413b07ecb8088d8.jpg?tbpicau=2024-09-19-05_4e8367af5c2c1fb4c8143574e4f1ba2c)
再把时间轴拖到最后,并把fov调低(我设置20),再插入关键帧
![](http://tiebapic.baidu.com/forum/w%3D580/sign=e06dacd2fe50352ab16125006342fb1a/de4ea0de9c82d1581621fad4970a19d8bd3e42ff.jpg?tbpicau=2024-09-19-05_b7817e360809ba13cc2b28ebbb340633)
再把时间轴拖回最开始,这样(1)就已经做好了
(这里我懒得改瞄准镜了)
![](http://tiebapic.baidu.com/forum/w%3D580/sign=16f34b01414e9258a63486e6ac83d1d1/c7d2c243ad4bd1136c2014574dafa40f4afb05a8.jpg?tbpicau=2024-09-19-05_0fe6b91c9f4cdb8827970d934527bc37)
接下来我们再做(2)
首先,关闭(1)的效果
![](http://tiebapic.baidu.com/forum/w%3D580/sign=8ee5e4de5010b912bfc1f6f6f3fcfcb5/d5f359ed2e738bd4f0e81154b68b87d6267ff955.jpg?tbpicau=2024-09-19-05_0020728484e962a96caafe82e7c6e83b)
接下来调整一下瞄准镜
![](http://tiebapic.baidu.com/forum/w%3D580/sign=7424e4d8be773912c4268569c8198675/d6bec42a6059252d560dbf61239b033b5bb5b900.jpg?tbpicau=2024-09-19-05_a2d5988df1b140c6ccfa36a9f48e332f)
并添加以下节点
![](http://tiebapic.baidu.com/forum/w%3D580/sign=481b3a614e82b2b7a79f39cc01accb0a/984d234e251f95ca389730d3de177f3e67095238.jpg?tbpicau=2024-09-19-05_a4f2954912e40c770bd77f7f49cd7135)
接着,先调整Viewport的size(这是倍镜画面的分辨率)
![](http://tiebapic.baidu.com/forum/w%3D580/sign=76990088b644ad342ebf878fe0a30c08/f2585234970a304ec2a5029fc6c8a786c8175c93.jpg?tbpicau=2024-09-19-05_afc018a8edc6f00a2d3ddd392c772ce1)
并且将Viewport下的Camera的fov更改:
![](http://tiebapic.baidu.com/forum/w%3D580/sign=fa44bc8475d9f2d3201124e799ed8a53/ae03be345982b2b75112baa126adcbef77099b89.jpg?tbpicau=2024-09-19-05_3b85b9e37dbc9aed16f0454b15893445)
到Sprite3D属性面板中,把材质改为Viewport材质:
![](http://tiebapic.baidu.com/forum/w%3D580/sign=e9f15109073853438ccf8729a312b01f/de1fdfbf6c81800ac5032b6ba63533fa838b47bc.jpg?tbpicau=2024-09-19-05_234826ac5695772c1b7a4c23e7efdb5b)
![](http://tiebapic.baidu.com/forum/w%3D580/sign=b04dede0deea15ce41eee00186013a25/82f6d813495409236e22e01b8558d109b2de49d7.jpg?tbpicau=2024-09-19-05_aeb9d870df48d314a9ad86f1fe9a217d)
再把它调整到倍镜后端:
![](http://tiebapic.baidu.com/forum/w%3D580/sign=ecdaf5fc9526cffc692abfba89004a7d/6424e5246b600c33dcdb5dad0d4c510fd8f9a1f8.jpg?tbpicau=2024-09-19-05_bcc85b4aef1d82d7c2c3745ef8b1e082)
最后来到player的脚本中:
在_process()函数中添加如下代码
![](http://tiebapic.baidu.com/forum/w%3D580/sign=c8288b3842fbb2fb342b581a7f4b2043/3646323fb80e7becc5218084382eb9389a506ba7.jpg?tbpicau=2024-09-19-05_b5bbd0896e8d5711a88d62281f9014ec)
就是获取Viewport下的Camera的全局变换,并将其设置为ker的全局变换
这样,ker指哪,这个Camera就会看哪了
(如果有穿模问题的话,请自行更改相机偏移或遮罩,这里就不多赘述了)
效果:
![](http://tiebapic.baidu.com/forum/w%3D580/sign=85e3e668319759ee4a5060c382fb434e/739e9e1001e93901ac260f5b6cec54e736d19672.jpg?tbpicau=2024-09-19-05_9903e6157c6d8bd3ab81a0021baee214)