using UnityEngine; public class TextureChanger : CombineTileByCPU { public Shader cutoutShader; // 材质拼图着色器 private JsonConfigParser.TileConfig config; // 配置信息 private bool isDisabled = true; // 是否禁用点击更换贴图 private Vector3 mouseDownPosition; // 记录鼠标按下的位置 private const float dragThreshold = 5f; // 拖拽的阈值(像素) /// /// 获取当前配置 /// /// public override JsonConfigParser.TileConfig GetConfig() { return config; } /// /// 设置当前配置 /// /// public override void SetTileConfig(string jsonContent) { config = ConfigManager.getTestTileConfig(jsonContent); } /// /// 获取当前共享材质 /// /// public override Material GetCurrentMaterial() { // 返回当前对象的材质 return GetComponent().sharedMaterial; } /// /// 获取当前材质拼图着色器 /// /// public override Shader GetCurrentShader() { return cutoutShader; } /// /// 设置当前贴图 /// /// public void SetCurrentTexture(string jsonStr) { UpdateMaterial(jsonStr); } /// /// 鼠标按下事件处理 /// private void OnMouseDown() { // 记录鼠标按下的位置 mouseDownPosition = Input.mousePosition; } /// /// 鼠标抬起事件处理 /// private void OnMouseUp() { // 检查是否是点击而非拖拽 if (Vector3.Distance(mouseDownPosition, Input.mousePosition) > dragThreshold) { return; // 如果拖拽距离超过阈值,则不触发点击事件 } // 执行点击检测逻辑 HandleClick(); } /// /// 处理点击事件 /// private void HandleClick() { if (isDisabled) { return; } string jsonStr = ConfigCache.Instance.GetConfig(gameObject.tag); if (!string.IsNullOrEmpty(jsonStr)) { SetCurrentTexture(jsonStr); } } /// /// 禁用点击更换贴图 /// public void EnableTextureChanger() { isDisabled = false; } /// /// 启用点击更换贴图 /// public void DisableTextureChanger() { isDisabled = true; } }