From 9bf04fe941611c41a6d8b879ff84de9cda36083e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E5=8F=B7=E6=95=AC?= <153802103@qq.com> Date: Thu, 9 Jan 2025 12:03:44 +0800 Subject: [PATCH] =?UTF-8?q?=E9=92=93=E6=89=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- meng_yao/Assets/Scenes/scene_Main.unity | 44 +- .../scene_Main/Thebestfishman/FishingPK.cs | 405 ++++++++++++++++++ .../Thebestfishman/FishingPK.cs.meta | 11 + .../scene_Main/Thebestfishman/WebFishingPK.cs | 134 +++--- 4 files changed, 497 insertions(+), 97 deletions(-) create mode 100644 meng_yao/Assets/script/scene_Main/Thebestfishman/FishingPK.cs create mode 100644 meng_yao/Assets/script/scene_Main/Thebestfishman/FishingPK.cs.meta diff --git a/meng_yao/Assets/Scenes/scene_Main.unity b/meng_yao/Assets/Scenes/scene_Main.unity index ed9c51e5..d2443431 100644 --- a/meng_yao/Assets/Scenes/scene_Main.unity +++ b/meng_yao/Assets/Scenes/scene_Main.unity @@ -5533,7 +5533,7 @@ RectTransform: m_Father: {fileID: 2031406836} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0.06608202} + m_AnchorMin: {x: 0, y: 0.06608212} m_AnchorMax: {x: 1, y: 1} m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 20, y: 20} @@ -10454,7 +10454,7 @@ MonoBehaviour: m_TargetGraphic: {fileID: 64216422} m_HandleRect: {fileID: 64216421} m_Direction: 2 - m_Value: 0.99999857 + m_Value: 1 m_Size: 0.9339179 m_NumberOfSteps: 0 m_OnValueChanged: @@ -138518,7 +138518,8 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 1479024099} - - component: {fileID: 1479024100} + - component: {fileID: 1479024101} + - component: {fileID: 1479024102} m_Layer: 5 m_Name: The_best_fisherman_PK m_TagString: Untagged @@ -138547,7 +138548,29 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &1479024100 +--- !u!114 &1479024101 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1479024098} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9af3f04677f530449a0810b75783fbca, type: 3} + m_Name: + m_EditorClassIdentifier: + TimeText: {fileID: 1804395153} + introtext: {fileID: 1425714360} + lefttext: {fileID: 1943550231} + righttext: {fileID: 1010492249} + TouruBtn: {fileID: 1300542675} + selleftbtn: {fileID: 974547746} + selrightbtn: {fileID: 977172793} + Dropdown: {fileID: 1336765447} + photoMovement: {fileID: 1011623730} + photoMovement1: {fileID: 680775552775591948} +--- !u!114 &1479024102 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -138567,9 +138590,7 @@ MonoBehaviour: selleftbtn: {fileID: 974547746} selrightbtn: {fileID: 977172793} Dropdown: {fileID: 1336765447} - returnbtn: {fileID: 2127736424} photoMovement: {fileID: 1011623730} - photoMovement1: {fileID: 680775552775591948} --- !u!1 &1479805049 GameObject: m_ObjectHideFlags: 0 @@ -200824,17 +200845,6 @@ MonoBehaviour: m_EditorClassIdentifier: gotoscene: {fileID: 1192041085} nowScene: {fileID: 1479024098} ---- !u!114 &2127736424 stripped -MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 8631885451795898584, guid: 638b7f7423db411419568d073208d929, type: 3} - m_PrefabInstance: {fileID: 989483048} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2127736419} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} - m_Name: - m_EditorClassIdentifier: --- !u!1 &2128193624 GameObject: m_ObjectHideFlags: 0 diff --git a/meng_yao/Assets/script/scene_Main/Thebestfishman/FishingPK.cs b/meng_yao/Assets/script/scene_Main/Thebestfishman/FishingPK.cs new file mode 100644 index 00000000..4125997d --- /dev/null +++ b/meng_yao/Assets/script/scene_Main/Thebestfishman/FishingPK.cs @@ -0,0 +1,405 @@ +using System; +using System.Collections.Generic; +using System.Net.WebSockets; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using UnityEngine; +using Newtonsoft.Json; +using System.Drawing; +using UnityEngine.UI; +public class FishingPK : MonoBehaviour +{ + private ClientWebSocket _webSocket; + private const string WebSocketUri = "ws://47.95.201.243:9527/api/ws"; + private string AuthorizationValue; + + /// + /// 倒计时 + /// + private float lastCallTime = 0f; + float remainingTime = 0f; + public Text TimeText; + private float interval = 1f; // 每秒调用一次 + /// + /// 文本描述 + /// 、 + public Text introtext; + /// + /// 左右金币 + /// + public Text lefttext; + public Text righttext; + public Button TouruBtn; + public Button selleftbtn; + public Button selrightbtn; + public Dropdown Dropdown; + int pos = 0; + private UnityEngine.Color normalColor = UnityEngine.Color.white; // 默认颜色 + private UnityEngine.Color selectedColor = UnityEngine.Color.blue; // 选中时的颜色 + + /// + /// 钓鱼 + /// + /// + public PhotoMovement photoMovement; + public PhotoMovement photoMovement1; + private async void Start() + { + TimeText.gameObject.SetActive(false); + Debug.Log(PlayerPrefs.GetString("UserToken")); + AuthorizationValue = PlayerPrefs.GetString("UserToken"); + await ConnectWebSocket(); + selleftbtn.onClick.AddListener(() => + { + pos = 1; + ChangeButtonColor(selleftbtn, selectedColor); + ChangeButtonColor(selrightbtn, normalColor); // 恢复右侧按钮颜色 + }); + + // 为右侧按钮添加点击监听器 + selrightbtn.onClick.AddListener(() => + { + pos = 2; + ChangeButtonColor(selrightbtn, selectedColor); + ChangeButtonColor(selleftbtn, normalColor); // 恢复左侧按钮颜色 + }); + // 调用发送方法 + await SendJsonMessage("{ \"code\": \"FISHING_PK\", \"content\": \"{\\\"action\\\":\\\"INFO\\\"}\" }"); + TouruBtn.onClick.AddListener(async() => + { + await SendJsonMessage(int.Parse(Dropdown.options[Dropdown.value].text), pos); + }); + + } + private void ChangeButtonColor(Button btn, UnityEngine.Color color) + { + btn.gameObject.GetComponent().color = color; + } + private async Task ConnectWebSocket() + { + _webSocket = new ClientWebSocket(); + + // 添加 Authorization 头 + _webSocket.Options.SetRequestHeader("Authorization", "Bearer " + AuthorizationValue); + + try + { + Debug.Log("正在连接到 WebSocket..."); + await _webSocket.ConnectAsync(new Uri(WebSocketUri), CancellationToken.None); + Debug.Log("WebSocket 连接成功!"); + + // 开始接收消息 + _ = ReceiveMessages(); + } + catch (Exception e) + { + Debug.LogError($"WebSocket 连接失败:{e.Message}"); + } + } + + private async Task ReceiveMessages() + { + var buffer = new byte[1024]; + + try + { + while (_webSocket.State == WebSocketState.Open) + { + var result = await _webSocket.ReceiveAsync(new ArraySegment(buffer), CancellationToken.None); + + if (result.MessageType == WebSocketMessageType.Close) + { + Debug.Log("WebSocket 连接已被服务器关闭。"); + await _webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "关闭连接", CancellationToken.None); + } + else + { + var message = Encoding.UTF8.GetString(buffer, 0, result.Count); + Debug.Log($"接收到消息:{message}"); + + var baseResponse = JsonConvert.DeserializeObject(message); + //Promptmgr.Instance.PromptBubble(baseResponse.message); + if (baseResponse != null) + { + switch (baseResponse.code) + { + // 解析消息为 钓手PK信息 + case "FISHING_PK_INFO": + // 解析为 FishJoinroomresponse 类型 + FishPKInforResponse fishResponse = JsonConvert.DeserializeObject(message); + //Promptmgr.Instance.PromptBubble(fishResponse.message); + if (fishResponse?.data != null) + { + Debug.Log(fishResponse.data.balance); + Debug.Log(fishResponse.data.intro_text); + introtext.text = fishResponse.data.intro_text; + Debug.Log(fishResponse.data.countdown); + TimeText.gameObject.SetActive(true); + remainingTime = (float)fishResponse.data.countdown; + Debug.Log(fishResponse.data.countdown_type); + if(fishResponse.data.countdown_type==0) + { + photoMovement.type = true; + photoMovement.Del1(); + photoMovement.To1(); + photoMovement1.type = true; + photoMovement1.Del1(); + photoMovement1.To1(); + + } + else + { + photoMovement.Del1(); + photoMovement.type = false; + + photoMovement.To2(); + photoMovement1.Del1(); + photoMovement1.type = false; + + photoMovement1.To2(); + + } + Debug.Log(fishResponse.data.amount_left); + lefttext.text= fishResponse.data.amount_left.ToString(); + Debug.Log(fishResponse.data.amount_right); + righttext.text= fishResponse.data.amount_right.ToString(); + + } + break; + //解析为钓手PK投入 + case "FISHING_PK_BETTING": + // 解析消息为 Fishresponse 对象 + FishPKBetonResponse fishResponse1 = JsonConvert.DeserializeObject(message); + Promptmgr.Instance.PromptBubble(fishResponse1.message); + // 检查是否成功反序列化 + if (fishResponse1 != null && fishResponse1.data != null) + { + Debug.Log(fishResponse1.data.balance); + } + else + { + Debug.LogWarning("收到的消息无法解析为 Fishresponse 对象。"); + } + break; + //解析为钓手Pk 倒计时 + case "FISHING_PK_COUNTDOWN": + + // 解析消息为 Fishresponse 对象 + FishPKCDResponse fishResponse2 = JsonConvert.DeserializeObject(message); + //Promptmgr.Instance.PromptBubble(fishResponse2.message); + // 检查是否成功反序列化 + if (fishResponse2 != null && fishResponse2.data != null) + { + Debug.Log(fishResponse2.data.countdown); + remainingTime = (float)fishResponse2.data.countdown; + Debug.Log(fishResponse2.data.countdown_type); + if (fishResponse2.data.countdown_type == 0) + { + photoMovement.type = true; + photoMovement.Del1(); + photoMovement.To1(); + photoMovement1.type = true; + photoMovement1.Del1(); + photoMovement1.To1(); + } + else + { + photoMovement.Del1(); + photoMovement.type = false; + + photoMovement.To2(); + photoMovement1.Del1(); + photoMovement1.type = false; + + photoMovement1.To2(); + } + Debug.Log(fishResponse2.data.amount_left); + Debug.Log(fishResponse2.data.amount_right); + lefttext.text = fishResponse2.data.amount_left.ToString(); + righttext.text = fishResponse2.data.amount_right.ToString(); + } + else + { + Debug.LogWarning("收到的消息无法解析为 Fishresponse 对象。"); + } + break; + case "FISHING_PK_SETTLE": + FishPKSETResponse fishResponse3 = JsonConvert.DeserializeObject(message); + //Promptmgr.Instance.PromptBubble(fishResponse2.message); + // 检查是否成功反序列化 + if (fishResponse3 != null && fishResponse3.data != null) + { + Debug.Log(fishResponse3.data.balance); + Debug.Log(fishResponse3.data.status); + Debug.Log(fishResponse3.data.amount); + Debug.Log(fishResponse3.data.reward); + Debug.Log(fishResponse3.data.weight_left); + Debug.Log(fishResponse3.data.weight_right); + Promptmgr.Instance.PromptBubble(fishResponse3.data.status); + } + else + { + Debug.LogWarning("收到的消息无法解析为 Fishresponse 对象。"); + } + break; + } + } + + + + } + } + } + catch (Exception e) + { + Debug.LogError($"接收消息时出错:{e.Message}"); + } + } + public async Task SendJsonMessage(int count, int postion) + { + if (_webSocket == null || _webSocket.State != WebSocketState.Open) + { + Debug.LogError("WebSocket 未连接,无法发送消息。"); + return; + } + + try + { + var message = new + { + code = "FISHING_PK", + content = $"{{\"action\":\"BETTING\",\"amount\":{count},\"position\":{postion}}}" + }; + + // 将对象序列化为 JSON 字符串 + string jsonMessage = JsonConvert.SerializeObject(message); + var encodedMessage = Encoding.UTF8.GetBytes(jsonMessage); + var buffer = new ArraySegment(encodedMessage); + + await _webSocket.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None); + Debug.Log($"已发送 JSON 消息:{jsonMessage}"); + } + catch (Exception e) + { + Debug.LogError($"发送消息时出错:{e.Message}"); + } + } + public async Task SendJsonMessage(string json) + { + if (_webSocket == null || _webSocket.State != WebSocketState.Open) + { + Debug.LogError("WebSocket 未连接,无法发送消息。"); + return; + } + + try + { + var encodedMessage = Encoding.UTF8.GetBytes(json); + var buffer = new ArraySegment(encodedMessage); + + await _webSocket.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None); + Debug.Log($"已发送 JSON 消息:{json}"); + } + catch (Exception e) + { + Debug.LogError($"发送消息时出错:{e.Message}"); + } + } + + private async void OnApplicationQuit() + { + if (_webSocket != null && _webSocket.State == WebSocketState.Open) + { + await _webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "应用程序退出", CancellationToken.None); + _webSocket.Dispose(); + Debug.Log("WebSocket 连接已关闭。"); + } + } + void UpdateCountdownText(float remainingTime) + { + + // 将剩余时间转换为小时、分钟和秒 + int hours = Mathf.FloorToInt(remainingTime / 3600); + int minutes = Mathf.FloorToInt((remainingTime % 3600) / 60); + int seconds = Mathf.FloorToInt(remainingTime % 60); + + // 使用格式化字符串显示倒计时(00:00:00) + TimeText.text = "倒计时:"+string.Format("{0:D2}:{1:D2}:{2:D2}", hours, minutes, seconds); + + + } + private void Update() + { + if (Time.time - lastCallTime >= interval) + { + // 每秒调用一次的代码 + if (remainingTime > 0) + { + remainingTime -= 1; + UpdateCountdownText(remainingTime); + Debug.Log("进入倒计时"); + } + + // 更新上次调用时间 + lastCallTime = Time.time; + } + } +} + +public class FishPKInforResponse +{ + public string code { get; set; } + public string message { get; set; } + public FishPKInfor data { get; set; } +} +public class FishPKInfor +{ + public float balance { get; set; } + + public string intro_text { get; set; } + public int countdown { get; set; } + public int countdown_type { get; set; } + public float amount_left { get; set; } + public float amount_right { get; set; } + +} +public class FishPKBetonResponse +{ + public string code { get; set; } + public string message { get; set; } + public FishPKdata data { get; set; } +} +public class FishPKdata +{ + public float balance { get; set; } +} +public class FishPKCDResponse +{ + public string code { get; set; } + public string message { get; set; } + public FishPKCDdata data { get; set; } +} +public class FishPKCDdata +{ + public int countdown { get; set; } + public int countdown_type { get; set; } + public float amount_left { get; set; } + public float amount_right { get; set; } +} +public class FishPKSETResponse +{ + public string code { get; set; } + public string message { get; set; } + public FishPKSETdata data { get; set; } +} +public class FishPKSETdata +{ + public float balance { get; set; } + + public string status { get; set; } + public float amount { get; set; } + public float reward { get; set; } + public float weight_left { get; set; } + public float weight_right { get; set; } +} diff --git a/meng_yao/Assets/script/scene_Main/Thebestfishman/FishingPK.cs.meta b/meng_yao/Assets/script/scene_Main/Thebestfishman/FishingPK.cs.meta new file mode 100644 index 00000000..c96d81de --- /dev/null +++ b/meng_yao/Assets/script/scene_Main/Thebestfishman/FishingPK.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9af3f04677f530449a0810b75783fbca +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/meng_yao/Assets/script/scene_Main/Thebestfishman/WebFishingPK.cs b/meng_yao/Assets/script/scene_Main/Thebestfishman/WebFishingPK.cs index 26044d63..7b831e17 100644 --- a/meng_yao/Assets/script/scene_Main/Thebestfishman/WebFishingPK.cs +++ b/meng_yao/Assets/script/scene_Main/Thebestfishman/WebFishingPK.cs @@ -38,13 +38,12 @@ public class WebFishingPK : MonoBehaviour private UnityEngine.Color normalColor = UnityEngine.Color.white; // 默认颜色 private UnityEngine.Color selectedColor = UnityEngine.Color.blue; // 选中时的颜色 - public Button returnbtn; + /// /// 钓鱼 /// /// public PhotoMovement photoMovement; - public PhotoMovement photoMovement1; private async void Start() { TimeText.gameObject.SetActive(false); @@ -71,10 +70,6 @@ public class WebFishingPK : MonoBehaviour { await SendJsonMessage(int.Parse(Dropdown.options[Dropdown.value].text), pos); }); - //returnbtn.onClick.AddListener(async () => - //{ - // await SendJsonMessage("{ \"code\": \"FISHING_PK\", \"content\": \"{\\\"action\\\":\\\"LEAVE\\\"}\" }"); - //}); } private void ChangeButtonColor(Button btn, UnityEngine.Color color) @@ -145,24 +140,13 @@ public class WebFishingPK : MonoBehaviour Debug.Log(fishResponse.data.countdown_type); if(fishResponse.data.countdown_type==0) { - photoMovement.type = true; photoMovement.Del1(); photoMovement.To1(); - photoMovement1.type = true; - photoMovement1.Del1(); - photoMovement1.To1(); - } else { photoMovement.Del1(); - photoMovement.type = false; - photoMovement.To2(); - photoMovement1.Del1(); - photoMovement1.type = false; - - photoMovement1.To2(); } Debug.Log(fishResponse.data.amount_left); @@ -201,23 +185,13 @@ public class WebFishingPK : MonoBehaviour Debug.Log(fishResponse2.data.countdown_type); if (fishResponse2.data.countdown_type == 0) { - photoMovement.type = true; photoMovement.Del1(); photoMovement.To1(); - photoMovement1.type = true; - photoMovement1.Del1(); - photoMovement1.To1(); } else { photoMovement.Del1(); - photoMovement.type = false; - photoMovement.To2(); - photoMovement1.Del1(); - photoMovement1.type = false; - - photoMovement1.To2(); } Debug.Log(fishResponse2.data.amount_left); Debug.Log(fishResponse2.data.amount_right); @@ -352,59 +326,59 @@ public class WebFishingPK : MonoBehaviour } } -public class FishPKInforResponse -{ - public string code { get; set; } - public string message { get; set; } - public FishPKInfor data { get; set; } -} -public class FishPKInfor -{ - public float balance { get; set; } +//public class FishPKInforResponse +//{ +// public string code { get; set; } +// public string message { get; set; } +// public FishPKInfor data { get; set; } +//} +//public class FishPKInfor +//{ +// public float balance { get; set; } - public string intro_text { get; set; } - public int countdown { get; set; } - public int countdown_type { get; set; } - public float amount_left { get; set; } - public float amount_right { get; set; } +// public string intro_text { get; set; } +// public int countdown { get; set; } +// public int countdown_type { get; set; } +// public float amount_left { get; set; } +// public float amount_right { get; set; } -} -public class FishPKBetonResponse -{ - public string code { get; set; } - public string message { get; set; } - public FishPKdata data { get; set; } -} -public class FishPKdata -{ - public float balance { get; set; } -} -public class FishPKCDResponse -{ - public string code { get; set; } - public string message { get; set; } - public FishPKCDdata data { get; set; } -} -public class FishPKCDdata -{ - public int countdown { get; set; } - public int countdown_type { get; set; } - public float amount_left { get; set; } - public float amount_right { get; set; } -} -public class FishPKSETResponse -{ - public string code { get; set; } - public string message { get; set; } - public FishPKSETdata data { get; set; } -} -public class FishPKSETdata -{ - public float balance { get; set; } +//} +//public class FishPKBetonResponse +//{ +// public string code { get; set; } +// public string message { get; set; } +// public FishPKdata data { get; set; } +//} +//public class FishPKdata +//{ +// public float balance { get; set; } +//} +//public class FishPKCDResponse +//{ +// public string code { get; set; } +// public string message { get; set; } +// public FishPKCDdata data { get; set; } +//} +//public class FishPKCDdata +//{ +// public int countdown { get; set; } +// public int countdown_type { get; set; } +// public float amount_left { get; set; } +// public float amount_right { get; set; } +//} +//public class FishPKSETResponse +//{ +// public string code { get; set; } +// public string message { get; set; } +// public FishPKSETdata data { get; set; } +//} +//public class FishPKSETdata +//{ +// public float balance { get; set; } - public string status { get; set; } - public float amount { get; set; } - public float reward { get; set; } - public float weight_left { get; set; } - public float weight_right { get; set; } -} +// public string status { get; set; } +// public float amount { get; set; } +// public float reward { get; set; } +// public float weight_left { get; set; } +// public float weight_right { get; set; } +//}