Unity实现框选功能

参考https://www.cnblogs.com/Firepad-magic/p/6012957.html

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class SelectTest : MonoBehaviour
{
   
    public List<GameObject> characters;    
    public Color rectColor = Color.blue;
    public Color outlineColor = Color.white;
    private Vector3 start = Vector3.zero;//记下鼠标按下位置
    // private Material rectMat = null;//画线的材质 不设定系统会用当前材质画线 结果不可控
    public Material rectMat = null;//这里使用Sprite下的defaultshader的材质即可
    private bool drawRectangle = false;//是否开始画线标志
    /// <summary>
    /// 是否为虚线
    /// </summary>
    public bool IsDotted=true;

    void Start()
    {
   

    }

    void Update()
    {
   
        if (Input.GetMouseButtonDown(0))
        {
   
            drawRectangle = true;//如果鼠标左键按下 设置开始画线标志
            start = Input.mousePosition;//记录按下位置
        }
        else if (Input.GetMouseButtonUp(0))
        {
   
            drawRectangle = false;//如果鼠标左键放开 结束画线           
        }

        if (drawRectangle)
        {
   
            CheckSelection(start, Input.mousePosition);
        }
    }

    private void FixedUpdate()
    {
   
        
    }

    void OnPostRender()
    {
   //画线这种操作推荐在OnPostRender()里进行 而不是直接放在Update,所以需要标志来开启
    //需要挂在相机上,如果不想挂相机上,可以将这里面的代码放在OnGUI里

        if (drawRectangle)
        {
   

            Vector3 end = Input.mousePosition;//鼠标当前位置

            GL.PushMatrix();//保存摄像机变换矩阵,把投影视图矩阵和模型视图矩阵压入堆栈保存

            if (!rectMat)

                return;

            rectMat.SetPass(0);//为渲染激活给定的pass。

            GL.LoadPixelMatrix();//设置用屏幕坐标绘图
Unity是一个跨平台的游戏开发引擎,提供了丰富的功能和工具,其中包括了任意框选截图的功能。 在Unity中,我们可以通过编写脚本来实现任意框选截图。首先,我们需要创建一个脚本,命名为ScreenshotScript,然后将其添加到一个主摄像机或者具有Render Texture的游戏对象上。 在脚本中,我们首先需要定义一个用于存储截图位置和大小的矩形变量,命名为screenshotRect。在Update函数中,我们可以通过鼠标点击和拖拽的方式来改变这个矩形的位置和大小。可以通过Input.mousePosition来获取鼠标位置,并通过鼠标按下和抬起的事件来确定截图开始和结束的位置。 一旦我们确定了截图位置和大小,我们就可以使用屏幕截图函数ScreenCapture.CaptureScreenshot进行截图。该函数将当前帧的渲染结果保存为一张图片,并且可以指定保存路径和文件名。在我们的例子中,我们可以使用Application.dataPath + "/Screenshots/screenshot.png"作为保存路径。 最后,我们还可以在截图完成后,使用一些特效来优化或增强图片。例如可以使用Texture2D.LoadImage将截图加载为一个Texture2D对象,然后使用Texture2D的一些函数调整图片的亮度、对比度、模糊度等效果。 总而言之,Unity提供了任意框选截图的功能,我们可以利用脚本来实现这一功能。通过定义矩形变量来确定截图位置和大小,然后使用ScreenCapture.CaptureScreenshot函数进行截图,并可以对截图进行后期处理。这样,我们就可以在游戏开发中方便、灵活地实现任意框选截图。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值