版本:Unity 6 (6000.0)
语言英语
  • C#

WWWForm

UnityEngine 中的类

/

实现于:UnityEngine.UnityWebRequestModule

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交,但我们确实阅读了用户提出的每项更改建议,并将根据需要进行更新。

关闭

提交失败

由于某种原因,您的建议更改无法提交。请 <a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

描述

辅助类,用于生成表单数据,以便使用 UnityWebRequest 或 WWW 类将其发布到 Web 服务器。

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

public class WWWFormImage : MonoBehaviour {

public string screenShotURL= "https://www.my-server.com/cgi-bin/screenshot.pl";

// Use this for initialization void Start() { StartCoroutine(UploadPNG()); }

IEnumerator UploadPNG() { // We should only read the screen after all rendering is complete yield return new WaitForEndOfFrame();

// Create a texture the size of the screen, RGB24 format int width = Screen.width; int height = Screen.height; var tex = new Texture2D( width, height, TextureFormat.RGB24, false );

// Read screen contents into the texture tex.ReadPixels( new Rect(0, 0, width, height), 0, 0 ); tex.Apply();

// Encode texture into PNG byte[] bytes = tex.EncodeToPNG(); Destroy( tex );

// Create a Web Form WWWForm form = new WWWForm(); form.AddField("frameCount", Time.frameCount.ToString()); form.AddBinaryData("fileUpload", bytes, "screenShot.png", "image/png");

// Upload to a cgi script using (var w = UnityWebRequest.Post(screenShotURL, form)) { yield return w.SendWebRequest(); if (w.result != UnityWebRequest.Result.Success) { print(w.error); } else { print("Finished Uploading Screenshot"); } } } }

以下是一个示例脚本,它从 SQL 数据库中的表格中检索高分。

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

public class WWWFormScore : MonoBehaviour { string highscore_url = "https://www.my-site.com/highscores.pl"; string playName = "Player 1"; int score = -1;

// Use this for initialization IEnumerator Start() { // Create a form object for sending high score data to the server WWWForm form = new WWWForm();

// Assuming the perl script manages high scores for different games form.AddField( "game", "MyGameName" );

// The name of the player submitting the scores form.AddField( "playerName", playName );

// The score form.AddField( "score", score );

// Create a download object var download = UnityWebRequest.Post(highscore_url, form);

// Wait until the download is done yield return download.SendWebRequest();

if (download.result != UnityWebRequest.Result.Success) { print( "Error downloading: " + download.error ); } else { // show the highscores Debug.Log(download.downloadHandler.text); } } }

以下是一个示例 Perl 脚本,它处理存储在 SQL 数据库中的表格中的高分。

#!/usr/bin/perl
# The SQL database needs to have a table called highscores
# that looks something like this:
#
#   CREATE TABLE highscores (
#     game varchar(255) NOT NULL,
#     player varchar(255) NOT NULL,
#     score integer NOT NULL
#   );
#
use strict;
use CGI;
use DBI;

# Read form data etc. my $cgi = new CGI;

# The results from the high score script will be in plain text print $cgi->header("text/plain");

my $game = $cgi->param('game'); my $playerName = $cgi->param('playerName'); my $score = $cgi->param('score');

exit 0 unless $game; # This parameter is required

# Connect to a database my $dbh = DBI->connect( 'DBI:mysql:databasename', 'username', 'password' ) || die "Could not connect to database: $DBI::errstr";

# Insert the player score if there are any if( $playerName && $score) { $dbh->do( "insert into highscores (game, player, score) values(?,?,?)", undef, $game, $playerName, $score ); }

# Fetch the high scores my $sth = $dbh->prepare( 'SELECT player, score FROM highscores WHERE game=? ORDER BY score desc LIMIT 10' ); $sth->execute($game); while (my $r = $sth->fetchrow_arrayref) { print join(':',@$r),"\n" }

属性

data(只读)在发送表单时作为 POST 请求主体传递的原始数据。
headers(只读)返回使用 WWW 类发布表单的正确请求标头。

构造函数

WWWForm创建一个空的 WWWForm 对象。

公共方法

AddBinaryData将二进制数据添加到表单中。
AddField向表单添加一个简单字段。