跳到主要內容

精選

對於玩家們常會說的「懷念以前的遊戲」甚至覺得以前的遊戲比較好玩觀點與AI進行探討part1

 接下來針對一些玩家對於很多遊戲習慣會說的以前“ 遊戲比較好玩 ”這點來進行相關的提問 當然我知道我這提問只是一個面向,不過可以看看AI是如和回應的 問題: 有時候,對於遊戲玩家中很常見的一些說法,也覺得有點矛盾,感覺很多人似乎並不是真的理解自己在說些什麼。   像是常常有很多人都喜歡說什麼「懷念以前的遊戲」,或是覺得以前那樣在遊戲中可以做自己想做的事情,覺得很棒,認為現在的遊戲怎麼都只有唯一解,或是只有少數的流派之類的。   但是實際上拆解開來看,以前的遊戲,單純只是因為那時候大家沒有在查攻略玩遊戲而已,難道不是這樣嗎?如果你那時候去查了攻略,不就會發現更好練或是更強的方式,然後就會發現自己在做傻事,結果就是改變自己的玩法。   所以,只要你現在玩家玩新遊戲的時候也都不要查攻略,那你怎麼會覺得只有唯一解?這觀點本身就是有問題的啊。 就是因為你去查了攻略,發現有更好練或是更強的方法,才反而覺得是唯一解不是嗎?   因為照那樣的說法成立,其實現在的新遊戲就不應該開放大家討論,也不要有相關的討論版,任何問那個遊戲的文章都要刪掉,這樣大家就會回到以前那種遊玩模式。 但是,難道大家會想要這樣玩遊戲嗎? 其實現代的遊戲玩家根本就不想那樣玩遊戲啊,結果他們自己的行為根本就是矛盾的,卻整天只會做這種膚淺的言論來抱怨。   如果真的想要玩到更好玩的遊戲,我其實真的覺得,玩家自己本身也是可以提升,甚至帶動整個風氣一起提升不是嗎?而不是只會做那種膚淺的抱怨,卻完全沒說到真正的點上吧。 --- 回應: 「以前遊戲比較自由」這句話,問題出在哪? 你點到一個關鍵: 以前不是沒有唯一解,而是「大家不知道唯一解在哪」 。 為什麼以前看起來比較自由? 沒有現在這麼即時、完整的攻略 沒有 YouTube、Wiki、Discord 秒解 資訊流通慢,玩家彼此之間是「局部知識」 所以結果是: 每個人玩法都不一樣 很多「其實很爛但當下覺得OK」的玩法能存活 玩家會把「不知道更好的解法」誤認成「設計上的自由」 但只要 當年有完整攻略 ,會發生什麼事? 大家一樣會改玩法,一樣會往效率最高的方向靠。 你說得沒錯: 一旦你知道有更快、更強、更省的方式,繼續用...

遊戲伺服器2025年初架設與研究part6透過POST簡單的實作類登入與驗證流程並回傳成功與否的相關資訊

 首先上次已經可以順利的把Unity中的資料送到伺服器的資料庫中

也算是簡單地把玩家的資料註冊到伺服器的資料庫中

那這次就是簡單的應用一下,透過類似登入的行為來演示一下雙方收送封包的過程

並且一樣使用先前利用過的POST來傳遞

首先我們先到Unity,到先前傳送POST的地方進行調整


using UnityEngine;
using UnityEngine.Networking;
using System.Collections;

上面是using的部分


IEnumerator SendLoginRequest(string account, string password)
	{
		string svUrl = "https://自己的網域/game_test_login";
		// 組成 JSON 資料
		LoginRequest requestData = new LoginRequest
		{
			account = account,
			password = password
		};
		string json = JsonUtility.ToJson(requestData);

		// 建立 POST 請求
		UnityWebRequest www = new UnityWebRequest(svUrl, "POST");
		byte[] bodyRaw = System.Text.Encoding.UTF8.GetBytes(json);
		www.uploadHandler = new UploadHandlerRaw(bodyRaw);
		www.downloadHandler = new DownloadHandlerBuffer();
		www.SetRequestHeader("Content-Type", "application/json");

		yield return www.SendWebRequest();

		// 檢查結果
		if (www.result == UnityWebRequest.Result.Success)
		{
			Debug.Log("登入成功,伺服器回應:" + www.downloadHandler.text);
		}
		else
		{
			Debug.LogWarning($"登入失敗,狀態碼: {www.responseCode}");

			switch (www.responseCode)
			{
				case 400:
					Debug.Log("請輸入帳號與密碼");
					break;
				case 401:
					Debug.Log("帳號或密碼錯誤");
					break;
				case 500:
					Debug.Log("伺服器錯誤");
					break;
				default:
					Debug.Log("未知錯誤");
					break;
			}
		}
	}

	[System.Serializable]
	public class LoginRequest
	{
		public string account;
		public string password;
	}
        private void Start()
	{
		StartCoroutine(SendLoginRequest("account", "password"));
	}


這邊分別有幾個注意的點

首先我們Function現在要模仿登入的過程,所以要傳入帳號跟密碼

當然這邊如果只是小遊戲,可以遊戲內部自己生成,並且儲存在client端就好

如果真的想要有創帳號過程則是另外的做法

不過現在多數手機遊戲依然比較傾向訪客遊玩的那種模式(同時串接例如google帳號登入等等)

那這邊也就是提供可以輕鬆調整的方式,訪客簡單的做法就是把帳號密碼改成自動生成

登入就透過自動生成的帳號去登入

這邊也有一個小提醒,就是以前常見的抓取e-mail帳號來替玩家登入的行為

現在已經是需要獲取權限才能做的事情了,所以如果想那樣做的話得注意一下

那目前的LoginRequest也就是我們server要讀取的資料

變數名稱要確保無誤,因為之後獲取數值會使用

另外網域名稱要記得填入自己的網域

接下來就可以到server的部分,我們先前創建的python檔案裏面進行調整


# 假帳號密碼(正式要改成查資料庫)
fake_users = {
    "testuser": "123456",
    "admin": "adminpass"
}

@app.route("/game_test_login", methods=["POST"])
def login():
    try:
        data = request.get_json()
        account = data.get("account")
        password = data.get("password")

        if not account or not password:
            return jsonify(success=False, message="帳號或密碼缺失"), 400

        if account in fake_users and fake_users[account] == password:
            return jsonify(success=True, message="登入成功")
        else:
            return jsonify(success=False, message="帳號或密碼錯誤"), 401

    except Exception as e:
        return jsonify(success=False, message=f"伺服器錯誤: {str(e)}"), 500



我們新增一個def login()用來處理登入

那當然正常必須從資料庫獲取真正的帳號密碼

這邊暫時先省略,我們重點先放在正確的判斷Client端給的資料,然後回傳訊息

再從Client端把資料正確的讀取出來並處理,看是要顯示給玩家看

又或是做什麼其它的處理

例如常見的登入失敗訊息,包含帳號密碼錯誤,又或是帳號不存在

看大家想要顯示什麼給玩家看

我這邊就是簡單的使用了jsonify並且帶了錯誤碼回去

可以看到我上面Unity的C#語法的部分

就是直接把www.responseCode的部分拿出來判斷

這邊就對應Server的後面帶的數值

可以很方便的去處理各種不同的狀況來顯示給玩家看

那兩邊都修改完之後我們就可以開始來測試了

主要就是執行python檔案就可以測試了

這邊看是要使用先前透過service的方式重啟,又或是直接執行python檔案都可以

sudo systemctl restart 你的服務名稱.service

又或是
python3 你的腳本名稱.py(好像要補上app.run的部分)
當然這邊要記得把你修改好的腳本同步到伺服器上
那接下來就可以進行Unity端的測試了
直接按下play
首先確認log訊息
應該就能看到目前執行登入會失敗
並且能收到帳號密碼錯誤的錯誤碼401
因為我們先前故意打錯了帳號密碼
可以回到上面看到C#程式碼的部分

StartCoroutine(SendLoginRequest("account", "password"));

這邊的account跟password就是要輸入帳號密碼的地方

接下來我們為了測試正確的結果

先把它改成正確的帳號密碼

正確的帳號密碼可以看到server的python檔案那邊

fake_users = {

    "testuser": "123456",

    "admin": "adminpass"

}

我們定義了這個

就可以看到目前有兩組正確的帳號密碼

可以隨便拿一組來用

所以就會變成這樣

StartCoroutine(SendLoginRequest("testuser", "123456"));


這樣子從unity那邊play測試

應該就能收到登入成功的訊息了~

那這次主要就分享到這邊,我們已經可以正確的透過POST封包到server進行處理了


感謝大家的觀看,如有疑問都可以發問,又或是有什麼講錯的地方請指正,感謝~




留言