This commit is contained in:
2026-07-13 00:12:44 +08:00
parent 05bc1e286b
commit ffcdfa3b77
11 changed files with 441 additions and 17 deletions
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: f790cbebb7c8c304196143de204f5048
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,227 @@
using System.Collections.Generic;
using System.Text;
using UnityEngine;
/// <summary>
/// 图形验证码生成器:运行时动态生成验证码图片(Texture2D → Sprite),不依赖任何外部图片资源。
/// 用法:var sprite = CaptchaGenerator.Generate(width, height, out string code);
/// </summary>
public static class CaptchaGenerator
{
// 验证码字符集(去除易混淆字符 0/O/1/I/l)
private const string CharSet = "23456789ABCDEFGHJKLMNPQRSTUVWXYZ";
// 干扰线颜色池
private static readonly Color[] NoiseColors =
{
new Color(0.6f, 0.6f, 0.6f),
new Color(0.4f, 0.4f, 0.8f),
new Color(0.8f, 0.4f, 0.4f),
new Color(0.4f, 0.8f, 0.4f),
new Color(0.8f, 0.8f, 0.2f),
};
// 字符颜色池
private static readonly Color[] TextColors =
{
new Color(0.1f, 0.1f, 0.6f),
new Color(0.6f, 0.1f, 0.1f),
new Color(0.1f, 0.5f, 0.1f),
new Color(0.5f, 0.2f, 0.5f),
new Color(0.2f, 0.2f, 0.2f),
new Color(0.6f, 0.3f, 0.1f),
};
/// <summary>
/// 生成验证码图片并转换为 Sprite。
/// </summary>
/// <param name="width">图片宽度</param>
/// <param name="height">图片高度</param>
/// <param name="code">输出的验证码文本</param>
/// <param name="length">验证码字符数(默认4)</param>
/// <returns>验证码 Sprite(可直接赋给 Image)</returns>
public static Sprite Generate(int width, int height, out string code, int length = 4)
{
code = RandomCode(length);
var tex = DrawCaptcha(code, width, height);
return Sprite.Create(tex, new Rect(0, 0, width, height), new Vector2(0.5f, 0.5f));
}
/// <summary>
/// 生成验证码图片并转换为 Sprite(无 out 参数的便捷重载)。
/// </summary>
public static Sprite Generate(int width, int height, int length = 4)
{
return Generate(width, height, out _, length);
}
/// <summary>生成随机验证码文本</summary>
private static string RandomCode(int length)
{
var sb = new StringBuilder(length);
for (int i = 0; i < length; i++)
sb.Append(CharSet[Random.Range(0, CharSet.Length)]);
return sb.ToString();
}
/// <summary>把验证码画到 Texture2D 上</summary>
private static Texture2D DrawCaptcha(string code, int width, int height)
{
// 半透明背景,方便看清楚字符
var bg = new Color(0.95f, 0.95f, 0.95f, 1f);
var tex = new Texture2D(width, height, TextureFormat.RGBA32, false);
tex.filterMode = FilterMode.Point;
var pixels = new Color32[width * height];
// 填充背景
for (int i = 0; i < pixels.Length; i++)
pixels[i] = bg;
tex.SetPixels32(pixels);
// 画干扰线
int lineCount = 3 + Random.Range(0, 3); // 3~5 条
for (int i = 0; i < lineCount; i++)
{
var c = NoiseColors[Random.Range(0, NoiseColors.Length)];
int x0 = Random.Range(0, width);
int y0 = Random.Range(0, height);
int x1 = Random.Range(0, width);
int y1 = Random.Range(0, height);
DrawLine(tex, x0, y0, x1, y1, c);
}
// 画干扰点
int dotCount = 30 + Random.Range(0, 30); // 30~59 个
for (int i = 0; i < dotCount; i++)
{
var c = NoiseColors[Random.Range(0, NoiseColors.Length)];
int x = Random.Range(0, width);
int y = Random.Range(0, height);
tex.SetPixel(x, y, c);
}
// 逐个字符绘制(使用内置 8x8 像素字体)
int charPixelSize = Mathf.Min(height * 2 / 3, width / (code.Length + 1)); // 字符像素大小
int startX = (width - code.Length * charPixelSize) / 2;
int startY = (height - charPixelSize) / 2;
for (int i = 0; i < code.Length; i++)
{
var c = TextColors[Random.Range(0, TextColors.Length)];
int x = startX + i * charPixelSize;
// 每个字符的 y 做轻微随机偏移
int y = startY + Random.Range(-charPixelSize / 6, charPixelSize / 6);
DrawChar(tex, code[i], x, y, charPixelSize, c);
}
tex.Apply();
return tex;
}
/// <summary>绘制单条直线(Bresenham)</summary>
private static void DrawLine(Texture2D tex, int x0, int y0, int x1, int y1, Color c)
{
int dx = Mathf.Abs(x1 - x0), sx = x0 < x1 ? 1 : -1;
int dy = -Mathf.Abs(y1 - y0), sy = y0 < y1 ? 1 : -1;
int err = dx + dy;
while (true)
{
if (x0 >= 0 && x0 < tex.width && y0 >= 0 && y0 < tex.height)
tex.SetPixel(x0, y0, c);
if (x0 == x1 && y0 == y1) break;
int e2 = 2 * err;
if (e2 >= dy) { err += dy; x0 += sx; }
if (e2 <= dx) { err += dx; y0 += sy; }
}
}
/// <summary>用 8x8 像素位图绘制单个字符,可缩放到任意像素大小</summary>
private static void DrawChar(Texture2D tex, char ch, int x, int y, int size, Color c)
{
// 5x7 像素位图(行宽5,行高7)的简单 ASCII 字库
bool[,] pattern = GetCharPattern(ch);
if (pattern == null) return;
int pw = pattern.GetLength(0); // 5
int ph = pattern.GetLength(1); // 7
float sx = size / (float)pw;
float sy = size / (float)ph;
for (int py = 0; py < ph; py++)
{
for (int px = 0; px < pw; px++)
{
if (!pattern[px, py]) continue;
// 把位图的一个像素映射到 size×size 区域(从下往上画,因为 Texture2D 原点在左下)
int xStart = Mathf.RoundToInt(x + px * sx);
int xEnd = Mathf.RoundToInt(x + (px + 1) * sx);
int yStart = Mathf.RoundToInt(y + (ph - 1 - py) * sy);
int yEnd = Mathf.RoundToInt(y + (ph - py) * sy);
for (int yy = yStart; yy < yEnd; yy++)
{
for (int xx = xStart; xx < xEnd; xx++)
{
if (xx >= 0 && xx < tex.width && yy >= 0 && yy < tex.height)
tex.SetPixel(xx, yy, c);
}
}
}
}
}
/// <summary>
/// 简单的 5x7 像素字库(支持 0-9 A-Z,去掉易混淆字符)。
/// 返回 bool[x, y],x=0..4(列),y=0..6(行,从上到下)。
/// </summary>
private static bool[,] GetCharPattern(char ch)
{
// 每个字符 7 行,每行 5 个像素(从上到下)
// '1' = 亮,'0' = 暗
string[] rows;
switch (ch)
{
case '2': rows = new[] { "01110", "10001", "00001", "00010", "00100", "01000", "11111" }; break;
case '3': rows = new[] { "01110", "10001", "00001", "00110", "00001", "10001", "01110" }; break;
case '4': rows = new[] { "00010", "00110", "01010", "10010", "11111", "00010", "00010" }; break;
case '5': rows = new[] { "11111", "10000", "11110", "00001", "00001", "10001", "01110" }; break;
case '6': rows = new[] { "00110", "01000", "10000", "11110", "10001", "10001", "01110" }; break;
case '7': rows = new[] { "11111", "00001", "00010", "00100", "01000", "01000", "01000" }; break;
case '8': rows = new[] { "01110", "10001", "10001", "01110", "10001", "10001", "01110" }; break;
case '9': rows = new[] { "01110", "10001", "10001", "01111", "00001", "00010", "01100" }; break;
case 'A': rows = new[] { "01110", "10001", "10001", "11111", "10001", "10001", "10001" }; break;
case 'B': rows = new[] { "11110", "10001", "10001", "11110", "10001", "10001", "11110" }; break;
case 'C': rows = new[] { "01110", "10001", "10000", "10000", "10000", "10001", "01110" }; break;
case 'D': rows = new[] { "11110", "10001", "10001", "10001", "10001", "10001", "11110" }; break;
case 'E': rows = new[] { "11111", "10000", "10000", "11110", "10000", "10000", "11111" }; break;
case 'F': rows = new[] { "11111", "10000", "10000", "11110", "10000", "10000", "10000" }; break;
case 'G': rows = new[] { "01110", "10001", "10000", "10111", "10001", "10001", "01110" }; break;
case 'H': rows = new[] { "10001", "10001", "10001", "11111", "10001", "10001", "10001" }; break;
case 'J': rows = new[] { "00111", "00010", "00010", "00010", "00010", "10010", "01100" }; break;
case 'K': rows = new[] { "10001", "10010", "10100", "11000", "10100", "10010", "10001" }; break;
case 'L': rows = new[] { "10000", "10000", "10000", "10000", "10000", "10000", "11111" }; break;
case 'M': rows = new[] { "10001", "11011", "10101", "10101", "10001", "10001", "10001" }; break;
case 'N': rows = new[] { "10001", "11001", "10101", "10011", "10001", "10001", "10001" }; break;
case 'P': rows = new[] { "11110", "10001", "10001", "11110", "10000", "10000", "10000" }; break;
case 'Q': rows = new[] { "01110", "10001", "10001", "10001", "10101", "10010", "01101" }; break;
case 'R': rows = new[] { "11110", "10001", "10001", "11110", "10100", "10010", "10001" }; break;
case 'S': rows = new[] { "01111", "10000", "10000", "01110", "00001", "10001", "11110" }; break;
case 'T': rows = new[] { "11111", "00100", "00100", "00100", "00100", "00100", "00100" }; break;
case 'U': rows = new[] { "10001", "10001", "10001", "10001", "10001", "10001", "01110" }; break;
case 'V': rows = new[] { "10001", "10001", "10001", "10001", "10001", "01010", "00100" }; break;
case 'W': rows = new[] { "10001", "10001", "10001", "10101", "10101", "11011", "10001" }; break;
case 'X': rows = new[] { "10001", "10001", "01010", "00100", "01010", "10001", "10001" }; break;
case 'Y': rows = new[] { "10001", "10001", "01010", "00100", "00100", "00100", "00100" }; break;
case 'Z': rows = new[] { "11111", "00001", "00010", "00100", "01000", "10000", "11111" }; break;
default: return null;
}
var pattern = new bool[5, 7];
for (int y = 0; y < 7; y++)
for (int x = 0; x < 5; x++)
pattern[x, y] = rows[y][x] == '1';
return pattern;
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 1cba60bc00a4a094a88b8147d9c2fdd5
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -12,6 +12,8 @@ namespace Assets.MyGame.Scripts.Net
{
public class WebSocketReponseList
{
/// <summary>正在加载中的游戏场景 UIPanel 集合,防止房主收到多条 RoomJoinNotice(含人机)时重复创建场景</summary>
private static readonly HashSet<UIPanel> _loadingGamePanels = new HashSet<UIPanel>();
/// <summary>
/// 获取房间列表 room
/// </summary>
@@ -94,23 +96,34 @@ namespace Assets.MyGame.Scripts.Net
default:
break;
}
if (UIManager.Instance.Get<GameMainPanel_Base>(uIPanel)==null)
if (UIManager.Instance.Get<GameMainPanel_Base>(uIPanel)==null && !_loadingGamePanels.Contains(uIPanel))
{
UIManager.Instance.ShowAsync(uIPanel, UIPanel.HomeMainPanel, msg);
// 卸载所有已加载的游戏地图场景
// 标记正在加载,防止房主收到多条 RoomJoinNotice(含人机玩家)时重复创建场景
_loadingGamePanels.Add(uIPanel);
UIManager.Instance.ShowAsync(uIPanel, UIPanel.HomeMainPanel, msg, (panel) =>
{
// 面板创建完成,移除加载标记
_loadingGamePanels.Remove(uIPanel);
});
// 卸载所有已加载的游戏地图场景(保证场景唯一性)
string[] gameScenes = { "FLZY", "YYSC", "XJMH", "HHWK" };
foreach (var sn in gameScenes)
{
// 不卸载即将加载的目标场景
if (sn == sceneName) continue;
var s = SceneManager.GetSceneByName(sn);
if (s.IsValid() && s.isLoaded)
SceneManager.UnloadSceneAsync(sn);
}
SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive);
// 目标场景已加载则不重复加载
var targetScene = SceneManager.GetSceneByName(sceneName);
if (!targetScene.IsValid() || !targetScene.isLoaded)
SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive);
UIManager.Instance.Close(UIPanel.HomeMainPanel);
WebSocketManager.Instance.isGame = true;
}
else
else if (UIManager.Instance.Get<GameMainPanel_Base>(uIPanel) != null)
{
// 面板已存在 → 新玩家加入,转发给现有面板激活座位
var panel = UIManager.Instance.Get<GameMainPanel_Base>(uIPanel);
@@ -134,6 +147,7 @@ namespace Assets.MyGame.Scripts.Net
}
}
}
// else: 场景正在加载中(_loadingGamePanels 含此 uIPanel),忽略本次重复通知
}
@@ -304,7 +304,10 @@ public class GameMainPanel_FishBase : GameMainPanel_Base
UnLoadResources();
SceneManager.UnloadSceneAsync(sceneName);
// 场景可能未加载或已卸载,做保护避免重复卸载报错
var scene = SceneManager.GetSceneByName(sceneName);
if (scene.IsValid() && scene.isLoaded)
SceneManager.UnloadSceneAsync(sceneName);
WebSocketManager.Instance.Close(SocketType.game);
}
@@ -85,6 +85,7 @@ public class UIHome_BY_ShopPanel : SubUIBase
APIRequestList.GetUser(GameManager.Instance.user.id, (a) =>
{
GameManager.Instance.UpdataUserData(a);
RefreshUI();
});
});
});
@@ -228,6 +229,7 @@ public class UIHome_BY_ShopPanel : SubUIBase
APIRequestList.GetUser(GameManager.Instance.user.id, (a) =>
{
GameManager.Instance.UpdataUserData(a);
RefreshUI();
});
});
});
@@ -269,6 +271,7 @@ public class UIHome_BY_ShopPanel : SubUIBase
APIRequestList.GetUser(GameManager.Instance.user.id, (a) =>
{
GameManager.Instance.UpdataUserData(a);
RefreshUI();
});
});
});
+13 -3
View File
@@ -1,4 +1,4 @@
using Assets.MyGame.Scripts.Net;
using Assets.MyGame.Scripts.Net;
using Assets.MyGame.Scripts.Net.API.GameConfig_SubClass;
using Assets.MyGame.Scripts.Net.APIRequest.Objs;
using Assets.MyGame.Scripts.Net.APIResponses.HomeMain_User;
@@ -208,15 +208,25 @@ public class UIHomeMain : UIBase
}
public void UpdateUserData()
{
if (GameManager.Instance?.user?.assets == null) return;
tMP_GoldCoinNum.text = GameManager.Instance.user.assets.gold.ToString();
tMP_DiamondNum.text = GameManager.Instance.user.assets.diamond.ToString();
userName.text = GameManager.Instance.user.BaseInfo.userName;
userID.text = GameManager.Instance.user.BaseInfo.number;
img_VIP.sprite = sprite_VIP[GameManager.Instance.user.assets.vipLevel];
// VIP 图标越界保护:vipLevel 超出列表范围时用最后一个,避免异常中断刷新
int vipLevel = GameManager.Instance.user.assets.vipLevel;
if (sprite_VIP != null && sprite_VIP.Count > 0 && img_VIP != null)
{
int idx = Mathf.Clamp(vipLevel, 0, sprite_VIP.Count - 1);
img_VIP.sprite = sprite_VIP[idx];
}
RefreshAvatar();
RefreshAvatarFrame();
img_VIP.SetNativeSize();
if (img_VIP != null) img_VIP.SetNativeSize();
}
private void RefreshAvatar()
@@ -20,6 +20,9 @@ public class RegisterPanel : SubUIBase
private string _realQueRenPassword = "";
private Coroutine _maskCoroutine, _maskCoroutine2;
/// <summary>当前验证码(不区分大小写比对)</summary>
private string _captchaCode = "";
public override void Awake()
{
base.Awake();
@@ -37,8 +40,25 @@ public class RegisterPanel : SubUIBase
tMPInput_QueRenPassword.contentType = TMP_InputField.ContentType.Standard;
tMPInput_QueRenPassword.onValueChanged.AddListener(v => OnPwdChanged(v, tMPInput_QueRenPassword, ref _realQueRenPassword, ref _maskCoroutine2));
// 点击验证码图片刷新
if (img_YZM != null)
{
var yzmBtn = img_YZM.GetComponent<Button>();
if (yzmBtn == null) yzmBtn = img_YZM.gameObject.AddComponent<Button>();
yzmBtn.onClick.AddListener(RefreshCaptcha);
}
btn_Register.onClick.AddListener(() =>
{
// 校验验证码(不区分大小写)
if (string.IsNullOrEmpty(_captchaCode) ||
!string.Equals(tMPInput_YZM.text, _captchaCode, System.StringComparison.OrdinalIgnoreCase))
{
UIManager.Instance.ShowBoardError("验证码错误");
RefreshCaptcha();
return;
}
APIRequestList.Register(new Assets.MyGame.Scripts.Net.APIRequest.Objs.RegisterObj
{
mobile = tMPInput_UserName.text,
@@ -53,6 +73,17 @@ public class RegisterPanel : SubUIBase
});
});
RefreshCaptcha();
}
/// <summary>生成并显示新的验证码图片</summary>
private void RefreshCaptcha()
{
if (img_YZM == null) return;
var sprite = CaptchaGenerator.Generate(160, 60, out _captchaCode, 4);
img_YZM.sprite = sprite;
if (tMPInput_YZM != null) tMPInput_YZM.text = "";
}
private void OnPwdChanged(string display, TMP_InputField input, ref string real, ref Coroutine cr)
@@ -1,5 +1,95 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &130878127009665589
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 402500192337834392}
- component: {fileID: 6648427320965333739}
- component: {fileID: 5162676732187391039}
- component: {fileID: 1702240637627174844}
m_Layer: 0
m_Name: "\u9A8C\u8BC1\u7801\u63D0\u793A\u6846 (1)"
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &402500192337834392
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 130878127009665589}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 8238622764576799807}
m_Father: {fileID: 5760332990951854565}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 206.50009, y: -152.50008}
m_SizeDelta: {x: 189, y: 62}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &6648427320965333739
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 130878127009665589}
m_CullTransparentMesh: 1
--- !u!114 &5162676732187391039
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 130878127009665589}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 21300000, guid: aa1c61138c61f7d4f97e514c84efe1d9, type: 3}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!114 &1702240637627174844
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 130878127009665589}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3}
m_Name:
m_EditorClassIdentifier:
m_ShowMaskGraphic: 1
--- !u!1 &371857212190886996
GameObject:
m_ObjectHideFlags: 0
@@ -3003,7 +3093,7 @@ RectTransform:
m_LocalScale: {x: 0.8, y: 0.8, z: 0.8}
m_ConstrainProportionsScale: 1
m_Children:
- {fileID: 8238622764576799807}
- {fileID: 402500192337834392}
- {fileID: 6788651556310521657}
- {fileID: 7742629450309001792}
- {fileID: 9121190289241508109}
@@ -3215,11 +3305,11 @@ RectTransform:
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 5760332990951854565}
m_Father: {fileID: 402500192337834392}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 206.50009, y: -152.50006}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 189, y: 62}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &8120169878869360682
@@ -3250,7 +3340,7 @@ MonoBehaviour:
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 21300000, guid: aa1c61138c61f7d4f97e514c84efe1d9, type: 3}
m_Sprite: {fileID: 0}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
@@ -3816,6 +3906,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
btn_Close: {fileID: 4276198549132994028}
uIEffect: 1
tMPInput_UserName: {fileID: 4492449882434305716}
tMPInput_Password: {fileID: 4410289030012361464}
tMPInput_QueRenPassword: {fileID: 8639823229264985157}
@@ -49,7 +49,7 @@ TextureImporter:
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteBorder: {x: 9, y: 0, z: 9, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
@@ -106,6 +106,19 @@ TextureImporter:
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: iPhone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
@@ -113,7 +126,7 @@ TextureImporter:
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
internalID: 1537655665
vertices: []
indices:
edges: []
@@ -49,7 +49,7 @@ TextureImporter:
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteBorder: {x: 11, y: 0, z: 10, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
@@ -106,6 +106,19 @@ TextureImporter:
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: iPhone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
@@ -113,7 +126,7 @@ TextureImporter:
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
internalID: 1537655665
vertices: []
indices:
edges: []