利用Render Texture实现游戏的小雷达效果(摄影机分屏)
最近游戏蛮牛在举办一个活动,就是要做出这样的效果:
![]()
题目:实现游戏分屏效果
要求:
1、 分屏,且分割线不规则(即非水平或垂直);
2、 各屏可单独操作(移动、缩放),操作指该屏整体操作;
3、 左(或上)立方体顺时针自转;右(或下)立方体逆时针自转;
一开始以为又要动用我最不熟悉的Shader了,有点怕,后来仔细一想,这不就是跟雷达效果一样的么?
然后立马动手,做一个效果玩玩。
![]()
原理很简单,就是弄两个摄影机,一个作为Player的子物体,并放在Player背后,跟随着Player,
当第三人称摄影机,这是一个主摄影机,不用设置什么。第二个摄影机也同样作为Player的自物体,
并放在Player的头顶,作为俯视摄影机,这样该摄影机看到的就是类似雷达效果了。

不过我并不打算直接将俯视摄影机的内容画到屏幕上,毕竟摄影机只能是方形的,如果直接放屏幕上,
并不能实现我们要的各种形状的效果,所有我先将摄影机的内容投射到一张“Render Texture”身上,
在Project视图下右键新建一张“Render Texture”即可

然后再通过UGUI将此Render Textur裁剪成我要的形状,然后再当成GUI投射到屏幕上。
具体做法如下:
先设置Mask遮罩,具体要什么形状你自己PS画一个

然后再给该Mask添加一个RawImage自物体,并将Render Texture显示到该子物体身上即可,

现在一切已经完毕了,再给Player添加一段控制代码,就可以做出一个简易的第三人称小游戏了。
using UnityEngine;
using System.Collections; public class PlayerController : MonoBehaviour { public float WalkSpeed = 2.0f;
public float RotateSpeed = 3.0f; private CharacterController controller; // Use this for initialization
void Start () {
controller = GetComponent<CharacterController>();
if(controller == null)
{
Debug.LogError("CharacterController cound not be found");
}
} // Update is called once per frame
void Update () {
var x = Input.GetAxis("Horizontal");
var z = Input.GetAxis("Vertical"); controller.SimpleMove(transform.forward * z * WalkSpeed * Time.time);
transform.Rotate(, x * RotateSpeed, );
}
}
总结一下:
其实不规则形状的摄影机分屏原理就是先将摄影机的内容画到一张图片上,
然后再通过UGUI的遮罩效果裁剪出一定形状,再讲该图片放到裁剪后的图片上,
显示出来的就是裁剪过的摄影机内容了。
最后附上源码:
利用Render Texture实现游戏的小雷达效果(摄影机分屏)的更多相关文章
- camera render texture 游戏里的监控视角
Camera里: 新建render texture并拖入到target texture里 新建材质球 拖入render texture camera里的视角会在材质球上出现 新建一个pla ...
- 【unity3d游戏开发之基础篇】unity3d射线的原理用法以及一个利用射线实现简单拾取的小例子
原地址:http://www.cnblogs.com/xuling/archive/2013/03/04/2943154.html 最近开始研究U3D,它的强大就不多说了, 今天研究了研究射线相关东西 ...
- Java中利用随机数的猜拳游戏
Java中利用随机数的猜拳游戏,实现非常简单,重难点在于随机数的产生. 首先GameJude类是用于判断输赢的一个类: package testGame; public class GameJudge ...
- 小易邀请你玩一个数字游戏,小易给你一系列的整数。你们俩使用这些整数玩游戏。每次小易会任意说一个数字出来,然后你需要从这一系列数字中选取一部分出来让它们的和等于小易所说的数字。 例如: 如果{2,1,2,7}是你有的一系列数,小易说的数字是11.你可以得到方案2+2+7 = 11.如果顽皮的小易想坑你,他说的数字是6,那么你没有办法拼凑出和为6 现在小易给你n个数,让你找出无法从n个数中选取部分求和
小易邀请你玩一个数字游戏,小易给你一系列的整数.你们俩使用这些整数玩游戏.每次小易会任意说一个数字出来,然后你需要从这一系列数字中选取一部分出来让它们的和等于小易所说的数字. 例如: 如果{2,1,2 ...
- 利用WordPress REST API 开发微信小程序从入门到放弃
自从我发布并开源WordPress版微信小程序以来,很多WordPress网站的站长问有关程序开发的问题,其实在文章:<用微信小程序连接WordPress网站>讲述过一些基本的要点,不过仍 ...
- Render Texture
[Render Texture] Render Textures are special types of Textures that are created and updated at runti ...
- Render Texture coordinates
https://docs.unity3d.com/550/Documentation/Manual/SL-PlatformDifferences.html Render Texture coordin ...
- 编写Java程序,利用List实现报数游戏的实现思路
返回本章节 返回作业目录 需求说明: 利用List实现报数游戏 在控制台输入一个大于3的正整数,该整数表示有多少人,如在控制台输入10,表示有10个人,10个人围成一个圆圈,从序号1开始为这些人依次编 ...
- 利用canvas阴影功能与双线技巧绘制轨道交通大屏项目效果
利用canvas阴影功能与双线技巧绘制轨道交通大屏项目效果 前言 近日公司接到一个轨道系统的需求,需要将地铁线路及列车实时位置展示在大屏上.既然是大屏项目,那视觉效果当然是第一重点,咱们可以先来看看项 ...
随机推荐
- Chrome
一.简介 二.安装 1)离线版 http://www.google.cn/chrome/browser/thankyou.html?statcb=1&platform=win64&st ...
- 对 Visual Studio 中的Resharper禁用对某种文件的检测
原因:在Visual Studio中安装Reshaper后,就会对各种文件进行代码检测,但是因为Reshaper更新的速度不是很及时,所以有时会对Visual Studio中某些新功能误断,导致Cod ...
- 【小白的CFD之旅】13 敲门实例【续3】
接上文[小白的CFD之旅]12 敲门实例[续2] 4 Results4.1 计算监测图形4.2 Graphics4.2.1 壁面温度分布4.2.2 创建截面4.2.3 显示截面物理量4.2.4 Pat ...
- Tomjson - 一个"短小精悍"的 json 解析库
Tomjson,一个"短小精悍"的 json 解析库,tomjson使用Java语言编写,主要作用是把Java对象(JavaBean)序列化为json格式字符串,将json格式字符 ...
- POJ2794 Double Patience[离散概率 状压DP]
Double Patience Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 694 Accepted: 368 Cas ...
- python基础之文件读写
python基础之文件读写 本节内容 os模块中文件以及目录的一些方法 文件的操作 目录的操作 1.os模块中文件以及目录的一些方法 python操作文件以及目录可以使用os模块的一些方法如下: 得到 ...
- 去除多余的cell 和最后一行cell显示顶头底线
去除多余cell YourTableview.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero]; 最后一行cell底线顶头显示 s ...
- MYSQL的卸载
卸载mysql 1.查找以前是否装有mysql 命令:rpm -qa|grep -i mysql 可以看到mysql的两个包: mysql-4.1.12-3.RHEL4.1 mysqlclient10 ...
- oop五大设计原则
一:单一职责原则单一职责有2个含义,一个是避免相同的职责分散到不同的类中,另一个是避免一个类承担太多职责.减少类的耦合,提高类的复用性. 二:接口隔离原则表明客户端不应该被强迫实现一些他们不会使用的接 ...
- 为什么 "auto a = 1;" 在C语言中可以编译通过?
参照:这里 这让我想起之前看的一部书, int i; 其实是等价与 auto int i; 表示为局部变量 这应该与static是相对的吧?