遊戲設計社
Would you like to react to this message? Create an account in a few clicks or log in to continue.

Unity 3D 腳本教學 (十四)

向下

Unity 3D 腳本教學 (十四) Empty Unity 3D 腳本教學 (十四)

發表  aaa1218bbb 周五 11月 25, 2011 2:35 pm

WWWFrom

輔助類。用來生成表單數據並使用WWW類傳遞到web服務器。
// 獲取一個截屏並上傳到CGI腳本
// 該CGI腳本必須能處理表單上傳
var screenshotURL = “http://www.my-site.com/cgi-bin/screenshot.pl”;
// 截屏
function Start() {
UploadPNG();
}
function UploadPNG () {
yield WaitForEndOfFrame(); // 我們應該只在所有渲染完成後讀取屏幕
var width = Screen.width;
var height = Screen.height;
var tex = new Texture2D(width, height, TextureFormatRGB24, false); // 創建屏幕大小的紋理,RGB24格式
//讀取屏幕內存到紋理
tex.ReadPixels(Rect(0, 0, width, height), 0, 0);
tex.Apply();
// 編碼紋理為PNG
var bytes = tex.EncodeToPNG();
Destroy(tex);
// 創建一個Web表單
var form = new WWWForm();
form.AddField(“frameCount”, Time.frameCount.ToString());
form.AddBinaryData(“fileUpload”, bytes, “screenshot.png”, “image.png”);
// 上傳到一個CGI腳本
var w = WWW(screenShotURL, form);
yield w;
if(w.error != null) {
print(w.error);
} else {
print(“Finished Uploading Screenshot”);
}
}
這裡是一個簡單的Perl腳本用處理存貯在SQL數據庫中的高分錶
// 這個例子假設玩家已經輸入了他的名稱到一個name變量中並且score包含玩家的當前分數
var highscore_url = “http://www.my-site.com/highscore.pl”;
function Start() {
// 創建一個表單來發送高分數據到服務器
var form = new WWWForm();
// 假設perl腳本為不同的遊戲管理高分
form.AddField(“game”, “MyGameName”);
// 玩家提交的名稱
form.AddField(“playerName”, name);
// 分數
form.AddField(“score”, score);
//創建一個下載對象
var download = new WWW(highscore_url, form);
//等待直到下載完成
yield download;
if(download.error) {
print(“Error downloading “ + download.error);
} else {
// 顯示高分
}
}
這裡是一個單間的Perl腳本用來處理存貯在SQL數據庫中的高分錶
#/usr/bin/perl
#SQL數據庫需要有一個稱為highscores的表
# 看起來像這樣
#CREATE TABLE highscores (
#game varchar(255) NOT NULL,
#player varchar(255) NOT NULL,
#score integer NOT NULL
# );
use strict;
use CGI;
use DB1;
# 讀取表單數據
my $cgi = new CGI;
# 來自高分腳本的結果將是in純文本格式
print $cgi -> header(“text/plain”);
my $game = $cgi -> param(‘game’);
my $playeName = $cgi -> param(‘playerName’);
my $score = $cgi -> param(‘score’);
exit 0 unless $game; #這個參數被請求鏈接到一個數據庫
my $dbh = DB1 -> connect('DB1.mysql.databasename', 'username', 'password') || die “Could not connect to database: $DB1::errstr”;
# 如果插入玩家分數if
if($playerName && $score) {
$dbh -> do(“insert into highscores(game, player, score) values​​(?,?,?)”, undef, $game, $playerName, $score);
}
# 取回高分
my $sth = $dbh -> prepare(“SELECT player, score FROM highscores WHERE game=? ORDER BY score desc LIMIT 10”);
#dbh -> execute($game);
while(my $r = $sth -> fetchrow_arrayref) {
print join(‘.’, @$r), “\n”
}
變量
◆ var data : byte[]
描述: (只讀)在發送表單的時候原始數據作為POST請求被發送。
通常,你只需要直接將WWWForm對像傳遞給WWW構造函數,但是如果你像改變發送到web服務器的頭,你將需要這個變量。
參見: headers變量
var form = new WWWForm();
form.AddField(“name”, “value”);
var headers = form.headers;
var rawData = form.data;
// 給請求添加一個自定義的頭,在這裡用一個簡單的授權來訪問密碼保護的資源header[“Authorization”]=”Basic”+System.Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes (“username:password));
// 用自定義的頭傳遞一個請求到URL
var www= new WWW(url, rawData, headers);
yield www;
// 這里處理WWW請求結果…
◆ var headers : Hashtable
描述: (只讀)為使用WWW類傳遞的表單返回一個正確的請求頭。
這個域只包含一個頭,/”Content-Type”/,它被設置為正確的mine類型。 ”application/x-www-form-urlencoded”用於普通的表單,”multipart/form-data”用於使用AddBinaryData添加數據的表單。
var form = new WWWForm();
form.AddField(“name”, “value”);
var headers = form.headers;
var rawData = form.data;
// 給請求添加一個自定義的頭,在這裡用一個簡單的授權來訪問密碼保護的資源header[“Authorization”]=”Basic”+System.Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes (“username:password));
// 用自定義的頭傳遞一個請求到URL
var www= new WWW(url, rawData, headers);
yield www;
// 這里處理WWW請求結果…
構造函數
◆ static function WWWForm() : WWWForm
描述: 創建一個空的WWWForm對象。
使用AddField和AddBinaryData方法向表單中插入數據。
參見: WWW類
函數
◆ function AddBinaryData(fieldname : string, contents : byte[], filename : string = null,
mimeType : string = null) : void
描述: 添加二進制數據到表單。
使用這個函數來上傳文件和圖片到web服務器,注意數據從字節數組中讀取而不是從一個文件中讀取。 fileName參數用來告訴服務器用什麼文件名來保存上傳的文件。
如果mimeType沒有給出,並且數據的前8字節與PNG格式頭相同,然後數據用”image/png”mimetype發送,否則它將用”application/octet-stream”mimetype發送。
◆ function AddField(filename : string, value : string, e : Encoding = System.Text.Encoding.UTF8) : void
描述: 添加一個簡單的域到表單。
用給的字符串值添加域fileName。
◆ function AddField(filedName : string, i : int) : void
描述: 添加一個簡單的域到表單。
用給定的X形值添加域filedName。一個簡單的方法是調用AddField(fieldname, i.ToString)。
WWW
類,集成自IDisposable
簡單地訪問web頁。
這個是一個小的工具模塊可以用來取回URL的內容。
通過調用WWW(url)在後台開始一個下載,它將返回一個WWW物體。
你可以檢查isDone屬性來查看下載是否完成,或者yield下載物體來自動等待,直到它被下載完成(不會影響遊戲的其餘部分)。
如果你像從we​​b服務器上獲取一些數據例如高分列表或者調用主頁,可以使用這個,也有一些功能可以使用從web上下載的圖片來創建一個紋理,或者下載或加載新的web播放器數據文件。
WWW類可以用來發送GET和POST請求到服務器,WWW類默認使用GET,如果提供一個postData參數就使用POST。
參見: WWWForm為postData參數構建可用的表單數據。
// 從時代廣場上的外部”Friday's” web攝像頭獲取最新的數據
var url = “http://images.earthcam.com/ec_metros/ourcams/fridays.jpg”;
function Start() {
// 開始下載給定的URL
var www : WWW = new WWW(url);
// 等待下載完成
yield www;
//賦值紋理
renderer.material.mainTexture = www.texture;
}
變量
◆ var assetBundle : AssetBundle
描述: 從工程文件中下載一個可以包含任意類型資源的AssetBundle。
function Start() {
var www = new WWW(“http://myserver/myBundle.unity3d”);
yield www;
// 獲取制定的主資源並實例化它
Instantiate(www.assetBundle.mainAsset);
}
參見: AssetBundle類。
◆ var audioClip : AudioClip
描述: 從下載的數據生成一個AudioClip(只讀)。
該數據必須是一個Ogg Vorbis格式的音頻剪輯。
即使音頻沒有完全下載完成,這個也立即返回,允許你開始播放已經下載完成的部分。
var url : String;
function Start() {
www = new WWW(url);
audio.clip = www.audioClip;
}
function Update() {
if(!audio.isPlaying && audio.clip.isReadyToPlay) {
audio.Play();
}
}
◆ var bytes : byte[]
描述: 將取回的web頁內容作為一個字節數組返回(只讀)。
如果物體還沒有完成數據的下載,它將返回一個空字節數組。使用isDone或者yield來查看數據是否可用。
參見: data屬性
◆ var data : string
描述: 將取回的web頁內容作為一個字符串返回(只讀)。
如果物體還沒有完成數據的下載,它將返回一個空字符串。使用isDone或者yield來查看數據是否可用。
這個函數期望網頁內容是UTF-8或者ASCII字符集。對於其他字符或者二進制數據返回的字符串也許是不正確的。在這些情況下,使用bytes屬性來獲取原始字節數組。
參見: bytes屬性
◆ var error : string
描述: 如果下載的時候出現了一個錯誤,返回錯誤信息(只讀)。
如果沒有錯誤,error將返回null。
如果物體沒有下載完成,它將被阻止直到下載完成。使用isDone或yield來查看數據是否可用。
// 用一個無效的URL獲取一個紋理
var url = “invalid_url”;
function Start() {
// 開始下載給定的URL
var www : WWW = new WWW(url);
// 等待下載完成
yield www;
// 打印錯誤的控制台
if(www.error!=null) {
Debug.Log(www.error);
}
//賦值紋理
renderer.material.mainTexture = www.texture;
}
◆ var isDone : bool
描述: 下載是否完成(只讀)。
如果你試圖訪問任何isDone為false的數據,程序將被阻止知道下載完成。
 var movie : MovieTexture
描述: 從下載的數據生成一個MovieTexture(只讀)。
數據必須為一個Ogg Theora格式視頻。
即使視頻完全沒有下載完成,這個也立即返回,允許你開始播放已經下載完成的部分。
var url = “http://www.unity3d.com/webplayers/Movie/sample.ogg”;
function Start() {
// 開始下載
var www = WWW(url);
// 確保視頻在開始播放前已經準備好
var movieTexture = www.movi​​e;
while(!movieTexture.isReadyToPlay)
yield;
//初始化GUI紋理為1:1解析度並居中
guiTexture.texture = movieTexture;
transform.localScale = Vector3(0,0,0);
transform.position = Vector3(0.5, 0.5, 0);
guiTexture.pixelInset.xMin = -movieTexture.width/2;
guiTexture.pixelInset.xMax = movieTexture. width /2;
guiTexture.pixelInset.yMin = -movieTexture.height/2;
guiTexture.pixelInset.yMax = movieTexture. height /2;
// 賦值剪輯到音頻源
// 與音頻同步播放
audio.clip = movieTexture.audioClip;
// 播放視頻和音頻
movieTexture.Play();
audio.Play();
}
// 確保我們有GUI紋理和音頻源
@script RequireComponent(GUITexture)
@script RequireComponent(AudioSource)
◆ var oggVorbis : AudioClip
描述: 加載Ogg Vorbis文件到音頻剪輯。
如果流沒有被完全下載,將返回null。使用isDone或者yield來查看數據是否可用。
參見: AudioClip, AudioSource
var path = “http://ua301106.us.archive.org/2/items/abird2005-02-10t02.ogg”;
function Start() {
var download = new WWW(path); // 開始下載
yield download; // 等待下載完成
var clip : AudioClip = download.oggVorbis; // 創建ogg vorbis文件
// 播放它
if(clip!=null) {
audio.clip = clip;
audio.Play();
// 處理錯誤
} else {
Debug.Log(“Ogg vorbis download failed(Incorrect link?)”);
}
}
@script RequireComponent(AudioSource)
// 一個通用的流式音樂播放器
// 成功地下載音樂,然後隨機地播放它們
var downloadPath : String[] = [“http:/ia301106.us.archive.org/2/items/abird2005-02-10t02.ogg”];
private var downloadedClips : AudioClip[];
private var playedSongs = new Array();
function Start () {
downloadedClips = new AudioClip(downloadPath.Length);
DownloadAll();
PlaySongs();
}
function DownloadAll() {
for(var i=0;i var path = downloadPath[i];
var download = new WWW(path);
yield download;
downloadedClips[i] = download.oggVorbis;
if(downloadedClips[i] == null)
Debug.Log(“Failed audio download” + path);
}
}
function PickRandomSong() : AudioClip
{
var possibleSongs = Array();
// 構建一個下載完成的音樂列表
for(var i=0;i if(downloadedClips[i] != null)
possibleSongs.Add[i];
}
// 還沒有音樂被下載
if(possibleSongs.length == 0)
return null;
// 我們播放了所有音樂,現在從任何音樂中選擇
if(possibleSongs.length == playedSongs.length)
playerSongs.Clear();
// 從列表中已出已經播放完成的音樂
for(i=0;i possibleSongs.Remove(playedSongs[i]);
// 獲取一個隨即的音樂
if(possibleSongs.length != 0) {
var index : int = possibleSongs[Random.Range(0,possibleSongs.length)];
playedSongs.Add(index);
return downloadedClips[index];
} else return null;
}
function PlaySongs() {
while(true) {
var clip : AudioClip = PickRandomSongs();
if(clip != null) {
audio.clip = clip;
audio.Play();
yield WaitFormSecond(clip.length);
}
yield;
}
}
@script RequireComponent(AudioSource)
◆ var texture : Texture2D
描述: 從下載的數據生成一個Texture2D(只讀)。
數據必須是JPG或者PNG圖片格式。如果數據圖像不可用,產生的紋理將是一個帶問號的紋理。建議使用2的冪次大小的圖片;任意大小的也可以工作但是加載的比較慢並會佔用較多的內存。每個紋理屬性的調用都會分配一個新的Texture2D。如果你連續的下載紋理,必須使用LoadImageInfoTexture或銷毀前面創建的紋理。
對於PNG文件,如果包含伽馬修正,伽馬修正將被應用到該紋理,顯示的伽馬修正假定為2.0,如果文件沒有包含伽馬信息,將不會執行任何顏色修正。
如果物體還沒有完成數據的下載,它將返回一個虛構的圖片,使用isDone或者yield來查看數據是否可以用。
// 從時代廣場上的外部”Friday's” web攝像頭獲取最新的數據
var url = “http://images.earthcam.com/ec_metros/ourcams/fridays.jpg”;
function Start() {
// 開始下載給定的URL
var www : WWW = new WWW(url);
// 等待下載完成
yield www;
// 賦值紋理
renderer.material.mainTexture = www. texture;
}
◆ var uploadProgress : float
描述: 上傳了多少(只讀)。
這是0和1之間的值: 0表示沒有發送任何數據,1表示上傳完成。
uploadProgress目前沒有完全在web播放器中實現,如果在web播放器中使用它將在上傳的時候返回0.5,上傳完成後返回1.0。
因為所有到服務器的數據發送在接收數據以前完成,所以當progress大於0時,uploadProgress將總是1.0。
◆ var url : string
◆ static function WWW(url : string, postData : byte[], headers : Hashtable) : WWW
參數:
url下載的URL
postData 傳遞到該url的字節數組數據
headers 一個自定義頭部的hash表,隨著請求發送
返回: WWW,一個新的WWW物體。當它被下載後,結果可以從返回的物體中間取回。
描述: 用給定的URL創建一個WWW請求
這個函數創建並發送一個POST請求,該請求帶有包含在postData中的post數據和header哈希表提供的自定義請求頭。流將自動開始下載。如果你需要以自定義的格式傳遞原始數據到服務器,或者如果你需要提供自定義的請求頭。
流創建之後你不得不等待直到它完成,然後你可以訪問下載的數據。作為一個快捷的方法,流可以被yield,這樣你能夠非常容易的告訴Unity等待下載完成。
函數
◆ function Dispose () : void
描述:
◆ function LoadImageIntoTexture(tex : Texture2D) : void
參數:
tex ​​一個已存在的紋理物體可以被這個圖像數據覆蓋。
描述: 用來自下載數據的圖像替換已存在的Texture2D內容。
數據必須是JPG或PNG圖片格式。如果數據圖像不可用,產生的紋理將是一個帶問號的紋理。建議使用2的冪次大小的圖片;任意大小的也可以工作但是加載的比較慢並會佔用較多的內存。
對於PNG文件,如果包含伽馬修正,伽馬修正將被應用到該紋理。顯示的伽馬修正假定為2.0。如果文件沒有包含伽馬信息,將不會執行任何顏色修正。
如果數據沒有下載完成,紋理將保持不變。使用isDone或yield來查看數據是否可用。
// 獲取時代廣場最新的外部”Friday's”web攝像頭數據
var url = “http://images.earthcam.com/ec_metros/ourcams/fridays.jpg”;
function Start() {
renderer.material.mainTexture = new Texture2D(512,512);
while(true) {
// 開始下載給定的URL
var www = new WWW(url);
// 等待直到下載完成
yield www;
// 賦值下載的圖片到物體的主紋理
www.LoadImageIntoTexture(renderer.material.mainTexture);
}
}
◆ function LoadUnityWeb() : void
描述: 加載新的web播放器數據文件。
加載的unity3d文件的第一個關卡將自動被加載,所有來自前一個.unity3d文件的物體、腳本和靜態變量將被卸載。你可以使用PlayerPrefab類在兩個繪畫間移動信息。
這個函數只能在web播放器中使用。
如果物體還沒有完全下載,unity3d文件將不會被加載。使用isDone或yield來查看數據是否可用。
function Start() {
// 開始緩存數據文件
var stream = new WWW(“http://www.unity3d.com/webplayers/Lightning/lightning.unity3d”);
// Yield直到流完成
yield stream;
// 加載它!
stream.LoadUnityWeb();
}
// 下載一個.unity3d文件並在GUI紋理中顯示速度,你需要確保GUI紋理被設置為具有一個pixelInset
function Update() {
// 保存原始的pixelInset並修改它
var originalPixelRect = guiTexture.pixelInset;
// 通過縮放GUI紋理來更新進度欄,直到到達末端
var stream = new WWW(“http://www.unity3d.com/webplayers/Lightning/lightning.unity3d”);
while(!stream.isDone) {
guiTexture.pixelInset.xMax = originalPixelRect.xMin + stream.progress * originalPixelRect.width;
yield;
}
// 在加載前更新最後一次
guiTexture.pixelInset.xMax = originalPixelRect.xMax;
stream.LoadUnityWeb();
}
類方法
◆ static function EscapeURL(s : string, e : Encoding = System.Text.Encoding.UTF8) : string
參數:
s 用來編碼的字符串
e 編碼使用的字符集
返回: string。一個新的字符串,所有非法的字符都使用%xx替換,這裡xx是十六進制編碼。
描述: 編碼字符串為URL友好的格式。
用正確的URL編碼替換s中的非法字符,在構建web頁參數時使用它。
參見: WWW.URL
// 這將打印字符串”Testing 1,2,3”到控制台
print(WWW.EscapeURL(“Testing 1,2,3));
◆ static function URL(s : string, e : Encoding = System.Text.Encoding.UTF8) : string
參數:
s 一個編碼過的字符串
e 編碼使用的字符集
返回: string – 一個新的字符串,其中所有的%xx都將使用對應的字符來替換。
描述: 從URL友好的格式解碼一個字符串。
WWW.EscapeURL的反響。
參見: WWW.EscapeURL
// 這將打印字符串”Testing 1,2,3”到控制台
print(WWW.URL(“Testing 1,2,3”));
WheelFrictionCurve
結構
WheelFrictionCurve被WheelCollider使用來描述:輪胎的摩擦力屬性。
該曲線使用輪胎的滑動作為輸入並輸出一個力。該曲線近似由兩端曲線構成。第一段從(0,0)到(extremumSlip, extremumValue)到(asymptoteSlip, asymptoteValue),這裡曲線的切線再次為零。
車輪碰撞器使用不同於物理引擎的一個基於滑動的摩擦力模型來計算摩擦力。它分割整個摩擦力為“向前”組件(在滾動的方向上,並負責加速和製動)和“側滑”組件(垂直於滾動方向,負責保持車輛的方向)。輪胎的摩擦力在這些方向上分別使用WheelCollider.forwardFrictioni和WheelCollider.sidewaysFriction描述:在兩個方向上它首先決定輪胎滑動了多少(橡膠和路面之間速度的不同),然後這個滑動值用來找到在接觸點上輪胎受到的力。
真是的輪胎屬性是較慢的滑動將獲得較高的力因為橡膠通過拉伸補償滑動,然後當滑動變的較高時,這個力被減小因為輪胎開始滑動或旋轉。因此輪胎摩擦力曲線具有上圖所示的形狀。
因為輪胎的摩擦力是分別計算的,地面的PhysicMaterial不會影響車輪。通過改變車輪所碰到的forwardFriction和sidewayFriction來模擬不同的路面材質。參見:WheelCollider.GetGroudHit, WheelHit。
參見: WheelCollider, WheelCollider.forwardFriction, WheelCollider.sidewayFriction
變量
◆ var asymptoteSlip : float
描述: 滑動漸進線點(默認為2)。
◆ var asymptoteValue : float
描述: 漸進線滑動上的力(默認為10000)。
◆ var extremumSlip : float
描述: 滑動極值點(默認為1)。
◆ var extremumValue : float
描述: 滑動極值的力(默認為20000)。
◆ var stiffness : float
描述: extremumValue和asymptoteValue的倍數(默認為1)。
改變摩擦係數,設置這個為零將完全禁用車輪的所有摩擦。
通常修改stiffness來模擬各種地面材質(例如,玻璃具有較低的摩擦係數)。
參見: WheelCollider.GetGroudHit
// 當附加到WheelCollider時,基於地面的材質的靜態摩擦力修改輪胎的摩擦力
function FixedUpdate() {
var hit : WheelHit;
var wheel : WheelCollider = GetComponent(WheelCollider);
if(wheel.GetGroundHit(hit)) {
wheel.forwardFriction.siffness = hit.collider.material.staticFriction;
wheel.sidewayFriction.siffness = hit.collider.material.staticFriction;
}
}
WheelHit
結構
車輪的接觸信息,由WheelCollider得到。
用於WheelCollider的摩擦力是獨立於物理系統計算的,使用基於輪胎摩擦力模型的滑動。這允許更加真實的行為,而且使車輪忽略標準的PhysicMaterial設置。
模擬不同地面材質的方法是查詢WheelCollider獲取它的碰撞信息(參考WheelCollider.GetGroundHit)。通常你可以獲取車輪碰到的其他collider,並基於地面material修改車輪的forwardFriction和sidewayFriction。
變量
◆ var collider : Collider
描述: 車輪碰撞到的Collider。
// 當附加到WheelCollider時,基於地面的材質的靜態摩擦力修改輪胎的摩擦力
function FixedUpdate() {
var hit : WheelHit;
var wheel : WheelCollider = GetComponent(WheelCollider);
if(wheel.GetGroundHit(hit)) {
wheel.forwardFriction.siffness = hit.collider.material.staticFriction;
wheel.sidewayFriction.siffness = hit.collider.material.staticFriction;
}
}
◆ var force : float
描述: 應用到接觸點的力的大小。
◆ var forwardDir : Vector3
描述: 車輪指向的方向。
◆ var forwardSlip : float
描述: 在滾動方向上的滑動,加速滑動為負,制動滑動為正。
// 當輪胎滑動時打印”Braking Slip!”
function FixedUpdate() {
var hit : WheelHit;
var wheel : WheelCollider = GetComponent(WheelCollider);
if(wheel.GetGroundHit(hit)) {
if(hit.forwardSlip > 0.5)
print(“braking slip!”);
}
}
◆ var normal : Vector3
描述: 接觸點的法線。
◆ var point : Vector3
描述: 輪胎和地面的接觸點。
◆ var sidewaysDir : Vector3
描述: 車輪的側向。
◆ var sidewaysSlip : float
描述: 在側面方向上的滑動。
YieldInstruction

用於所有yield指令的基類。
參考WaitForSeconds,WaitForFixedUpdate,Coroutine和MonoBehaviour.StartCoroutine獲取更多信息。
Coroutine
類,繼承自YieldInstruction
MonoBehaviour.StartCoroutine返回一個Coroutine。
一個Coroutine是一個函數,這個函數可以被暫停(yield)直到給定的YieldInstruction完成。
// 打印”Starting 0.0”
// 打印”WaitAndPrint 5.0”
// 打印”Done 5.0”
print(“Starting “ + Time.time);
// WaitAndPrint作為一個Coroutine開始
yield WaitAndPrint();
print(“Done ” + Time.time);
function WaitAndPrint() {
// 暫停執行5秒
yield WaitForSeconds(5);
print(“WaitAndPrint “ + Time.time);
}
WaitForEndOfFrame
類,繼承自YieldInstruction
等待直到所有的相機和GUI被渲染完成,並在該幀顯示在屏幕上之前。
你可以用它來讀取顯示到紋理中,編碼它為一個圖片(參考Texture2D.ReadPixels, Texture2D.EncodeToPNG)並發送它。
yield new WaitForEndOfFrame();
// 存儲截屏為PNG文件
import System.IO;
// 立即截屏
function Start() {
UploadPNG();
}
function UploadPNG() {
// 在渲染完成後讀取屏幕緩存
yield WatiForEndOfFrame();
// 創建一個屏幕大小的紋理,RGB24格式
var width = Screen.width;
var height = Screen.height;
var tex = new Texture2D(width, height, TextureFormat.RGB24, false);
// 讀取屏幕內容到紋理
tex.ReadPixels(Rect(0, 0, width, height), 0 ,0);
tex.Apply();
// 編碼紋理為PNG文件
var bytes = tex.EncodeToPNG();
Destroy(tex);
// 出於測試目的,也在工程文件夾中寫一個文件
// File.WriteAllBytes(Application.dataPath – “/…/SavedScreen.png”, bytes);
// 創建一個Web表單
var form = new WWWForm();
form.AddField(“frameCount”, Time.frameCount.ToString());
form.AddBinaryData(“fileUpload”, bytes);
//上傳到一個CGI腳本
var w = WWW(“http://localhost/cgi-bin/cnv.cgi?post”, form);
yield w;
if(w.error != null) {
print(w.error);
}
else {
print(Finished Uploading Screenshot”);
}
// 在遊戲視圖中顯示alpha通道的內容,需要UnityPro因為這個腳本使用了GI類
private var mat : Material;
// 在該幀被完全渲染後,我們將繪製提取了alpha通道的一個全屏矩形
function Start ()
{
while(true) {
yield WaitForEndOfFrame();
if(!mat) {
mat = new Material(“Shader \” Hidden/Alpha “(“ + “SubShader { “ + “ Pass {“ + “ZTest Always Call off ZWrite off” + “Blend DstAlpha Zero” + “Color(1,1,1, 1)” + “}” + “}” + “}”);
}
GL.PushMatrix();
GL.LoadOrtho();
for(var i=0;imat.SetPass(i);
GL.Begin(GLQUADS);
GL.Vector3(0, 0, 0.1);
GL.Vector3(1, 0, 0.1);
GL.Vector3(1, 1, 0.1);
GL.Vector3(0, 1, 0.1);
GL.End();
}
GL.PopMatrix();
}
}
WaitForFixedUpdate
類,繼承自YieldInstruction
等待直到下一個固定幀率更新函數。參見: FixedUpdate
在coroutine中WaitFixedUpdate只能用於yield語句。
yield new WaitForFixedUpdate();
WaitForSeconds
類,繼承自YieldInstruction
在給定的秒數內暫停協同進程的執行。
在coroutine中WaitForSeconds只能用於yield語句。
// 打印0
print(Time.time);
// 等待5秒
yield new WaitForSeconds(5);
// 打印5.0
print(Time.time);
構造函數
◆ static function WaitForSeconds(seconds : float) : WaitForSeconds
描述: 創建一個yield指令來等待給定的秒數。
// 打印0
print(Time.time);
// 等待5秒
yield new WaitForSeconds(5);
// 打印5.0
print(Time.time);
屬性
AddComponentMenu
類,從Attribute繼承。
AddComponentMenu屬性允許你防止一個腳本到”Component”菜單的任何位置,而不僅是”Component->Scripts”菜單。
使用這個更好的組織Component菜單,這種方法可以在添加腳本時改善工作流程。重要提示:需要重啟!
// JavaScript的例子
@script
AddComponentMenu(“Transform/FollowTransform”)
class FollowTransform : MonoBehaviour {
}
// C#的例子
[AddComponentMenu(“Transform/FollowTransform”)]
class FollowTransform : MonoBehaviour {
}
構造函數
◆ static function AddComponentMenu(menuName : string) : AddComponentMenu
描述: 這個腳本將根據menuName紡織在組件菜單中。 menuName是組件的路徑”Rendering/DoSomething”。如果menuName為””組件將從菜單中隱藏。如果menuName為””組件將從菜單中隱藏。
ContextMenu
類,從Attribute繼承
ContextMenu屬性允許你添加命令到上下文菜單。
在這個附加腳本的檢視面板中。當用戶選擇這個上下文菜單,該函數將被執行。
這最適合用來從腳本中自動設置場景數據。這個函數必須是非靜態的。
// JavaScript的例子
@ContextMenu(“Do Something”)
function DoSomething() {
Debug.Log(“Perform operation”);
}
// C#的例子
class ContextTesting : MonoBehaviour {
// 在腳本的檢視面板中添加名為”Do Something”的上下文菜單
[ContextMenu(“Do Something”)]
void DoSomething() {
Debug.Log(“Perform operation”);
}
}
構造函數
◆ static function ContextMenu(name : string) : ContextMenu
描述: 添加這個函數到組件的上下文菜單中。
在這個附加腳本的檢視面板中。當用戶選擇這個上下文菜單後,該函數將被執行。
這最適合用來從腳本中自動設置場景的數據。這個函數必須是非靜態的。
// JavaScript的例子
@ContextMenu(“Do Something”)
function DoSomething() {
Debug.Log(“Perform operation”);
}
// C#的例子
class ContextTesting : MonoBehaviour {
// 在腳本的檢視面板中添加名為”Do Something”的上下文菜單
[ContextMenu(“Do Something”)]
void DoSomething() {
Debug.Log(“Perform operation”);
}
}
ExecuteInEditMode
類,從Attribute繼承
讓腳本在編輯模式執行。
默認的,腳本只在運行模式時執行。這可以讓這個腳本在編輯模式時執行。
@script
ExecuteInEditMode();
// 只是一個簡單的腳本來查找目標變換
var target : Transform;
function Update() {
if(target)
transform.LookAt(target);
}
HiddenInInspector
類,從Attribute繼承
使一個變量不會出現在檢視面板中但是能被序列化。
// 使p不顯示在檢視面板中,但是能被序列化
@HiddenInInspector
var p = 5;
NonSerialized
類,從Attribute繼承
NonSerialized屬性標記一個變量沒有被序列化。
用這種方法你能保持一個公開變量,並且Unity不會序列化它或在檢視面板中顯示它。
// p不會顯示在檢視面板中或被序列化
// JavaScript的例子
@System.NonSerialized
var p = 5;
// C#的例子
class Test {
// p不會顯示在檢視面板中或者被序列化
[System.NonSerialized]
public int p = 5;
}
RPC
類,從Attribute繼承
RenderBeforeQueues
類,從Attribute繼承
定義在哪個渲染隊列中OnRenderObject將被調用的屬性。
參見: Render.queues,MonoBehaviour.OnRenderObject
// 在渲染不透明和透明物體之前OnRenderObject被調用
@RenderBeforeQueues(1000, 2000)
function OnRenderObject(queue : int) {
// 做自定義的渲染
}
構造函數
◆ static function RenderBeforeQueues(params args : int[]) : RenderBeforeQueues
描述: 定義在哪個渲染隊列中OnRenderObject將被調用。
參見: Render.queues,MonoBehaviour.OnRenderObject
// 在渲染不透明和透明物體之前OnRenderObject被調用
@RenderBeforeQueues(1000, 2000)
function OnRenderObject(queue : int) {
// 做自定義的渲染
}
RequireComponent
類,從Attribute繼承
這個RequireComponent屬性自動添加所需組件作為一個依賴。
當使用RequireComponent添加一個腳本,這個需要的組件將自動被添加到遊戲物體上,這可以用來避免設置錯誤。例如,一個腳本也許需要一個剛體添加到同一個遊戲物體上。使用RequireComponent這個將被自動完成,因此不會出現設置錯誤。
// C#例子,標記PlayerScript需要一個剛體
[RequireComponent(typeof(Rigidbody))]
class PlayerScript : MonoBehaviour {
void FixedUpdate() {
rigidbody.AddForce(Vector3.up);
}
}
構造函數
◆ static function RequireComponent(requiredComponent : Type) : RequireComponent
描述: 請求添加一個組件。
◆ static function RequireComponent(requiredComponent : Type, requiredComponent2 : Type) : RequireComponent
描述: 請求添加兩個組件。
◆ static function RequireComponent(requiredComponent : Type, requiredComponent2 : Type, requiredComponent3 : Type) : RequireComponent
描述: 請求添加三個組件。
Serializable
類,從Attribute繼承
序列化屬性允許你在檢視面板中嵌入一個類的子屬性​​。
你可以使用這個來在檢視面板中顯示一個變量,類似於Vector3顯示在檢視面板中。名稱和一個三角形可以展開它的屬性。你需要從System.Object派生一個類,並給它Serializable屬性。在JavaScript中Serializable屬性是隱式的並不是必須的。
class Test extends System.Object {
var p = 5;
var c = Color.white;
}
var test = Test();
// C#的例子:
[System.Serializable]
class Test {
public int p = 5;
public Color c= Color.white;
}
枚舉
AnimationBlendMode
枚舉
由Animation.Play函數使用。

◆ AnimationBlendMode.Additive
描述: 動畫將被附加。
◆ AnimationBlendMode.Blend
描述: 動畫將被混合
AudioVelocityUpdateMode
枚舉
描述: 一個AudioSource或AudioListener何時被更新。

◆ AudioVelocityUpdateMode.Auto
描述: 如果源或偵聽器附加在一個Rigidbody上就以固定更新循環更新它,否則使用動態的。
◆ AudioVelocityUpdateMode.Dynamic
描述: 以動態的更新循環更新源或者偵聽器。
◆ AudioVelocityUpdateMode.Fixed
描述: 以固定的更新循環更新源或者偵聽器。
CameraClearFlags
枚舉
Camera.clearFlags值用來決定在渲染一個Camera時清除什麼。
參見: camera組件

◆ CameraClearFlags.Depth
描述: 只清除深度緩存。
這將留下前一幀的顏色或者任何被顯示的東西。
// 只清除深度緩存
camera.clearFlags = CameraClearFlags.Depth;
參見: Camera.clearFlags屬性,camera組件
◆ CameraClearFlags.Nothing
描述: 不清除任何東西。
這將留下前一幀的顏色的深度緩存或者任何被顯示的東西。
// 不清除任何東西
camera.clearFlags = CameraClearFlags.Nothing;
參見: Camera.clearFlags屬性,camera組件
◆ CameraClearFlags.Skybox
描述: 用天空盒清除。
如果沒有設置天空盒,相機將繼續使用backgroundColor來清除。
// 用天空盒清除
camera.clearFlags = CameraClearFlags.Skybox;
參見: Camera.clearFlags屬性,camera組件,Render設置
◆ CameraClearFlags.SolidColor
描述: 用背景顏色清除
camera.clearFlags = CameraClearFlags.SolidColor;
參見: Camera.clearFlags屬性,camera組件,Camera.backgroundColor屬性
CollisionFlags
枚舉
CollisionFlags是由CharacterController.Move返回的一個bitmask。
它給你一個角色和其他任何物體碰撞的大概位置。

◆ CollisionFlags.Above
描述: CollisionFlags是由CharacterController.Move返回的一個bitmask。它給你一個角色和其他任何物體碰撞的大概位置。
function Update() {
var controller : CharacterController = GetComponent(CharacterController);
if(controller.collisionFlags == CollisionFlags.None)
print(“Free floating!”);
if(controller.collisionFlags & CollisionFlags.Sid​​es)
print(“Touching sides!”);
if(controller.collisionFlags == CollisionFlags.Sid​​es)
print(“Only touching sides, nothing else!”);
if(controller.collisionFlags & CollisionFlags.Above)
print(“Touching ceiling!”);
if(controller.collisionFlags == CollisionFlags.Above)
print(“Only touching ceiling, nothing else!”);
if(controller.collisionFlags & CollisionFlags.Below)
print(“Touching ground!”);
if(controller.collisionFlags == CollisionFlags.Below)
print(“Only touching ground, nothing else!”);
}
◆ CollisionFlags.Below
描述: CollisionFlags是由CharacterController.Move返回的一個bitmask。它給你一個角色和其他任何物體碰撞的大概位置。
function Update() {
var controller : CharacterController = GetComponent(CharacterController);
if(controller.collisionFlags == CollisionFlags.None)
print(“Free floating!”);
if(controller.collisionFlags & CollisionFlags.Sid​​es)
print(“Touching sides!”);
if(controller.collisionFlags == CollisionFlags.Sid​​es)
print(“Only touching sides, nothing else!”);
if(controller.collisionFlags & CollisionFlags.Above)
print(“Touching ceiling!”);
if(controller.collisionFlags == CollisionFlags.Above)
print(“Only touching ceiling, nothing else!”);
if(controller.collisionFlags & CollisionFlags.Below)
print(“Touching ground!”);
if(controller.collisionFlags == CollisionFlags.Below)
print(“Only touching ground, nothing else!”);
}
◆ CollisionFlags.None
描述: CollisionFlags是由CharacterController.Move返回的一個bitmask。它給你一個角色和其他任何物體碰撞的大概位置。
function Update() {
var controller : CharacterController = GetComponent(CharacterController);
if(controller.collisionFlags == CollisionFlags.None)
print(“Free floating!”);
if(controller.collisionFlags & CollisionFlags.Sid​​es)
print(“Touching sides!”);
if(controller.collisionFlags == CollisionFlags.Sid​​es)
print(“Only touching sides, nothing else!”);
if(controller.collisionFlags & CollisionFlags.Above)
print(“Touching ceiling!”);
if(controller.collisionFlags == CollisionFlags.Above)
print(“Only touching ceiling, nothing else!”);
if(controller.collisionFlags & CollisionFlags.Below)
print(“Touching ground!”);
if(controller.collisionFlags == CollisionFlags.Below)
print(“Only touching ground, nothing else!”);
}
◆ CollisionFlags.Sid​​es
描述: CollisionFlags是由CharacterController.Move返回的一個bitmask。它給你一個角色和其他任何物體碰撞的大概位置。
function Update() {
var controller : CharacterController = GetComponent(CharacterController);
if(controller.collisionFlags == CollisionFlags.None)
print(“Free floating!”);
if(controller.collisionFlags & CollisionFlags.Sid​​es)
print(“Touching sides!”);
if(controller.collisionFlags == CollisionFlags.Sid​​es)
print(“Only touching sides, nothing else!”);
if(controller.collisionFlags & CollisionFlags.Above)
print(“Touching ceiling!”);
if(controller.collisionFlags == CollisionFlags.Above)
print(“Only touching ceiling, nothing else!”);
if(controller.collisionFlags & CollisionFlags.Below)
print(“Touching ground!”);
if(controller.collisionFlags == CollisionFlags.Below)
print(“Only touching ground, nothing else!”);
}
ConfigurableJointMotion
枚舉
沿著6個軸限制ConfigurableJoint的移動。

◆ ConfigurableJointMotion.Free
描述: 沿著這個軸的運動將是完全自由和完全無約束的。
◆ ConfigurableJointMotion.Limited
描述: 沿著這個軸的運動將被分別限制。
◆ ConfigurableJointMotion.Locked
描述: 沿著這個軸的運動將被鎖定。
ConnectionTesterStatus
枚舉

◆ ConnectionTesterStatus.Error
描述:
◆ ConnectionTesterStatus.PrivateIPHasNATPunchThrough
描述: 私有地址被檢測到並且能做NAT穿透。
◆ ConnectionTesterStatus. PrivateIPNoNATPunchThrough
描述: 私有地址被檢測到並且不能做NAT穿透。
◆ ConnectionTesterStatus.PublicIPIsConnectable
描述: 公有的IP地址被檢測到並且遊戲的偵聽端口可以通過互聯網訪問。
◆ ConnectionTesterStatus.PublicIPNoServerStarted
描述: 公有的IP地址被檢測到但是服務器沒有被初始化並且沒有偵聽端口。
◆ ConnectionTesterStatus.PublicIPPortBlocked
描述: 公有的IP地址被檢測到但是它的端口不能通過互聯網連接。
◆ ConnectionTesterStatus.Undetermined
描述: 測試結果未知,還在進行中。
CubemapFace
枚舉
Cubemap面。
被Cubemap.GetPixel和Cubemap.SetPixel。

PositiveX 右面(+x)
NegativeX 左面(-x)
PostiveY 上面(+y)
NegativeY 下面(-y)
PostiveZ 前面(+z)
NegativeZ 後面(-z)
EventType
枚舉
UnityGUI輸入和處理事件的類型。
參見: Event.type, Event,GU​​I腳本手冊。

◆ EventType.ContexClick
描述: 用戶使用右鍵單機(或者在mac上的Control+單機)。
如果是窗口的應用,應該顯示一個上下文菜單。在編輯器中只發送。
◆ EventType.DragExited
描述: 只限於編輯器,存在的拖放操作。
參見: DragAndDrop類
◆ EventType.DragPerform
描述: 只限於編輯器,拖放操作執行。
參見: DragAndDrop類
◆ EventType.DragUpdated
描述: 只限於編輯器,拖放操作更新。
參見: DragAndDrop類
◆ EventType.ExecuteCommand
描述: 執行特殊的命令(例如,拷貝和粘貼)。
“Copy”,”Cut”,”Paste”,”Delete”,”FrameSelected”,”Duplicate”,”SelectAll”
◆ EventType.Ignore
描述: Event應該被忽略。
這個事件被臨時禁用並應該被忽略。
◆ EventType.KeyDown
描述: 一個鍵盤按鍵被按下。
使用Event.character查看什麼被鍵入。使用Event.keyCode處理箭頭,home/end或其他任何功能鍵,或者找到哪個物理鍵被按下。這個事件根據端用戶鍵盤的重複設置來重複發送。
注意按鍵可以來自不同的事件,一個是Event.keyCode,另一個是Event.chatacter,根據鍵盤佈局,多個Event.keyCode可以產生一個Event.character事件。
◆ EventType.KeyUp
描述: 一個鍵盤按鍵被釋放。
使用Event.keyCode查看哪個物理按鍵被釋放。注意根據系統和鍵盤佈局的不同,Event.character也許不包含任何字符。
◆ EventType.Layout
描述: 一個佈局事件。
這個事件先於其他任何事件被發送。這是一個幾回來執行任何初始化,它被用於自動佈局系統。
◆ EventType.MouseDown
描述: 鼠標按鍵被按下。
當任何鼠標按鍵被按下的時候發送該事件- 使用Event.button決定哪個按鍵被按下。
◆ EventType.MouseDrag
描述: 鼠標被拖動。
鼠標移動並且按鍵被按下– 拖動鼠標。使用Event.mousePosition和Event.delta來決定鼠標移動。
◆ EventType.MouseMove
描述: 鼠標被移動。
鼠標移動,沒有任何按鍵被按下。使用Event.mousePosition和Event.delta來確定鼠標移動。
◆ EventType.MouseUp
描述: 鼠標按鍵被釋放。
當任何鼠標按鍵被釋放時發送該事件。使用Event.button決定哪個按鍵被釋放。
◆ EventType.Repaint
描述: 一個重繪事件。每幀發送一個。
首先處理所有的其他事件,然後這個重繪事件被發送。
◆ EventType.ScrollWheel
描述: 滾輪被滾動。
使用Event.delta決定X和Y的滾動量。
◆ EventType.Used
描述: 已處理的事件。
這個事件已經被其他的一些控件使用並應該被忽略。
◆ EventType.ValidateCommand
描述: 驗證特殊的命令(例如,拷貝和粘貼)。
“Copy”,”Cut”,”Paste”,”Delete”,”FrameSelected”,”Duplicate”,”SelectAll”等等,只在編輯器中發送。
FilterMode
紋理的過濾模式。對應於texture.inspector中的設置。
參見: Texture.filterMode,texture.assets

◆ FilterMode.Bilinear
描述: 雙線性過濾– 紋理被平均採樣。
renderer.material.mainTexture.filterMode = FilterMode.Bilinear;
參見: Texture.filterMode,texture assets
◆ FilterMode.Point
描述: 點過濾– 紋理像素變得近乎斑駁。
renderer.material.mainTexture.filterMode = FilterMode.Point;
參見: Texture.filterMode,texture assets
◆ FilterMode.Trilinear
描述: 三線性過濾– 紋理被平均採樣並在mipmap等級之間混合。
renderer.material.mainTexture.filterMode = FilterMode.Trilinear;
參見: Texture.filterMode,texture assets
FocusType
被GUIUtility.GetControlID使用來通知UnityGUI系統給定的空間能否獲取鍵盤焦點。

◆ FocusType.Keyborad
描述: 這是一個何時的鍵盤控制。在所有平台上它都能有輸入焦點。用於TextField和TextArea控件。
◆ FocusType.Native
描述: 這個空間可以在Windows下獲取焦點,但是在Mac下不能。用於按鈕,複選框和其他的“可按下”物體。
◆ FocusType.Passive
描述: 這個控件永遠不能接收鍵盤焦點。
ForceMode
Rigidbody.AddForce如何使用力的選項。

◆ ForceMode.Acceleration
描述: 添加一個牛頓力到這個剛體,忽略它的質量。
這個模式不依賴於剛體的質量。因此推和旋轉的應用將不會受到剛體質量的影響,相對於ForceMode.Force這將以相同的設置移動每個剛體而忽略它們的質量差別。這個模式更像一個加速度而不是速度。在這個模式線,應用到物體的力參數的單位是距離/時間^2。
◆ ForceMode.Force
描述: 添加一個牛頓力到這個剛體,使用它的質量。
這個模式依賴於剛體的質量。因此,必須對較大的質量的物體應用更多的力來推動或旋轉它。這模式更像一個加速度而不是速度。在這個模式線,應用到物體的力的參數的單位是質量*距離/時間^2。
◆ ForceMode.Impulse
描述: 用剛體的質量改變它的速度。
這個模式依賴於剛體的質量。因此,必須對較大質量的物體應用更多的力來推動或旋轉
它。這模式更像一個速度而不是加速度。在這個模式線,應用到物體的力的參數是質量*距離/時間。
◆ ForceMode.VelocityChange
描述: 改變剛體的速度。忽略它的質量。
這個模式不依賴於剛體的質量。因此推和旋轉的應用將不會受到剛體質量的影響。這可用於控制不同尺寸的飛船而不考慮質量差別。在這個模式,應用到物體的力的參數的單位是距離/時間。
HideFlags
Bit蒙板,可以控制對象銷毀和在檢視面板中的可視性。

◆ HideFlag.DontSave
描述: 這個物體將不會被保存到場景。當一個新的場景被加載時它將不會被銷毀。
使用DestroyImmediate手工清理這個物體是你的責任,否則它將洩漏。
◆ HideFlags.HideAndDontSave
描述: 不顯示在層次視圖中並且不保存到場景的組合。
這個最常用於那些由腳本創建並純粹在它控制之下的物體。
◆ HideFlags.HideInHierarchy
描述: 如果這個對像是儲存在一個資源中,這個對象將不會顯示在層次視圖中並且不會顯示在工程視圖中。
◆ HideFlags.HideInInspector
描述: 不能在檢視面板中查看。
◆ HideFlags.NotEditable
描述: 這個物體在檢視面板中不可編輯。
ImagePosition
在GUIStyle中圖片和文本如何被放置。

◆ ImagePosition.ImageAbove
描述: 圖片在文本上面。
◆ ImagePosition.ImageLeft
描述: 圖片在文本左側。
◆ ImagePosition.ImageOnly
描述: 只有這個圖片被顯示。
◆ ImagePosition.TextOnly
描述: 只有這個文本被顯示。
JointDriveMode
ConfigurableJoint試圖基於這個表示來達到這個位置/速度的目的。

◆ JointDriveMode.None
描述: 不用任何力來達到目標。
◆ JointDriveMode.Position
描述: 盡量達到特定的位置。
◆ JointDriveMode.PositionAndVelocity
描述: 盡量達到特定的位置和速度。
◆ JointDriveMode.Velocity
描述: 盡量達到特定的速度。
JointProjectionMode
該屬性用來決定在物體偏離太多的時候如果它吸附到約束位置。
參見: ConfigurableJoint

◆ JointProjectionMode.None
描述: 不吸附。
◆ JointProjectionMode.PositionAndRotation
描述: 吸附到位置和旋轉。
◆ JointProjectionMode.PositionOnly
描述: 只吸附到位置。
KeyCode
KeyCode是由Event.keyCode返回的。這些直接映射到鍵盤上的物理鍵。

Backspace 退格鍵
Delete Delete鍵
TabTab鍵
Clear Clear鍵
Return 回車鍵
Pause 暫停鍵
Escape ESC鍵
Space 空格鍵
Keypad0 小鍵盤0
Keypad1 小鍵盤1
Keypad2 小鍵盤2
Keypad3 小鍵盤3
Keypad4 小鍵盤4
Keypad5 小鍵盤5
Keypad6 小鍵盤6
Keypad7 小鍵盤7
Keypad8 小鍵盤8
Keypad9 小鍵盤9
KeypadPeriod 小鍵盤“.”
KeypadDivide 小鍵盤“/”
KeypadMultiply小鍵盤“*”
KeypadMinus 小鍵盤“-”
KeypadPlus 小鍵盤“+”
KeypadEnter 小鍵盤“Enter”
KeypadEquals 小鍵盤“=”
UpArrow 方向鍵上
DownArrow 方向鍵下
RightArrow 方向鍵右
LeftArrow 方向鍵左
Insert Insert鍵
Home Home鍵
EndEnd鍵
PageUp PageUp鍵
PageDown PageDown鍵
F1功能鍵F1
F2功能鍵F2
F3功能鍵F3
F4功能鍵F4
F5功能鍵F5
F6功能鍵F6
F7功能鍵F7
F8 功能鍵F8
F9 功能鍵F9
F10 功能鍵F10
F11 功能鍵F11
F12 功能鍵F12
F13 功能鍵F13
F14 功能鍵F14
F15 功能鍵F15
Alpha0 按鍵0
Alpha1 按鍵1
Alpha2 按鍵2
Alpha3 按鍵3
Alpha4 按鍵4
Alpha5 按鍵5
Alpha6 按鍵6
Alpha7 按鍵7
Alpha8 按鍵7
Alpha9 按鍵9
Exclaim ‘!’鍵
DoubleQuote雙引號鍵
Hash Hash鍵
Dollar ‘$’鍵
AmpersandAmpersand鍵
Quote 單引號鍵
LeftParen 左括號鍵
RightParen右括號鍵
Asterisk ‘ * ’鍵
Plus ‘ + ’鍵
Comma ‘ , ’鍵
Minus ‘ - ’鍵
Period ‘ . ’鍵
Slash ‘ / ’鍵
Colon ‘ : ’鍵
Semicolon‘ ; ’鍵
Less ‘ < ‘鍵
Equals ‘ = ‘鍵
Greater ‘ > ‘鍵
Question ‘ ? ’鍵
At ‘@’鍵
LeftBracket‘ [ ‘鍵
Backslash ‘ \ ’鍵
RightBracket‘ ] ’鍵
Caret ‘ ^ ’鍵
Underscore‘ _ ’鍵
BackQuote‘ ` ’鍵
A ‘a’鍵
B ‘b’鍵
C ‘c’鍵
D ‘d’鍵
E ‘e’鍵
F ‘f’鍵
G ‘g’鍵
H ‘h’鍵
I ‘i’鍵
J ‘j’鍵
K ‘k’鍵
L ‘l’鍵
M ‘m’鍵
N ‘n’鍵
O ‘o’鍵
P ‘p’鍵
Q ‘q’鍵
R ‘r’鍵
S ‘s’鍵
T ‘t’鍵
U ‘u’鍵
V ‘v’鍵
W ‘w’鍵
X ‘x’鍵
Y ‘y’鍵
Z ‘z’鍵
Numlock Numlock鍵
Capslock 大小寫鎖定鍵
ScrollLockScroll Lock鍵
RightShift 右上檔鍵
LeftShift 左上檔鍵
RightControl右Ctrl鍵
LeftControl左Ctrl鍵
RightAlt 右Alt鍵
LeftAlt 左Alt鍵
LeftApple 左Apple鍵
LeftWindows左Windows鍵
RightApple右Apple鍵
RightWindows右Windows鍵
AltGr Alt Gr鍵
Help Help鍵
Print Print鍵
SysReq Sys Req鍵
Break Break鍵
Mouse0 鼠標左鍵
Mouse1 鼠標右鍵
Mouse2 鼠標中鍵
Mouse3 鼠標第3個按鍵
Mouse4 鼠標第4個按鍵
Mouse5 鼠標第5個按鍵
Mouse6 鼠標第6個按鍵
JoystickButton0手柄按鍵0
JoystickButton1手柄按鍵1
JoystickButton2手柄按鍵2
JoystickButton3手柄按鍵3
JoystickButton4手柄按鍵4
JoystickButton5手柄按鍵5
JoystickButton6手柄按鍵6
JoystickButton7手柄按鍵7
JoystickButton8手柄按鍵8
JoystickButton9手柄按鍵9
JoystickButton10手柄按鍵10
JoystickButton11手柄按鍵11
JoystickButton12手柄按鍵12
JoystickButton13手柄按鍵13
JoystickButton14手柄按鍵14
JoystickButton15手柄按鍵15
JoystickButton16手柄按鍵16
JoystickButton17手柄按鍵17
JoystickButton18手柄按鍵18
JoystickButton19手柄按鍵19
Joystick1Button0第一個手柄按鍵0
Joystick1Button1第一個手柄按鍵1
Joystick1Button2第一個手柄按鍵2
Joystick1Button3第一個手柄按鍵3
Joystick1Button4第一個手柄按鍵4
Joystick1Button5第一個手柄按鍵5
Joystick1Button6第一個手柄按鍵6
Joystick1Button7第一個手柄按鍵7
Joystick1Button8第一個手柄按鍵8
Joystick1Button9第一個手柄按鍵9
Joystick1Button10第一個手柄按鍵10
Joystick1Button11第一個手柄按鍵11
Joystick1Button12第一個手柄按鍵12
Joystick1Button13第一個手柄按鍵13
Joystick1Button14第一個手柄按鍵14
Joystick1Button15第一個手柄按鍵15
Joystick1Button16第一個手柄按鍵16
Joystick1Button17第一個手柄按鍵17
Joystick1Button18第一個手柄按鍵18
Joystick1Button19第一個手柄按鍵19
Joystick2Button0第二個手柄按鍵0
Joystick2Button1第二個手柄按鍵1
Joystick2Button2第二個手柄按鍵2
Joystick2Button3第二個手柄按鍵3
Joystick2Button4第二個手柄按鍵4
Joystick2Button5第二個手柄按鍵5
Joystick2Button6第二個手柄按鍵6
Joystick2Button7第二個手柄按鍵7
Joystick2Button8第二個手柄按鍵8
Joystick2Button9第二個手柄按鍵9
Joystick2Button10第二個手柄按鍵10
Joystick2Button11第二個手柄按鍵11
Joystick2Button12第二個手柄按鍵12
Joystick2Button13第二個手柄按鍵13
Joystick2Button14第二個手柄按鍵14
Joystick2Button15第二個手柄按鍵15
Joystick2Button16第二個手柄按鍵16
Joystick2Button17第二個手柄按鍵17
Joystick2Button18第二個手柄按鍵18
Joystick2Button19第二個手柄按鍵19
Joystick3Button0第三個手柄按鍵0
Joystick3Button1第三個手柄按鍵1
Joystick3Button2第三個手柄按鍵2
Joystick3Button3第三個手柄按鍵3
Joystick3Button4第三個手柄按鍵4
Joystick3Button5第三個手柄按鍵5
Joystick3Button6第三個手柄按鍵6
Joystick3Button7第三個手柄按鍵7
Joystick3Button8第三個手柄按鍵8
Joystick3Button9第三個手柄按鍵9
Joystick3Button10第三個手柄按鍵10
Joystick3Button11第三個手柄按鍵11
Joystick3Button12第三個手柄按鍵12
Joystick3Button13第三個手柄按鍵13
Joystick3Button14第三個手柄按鍵14
Joystick3Button15第三個手柄按鍵15
Joystick3Button16第三個手柄按鍵16
Joystick3Button17第三個手柄按鍵17
Joystick3Button18第三個手柄按鍵18
Joystick3Button19第三個手柄按鍵19
LightRenderMode
Light如何被渲染。
參見: light組件
aaa1218bbb
aaa1218bbb
社員
社員

文章數 : 65
積分 : 4726
注冊日期 : 2011-11-22

https://design.666forum.com

回頂端 向下

回頂端


 
這個論壇的權限:
無法 在這個版面回復文章