Описание
Вспомогательный класс для создания данных формы для публикации на веб-серверах с использованием классов UnityWebRequest или WWW.
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 | Добавляет в форму простое поле. |