unity 框选

/****************************************************
    文件:RectRenderController.cs
	作者:Edision
    邮箱: 424054763@qq.com
    日期:#CreateTime#
	功能:框选控制
*****************************************************/

using UnityEngine;

public class RectRenderController : MonoBehaviour
{
    /// <summary>
    /// 鼠标左键是否按下
    /// </summary>
    private bool isMouseDown;

    /// <summary>
    /// 画线工具
    /// </summary>
    private LineRenderer lineRenderer;

    /// <summary>
    /// 框的起始点,即按下鼠标左键时指针的位置
    /// </summary>
    private Vector3 startPoint;

    /// <summary>
    /// 在拖移过程中,玩家鼠标指针所在的实时位置
    /// </summary>
    private Vector3 currentPoint;

    /// <summary>
    /// 框的终止点,即放开鼠标左键时指针的位置
    /// </summary>
    private Vector3 endPoint;


    private void Awake()
    {
        isMouseDown = false;
        lineRenderer = GetComponent<LineRenderer>();
        if (lineRenderer==null)
        {
            lineRenderer = this.gameObject.AddComponent<LineRenderer>();
        }
        lineRenderer.loop = true;
        lineRenderer.useWorldSpace = true;
        lineRenderer.SetWidth(0.01f, 0.01f);
    }


    private void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            startPoint = Input.mousePosition;

            isMouseDown = true;
        }
        else if (Input.GetMouseButtonUp(0))
        {
            isMouseDown = false;
            lineRenderer.positionCount = 0;
            endPoint = Input.mousePosition;
        }
        RectRender();
    }

    private float temp_Z = 5f;
    private Vector3 temp_RightUpPos;
    private Vector3 temp_LeftDownPos;

    /// <summary>
    /// 框选绘制
    /// </summary>
    private void RectRender()
    {
        if (isMouseDown)
        {
            currentPoint = Input.mousePosition;
            startPoint.z = temp_Z;
            currentPoint.z = temp_Z;

            SetV3(ref temp_RightUpPos, currentPoint.x, startPoint.y, temp_Z);
            SetV3(ref temp_LeftDownPos, startPoint.x, currentPoint.y, temp_Z);

            lineRenderer.positionCount = 4;
            lineRenderer.SetPosition(0, Camera.main.ScreenToWorldPoint(startPoint));
            lineRenderer.SetPosition(1, Camera.main.ScreenToWorldPoint(temp_RightUpPos));
            lineRenderer.SetPosition(2, Camera.main.ScreenToWorldPoint(currentPoint));
            lineRenderer.SetPosition(3, Camera.main.ScreenToWorldPoint(temp_LeftDownPos));

        }
    }

    private void SetV3(ref Vector3 v3, float x, float y, float z)
    {
        v3.x = x;
        v3.y = y;
        v3.z = z;
    }

    private void OnDestroy()
    {
        isMouseDown = false;
    }
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值