简单传送门教学
基于达哥的方法做了一个传送门,纪录一下我的学习。达哥视频地址:如何在Unity里制作哆啦a梦任意门效果
1、建一个第一人称控制器FPSController 和一扇门,将它们复制位移(相对位置不能变)
FPSController在unity官方资源包导入,如果你导入有错误可以看我的另一篇文章:unity官方资源包Standard Assets导入错误
2、建两个虚拟摄像机:Cinemachine -> Create Virtual Camera,分别移到FPSController下,并设置Transitions -> Body、Aim 为 Do nothing,两个虚拟摄像机CM vcam1与CM vcam2的位置、方向设置与FPS1摄像机、FPS2摄像机相同
3、将Main Camera添加CinemachineBrain,设置Default Blend为Cut(直接场景切换),设置位置与FPS1摄像机相同
4、FPSController1的Tag选择Player
5、在文件里Create -> Render Texture ,建两个,改变Size为1920 * 1080(使分辨率相同)
6、建一个Quad放到门上,另一个门也是。将Quad1、2的Convex和Is Trigger打勾,添加Cinemachine Trigger Action,With Tag选择Player,On Object Enter -> Action选择Activate。将CM vcam2拖到Quad1的Target下,将CM vcam1拖到Quad2的Target下。
7、打开FPS1摄像机,将Render Texture1拖进Target Texture(FPS1摄像机看到的画面都会渲染到Render Texture1上)
打开FPS2摄像机,将Render Texture2拖进Target Texture
8、将Render Texture1拖给Quad2,将Render Texture2拖给Quad1
9、Layer添加Door层,将门和Quad的Layer都选择Door
10、将FPS1摄像机和FPS1摄像机的Culling Mask选项去掉Door(不渲染门)
11、将ScreenCutoutShader.shader和TagChanger.cs
拖入文件里(ScreenCutoutShader.shader文件不是我写的,是国外油管上的大神Brackeys写的,随后我会附在我的资源里,TagChanger.cs是达哥写的),将Quad -> Render Texture -> Shader都改为ScreenCutoutShader(使视角正常),将FPSController 1和FPSController 2都加上TagChanger.cs(切换人物时可以改变FPSController的Tag)
12、,Quad1的On Object Exit -> Event() -> +,将FPSController1拖入Runtime Only,Function选择TagChanger -> UntaggedTagChanger;再+一个,将FPSController2拖入Runtime Only,Function选择TagChanger -> PlayerTagChanger(都是TagChanger.cs里写的函数)
Quad2的On Object Exit -> Event() -> +,将FPSController1拖入Runtime Only,Function选择TagChanger -> PlayerTagChanger;再+一个,将FPSController2拖入Runtime Only,Function选择TagChanger -> UntaggedTagChanger
可以将Game窗口改为和你电脑一样的比例,测试的时候就有传送门的效果了
这个时候运行应该就有一个哆啦A梦一样的传送门效果了,不过这个方法缺陷还有很多,我现在正在学习另一种几乎可以媲美游戏《Portal》的传送门效果的创建方法,有机会写成另一篇文章发出来(咕咕咕)