当前位置: 首页 > news >正文

电白区住房和城乡建设部门户网站江门seo外包公司

电白区住房和城乡建设部门户网站,江门seo外包公司,网站建设费用预算表格,有网但是网页打不开是什么原因思路 获取鼠标所在屏幕坐标(Vector2)通过相机ScreenToWorldPoint(Vector3)转为世界坐标 (注意Vector3的z是距离相机的距离,相机需要正交)通过SpriteRenderer访问边界Bounds通过Bounds.Contain检测世界坐标是否在SpriteBounds内通过比例计算来确定在Sprite内的UV坐标…

思路

  1. 获取鼠标所在屏幕坐标(Vector2)
  2. 通过相机ScreenToWorldPoint(Vector3)转为世界坐标 (注意Vector3的z是距离相机的距离,相机需要正交)
  3. 通过SpriteRenderer访问边界Bounds
  4. 通过Bounds.Contain检测世界坐标是否在SpriteBounds内
  5. 通过比例计算来确定在Sprite内的UV坐标,并根据像素长宽确定像素坐标

float pixelX = (worldPositiopn.x - bounds.min.x) / bounds.size.x * bgSprite.texture.width;
float pixelY = (worldPositiopn.y - bounds.min.y) / bounds.size.y * bgSprite.texture.height;

部分编辑器依赖于OdinInspector,不用可以把红线都删了

实现的效果类似这样,根据边界贴图检测鼠标画线位置是否在范围内请添加图片描述

using Sirenix.OdinInspector;
using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;namespace Yueh0607.ClothOperations
{public class CutBehaviour : MonoBehaviour{[ShowIf("IsRuntime")][ReadOnly][SerializeField]Sprite bgSprite, lineStyleSprite, edgeSprite;[ShowIf("IsRuntime")][ReadOnly][SerializeField]SpriteRenderer bgRenderer, lineStyleRenderer;[SerializeField] Color edgeColor = Color.black;bool initialized = false;#if UNITY_EDITORbool IsRuntime() => Application.isPlaying;
#endif/// <summary>/// 初始化裁剪行为/// </summary>/// <param name="bgSprite">背景精灵图</param>/// <param name="lineStyleSprite">裁剪线样式精灵图</param>/// <param name="edgeSprite">边界范围精灵图(RBGA 0-1 使用(0,0,0,1)表示裁剪线范围)</param>public void Initialize(Sprite bgSprite, Sprite lineStyleSprite, Sprite edgeSprite){this.bgSprite = bgSprite;this.edgeSprite = edgeSprite;this.lineStyleSprite = lineStyleSprite;bool sizeMatch = (lineStyleSprite.texture.width == bgSprite.texture.width && edgeSprite.texture.width == bgSprite.texture.width)&& (lineStyleSprite.texture.height == bgSprite.texture.height && edgeSprite.texture.height == bgSprite.texture.height);bool rectMatch = (lineStyleSprite.rect == bgSprite.rect && edgeSprite.rect == bgSprite.rect);if (!sizeMatch) throw new System.Exception("贴图尺寸不合规");if (!rectMatch) throw new System.Exception("精灵尺寸不合规");DynamicInitialize();initialized = true;}/// <summary>/// 动态内容的初始化/// </summary>private void DynamicInitialize(){GameObject bg = new GameObject("CutBackgroundImage");bg.transform.SetParent(transform);bg.transform.position = Vector3.zero;bgRenderer = bg.AddComponent<SpriteRenderer>();bgRenderer.sprite = bgSprite;GameObject lineStyle = new GameObject("LineStyle");lineStyle.transform.SetParent(transform);lineStyle.transform.position = Vector3.zero;lineStyleRenderer = lineStyle.AddComponent<SpriteRenderer>();lineStyleRenderer.sprite = lineStyleSprite;}/// <summary>/// 检查裁剪行为初始化/// </summary>/// <exception cref="System.Exception"></exception>[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]private void ExceptionCheck(){if (!initialized) throw new System.Exception("未初始化裁剪行为!");}/// <summary>/// 将世界坐标转换到像素坐标/// </summary>/// <param name="worldPositiopn"></param>/// <param name="pixelPosition"></param>/// <returns></returns>public bool TransPoint(Vector2 worldPositiopn, out Vector2Int pixelPosition){ExceptionCheck();Bounds bounds= bgRenderer.bounds;if (bounds.Contains(worldPositiopn)){//get pixelX and pixelYfloat pixelX = (worldPositiopn.x - bounds.min.x) / bounds.size.x * bgSprite.texture.width;float pixelY = (worldPositiopn.y - bounds.min.y) / bounds.size.y * bgSprite.texture.height;//float pixelX = (worldPositiopn.x - bounds.) / bgSprite.rect.width * bgSprite.texture.width;//float pixelY = (worldPositiopn.y - bgSprite.rect.y) / bgSprite.rect.height * bgSprite.texture.height;pixelPosition = new Vector2Int(Mathf.RoundToInt(pixelX), Mathf.RoundToInt(pixelY));return true;}pixelPosition = Vector2Int.zero;return false;}/// <summary>/// 判断某个世界坐标是否在裁剪线范围内/// </summary>/// <param name="worldPosition">Sprite所在的坐标系坐标</param>/// <returns></returns>public bool IsInEdgeRange(Vector2 worldPosition){ExceptionCheck();bool result = TransPoint(worldPosition, out Vector2Int pixelPosition);if (!result) return false;Color color = edgeSprite.texture.GetPixel(pixelPosition.x, pixelPosition.y);if (color == edgeColor) return true;return false;}}
}
http://www.yayakq.cn/news/650736/

相关文章:

  • 百度只更新快照不收录网站网页设计班学费
  • 域名 和网站有什么区别精细化工网站建设
  • 网站客户留言哪个网站建设
  • 如何做自己的广告网站wordpress 简洁 模板
  • 湖南高端网站制做的网站不能放视频播放器
  • 视频网站调用宁波cms模板建站
  • 网站建设:博采网络芙蓉区建设局网站
  • 仙游网站建设编写网站策划书
  • 怎么制作网站软件下载进修学校 网站建设目标
  • 网站结构合理网站建设培训费用
  • 零食网站建设的必要性企业管理工具
  • 淘宝电商平台网站做网站培训班
  • 阿里巴巴国际站的前台网址是深圳大簇激光公司网站
  • 网站建设走的路线风格二维码生成器使用方法
  • 河南郑州网站制作公司个体户做网站
  • 我的世界做壁纸网站陕西西安建设厅官方网站
  • 网站建设 价格低有没有给人做简历的网站
  • 企业网站搭建的优点铁道部建设管理司官方网站
  • 怎么制作网站店铺健康成都官微最新消息
  • dedecms做门户网站wordpress 投稿页面
  • 遵化建行网站百度一下百度搜索入口
  • 关键词排名优化网站建设公司哪家好网站开发完成如何上线
  • 族蚂建站wordpress带格式的字体怎么修改
  • 南京文化云网站建设个人网站备案 服务内容怎么写
  • 手表网站欧米茄官方物流查询网站开发
  • 团建拓展网站建设需求分析外包如何加工资
  • 做淘宝客的网站所需空间卓业网站建设
  • 安徽网站开发推荐关于网站开发网页上传和网站发布
  • 学网站建设要学什么网站建设有什么需求
  • 深圳网站关键词优化企业进行网站建设的方式