Unity 通过Image透明度来判断鼠标的区域

1、勾选image的Read/Write这一步是让Cpu得到image数据信息

2、上干货

using UnityEngine;
using UnityEngine.UI;
public class ImageAlpahJudge : MonoBehaviour, ICanvasRaycastFilter
{
	[Header("透明度过滤阈值")]
	public float alpahThreshold = 0.1f;

	Image _image;
	void Start()
	{
		_image = GetComponent<Image>();
	}

	public bool IsRaycastLocationValid(Vector2 sp, Camera eventCamera)
	{
		//将选中的点转换为Image区域内的本地点
		Vector2 localPoint;
		RectTransformUtility.ScreenPointToLocalPointInRectangle(_image.rectTransform, sp, eventCamera, out localPoint);

		Vector2 pivot = _image.rectTransform.pivot;
		Vector2 normalizedLocal = new Vector2(pivot.x + localPoint.x / _image.rectTransform.rect.width, pivot.y + localPoint.y / _image.rectTransform.rect.height);
		Vector2 uv = new Vector2(
			_image.sprite.rect.x + normalizedLocal.x * _image.sprite.rect.width,
			_image.sprite.rect.y + normalizedLocal.y * _image.sprite.rect.height);

		uv.x /= _image.sprite.texture.width;
		uv.y /= _image.sprite.texture.height;


		//获取指定纹理坐标(u, v)处的像素颜色。它返回一个Color结构,其中包含红、绿、蓝和alpha通道的值。
		//Color c = _image.sprite.texture.GetPixel((int)uv.x, (int)uv.y);
		//用于在纹理上执行双线性插值以获取像素颜色值,这个方法使用双线性插值算法来估算纹理中某个位置的颜色,而不是直接从纹理的像素中读取颜色。
		Color c = _image.sprite.texture.GetPixelBilinear(uv.x, uv.y);
		var b = c.a > alpahThreshold;
		Debug.Log(b);
		return b;
	}
	void Update()
	{

	}
}

### Unity 点击对象修改 UI Image 透明度的 C# 脚本 在 Unity 中,可以通过脚本来实现点击某个游戏对象后动态调整 `Image` 组件的透明度。以下是具体的解决方案: 为了完成此功能,需要监听鼠标点击事件并获取目标对象的信息。随后找到对应的 `Image` 组件,并通过设置其颜色属性来改变透明度。 #### 实现代码 以下是一个完整的 C# 脚本示例,该脚本实现了当玩家点击指定的对象时,更改与其关联的 `Raw Image` 或 `Image` 的透明度[^1]。 ```csharp using UnityEngine; using UnityEngine.UI; // 导入UI命名空间以便访问Image组件 public class ModifyImageTransparency : MonoBehaviour { public GameObject targetImageObject; // 需要在Inspector面板中拖拽分配的目标Image所在的Game Object private Image targetImage; void Start() { // 获取目标Image组件 if (targetImageObject != null) targetImage = targetImageObject.GetComponent<Image>(); if (targetImage == null) Debug.LogError("Target Image Component Not Found!"); } void OnMouseDown() { // 当点击当前物体时触发 if (targetImage != null) { Color newColor = targetImage.color; // 改变Alpha值(透明度),这里将其降低到0.5f作为例子 newColor.a = Mathf.Clamp(newColor.a - 0.2f, 0f, 1f); targetImage.color = newColor; } } } ``` 上述代码片段的功能如下: - 它定义了一个公共变量 `targetImageObject` 来存储与之交互的 `Image` 所属的游戏对象。 - 使用 `OnMouseDown()` 方法检测用户的点击操作[^3]。 - 如果成功找到了 `Image` 组件,则读取它的当前颜色,并减少 Alpha 值(即增加透明效果)。每次点击都会进一步减小透明度直到完全不可见为止。 注意:如果希望恢复原始不透明状态或者执行其他逻辑也可以在此基础上扩展更多条件判断语句或方法调用。 #### 关键点说明 - **透明度控制** 是通过对 `Color` 属性中的 alpha 值进行调节达成的。alpha 取值范围为 `[0,1]` ,其中 `0` 表示完全透明而 `1` 则代表全然可见[^2]。 - 对于想要隐藏整个 UI 元素而不是仅仅改变透明度的情况,还可以考虑直接启用/禁用该游戏物件本身的方法如 `gameObject.SetActive(false)` `gameObject.SetActive(true)` . ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

w-白兰地

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值