来个unity3d基础教程 RagePixel 的教程

http://dong2008hong.blog.163.com/blog/static//
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.var height = Screen.var tex = new Texture2D(width, height, TextureFormatRGB24, false); // 创建屏幕大小的纹理,RGB24格式//读取屏幕内存到纹理tex.ReadPixels(Rect(0, 0, width, height), 0, 0);tex.Apply();// 编码纹理为PNGvar 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);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);//等待直到下载完成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 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 $ #这个参数被请求链接到一个数据库my $dbh = DB1 -& connect(&DB1.mysql.databasename&, &username&, &password&) || die &Could not connect to database: $DB1::errstr&;# 如果插入玩家分数ifif($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.var rawData = form.// 给请求添加一个自定义的头,在这里用一个简单的授权来访问密码保护的资源header[&Authorization&]=&Basic&+System.Convert.ToBase64StringSystem.Text.Encoding.ASCII.GetBytes(&username:password));// 用自定义的头传递一个请求到URLvar www= new WWW(url, rawData, headers);// 这里处理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.var rawData = form.// 给请求添加一个自定义的头,在这里用一个简单的授权来访问密码保护的资源 header[&Authorization&]=&Basic&+System.Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes(&username:password));// 用自定义的头传递一个请求到URLvar www= new WWW(url, rawData, headers);// 这里处理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下载物体来自动等待,直到它被下载完成(不会影响游戏的其余部分)。如果你像从web服务器上获取一些数据例如高分列表或者调用主页,可以使用这个,也有一些功能可以使用从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(){// 开始下载给定的URLvar www : WWW = new WWW(url);// 等待下载完成//赋值纹理renderer.material.mainTexture = www.}变量◆ var assetBundle : AssetBundle描述: 从工程文件中下载一个可以包含任意类型资源的AssetBundle。function Start(){var www = new WWW(&http://myserver/myBundle.unity3d&);// 获取制定的主资源并实例化它Instantiate(www.assetBundle.mainAsset);}参见: AssetBundle类。◆ var audioClip : AudioClip描述: 从下载的数据生成一个AudioClip(只读)。该数据必须是一个Ogg Vorbis格式的音频剪辑。即使音频没有完全下载完成,这个也立即返回,允许你开始播放已经下载完成的部分。var url : Sfunction Start(){www = new WWW(url);audio.clip = www.audioC}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(){// 开始下载给定的URLvar www : WWW = new WWW(url);// 等待下载完成// 打印错误的控制台if(www.error!=null){Debug.Log(www.error);}//赋值纹理renderer.material.mainTexture = www.}◆ 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.while(!movieTexture.isReadyToPlay)//初始化GUI纹理为1:1解析度并居中guiTexture.texture = movieTtransform.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.audioC// 播放视频和音频movieTexture.Play();audio.Play();}// 确保我们有GUI纹理和音频源@script RequireComponent(GUITexture)@script RequireComponent(AudioSource)◆ var oggVorbis : AudioClip描述: 加载Ogg Vorbis文件到音频剪辑。如果流没有被完全下载,将返回null。使用isDone或者yield来查看数据是否可用。参见: AudioClip, AudioSourcevar path = &http://ua301106.us.archive.org/2/items/abirdt02.ogg&;function Start(){var download = new WWW(path); // 开始下载 // 等待下载完成var clip : AudioClip = download.oggV // 创建ogg vorbis文件// 播放它if(clip!=null){audio.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/abirdt02.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&downloadPath.i++){var path = downloadPath[i];var download = new WWW(path);downloadedClips[i] = download.oggVif(downloadedClips[i] == null)Debug.Log(&Failed audio download& + path);}}function PickRandomSong() : AudioClip{var possibleSongs = Array();// 构建一个下载完成的音乐列表for(var i=0;i&downloadedClips.i++){if(downloadedClips[i] != null)possibleSongs.Add[i];}// 还没有音乐被下载if(possibleSongs.length == 0)// 我们播放了所有音乐,现在从任何音乐中选择if(possibleSongs.length == playedSongs.length)playerSongs.Clear();// 从列表中已出已经播放完成的音乐for(i=0;i&playedSongs.i++)possibleSongs.Remove(playedSongs[i]);// 获取一个随即的音乐if(possibleSongs.length != 0){var index : int = possibleSongs[Random.Range(0,possibleSongs.length)];playedSongs.Add(index);return downloadedClips[index];}}function PlaySongs(){while(true){var clip : AudioClip = PickRandomSongs();if(clip != null){audio.clip =audio.Play();yield WaitFormSecond(clip.length);}}}@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(){// 开始下载给定的URLvar www : WWW = new WWW(url);// 等待下载完成// 赋值纹理renderer.material.mainTexture = www.}◆ 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下载的URLpostData 传递到该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){// 开始下载给定的URLvar www = new WWW(url);// 等待直到下载完成// 赋值下载的图片到物体的主纹理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直到流完成// 加载它!stream.LoadUnityWeb();}// 下载一个.unity3d文件并在GUI纹理中显示速度,你需要确保GUI纹理被设置为具有一个pixelInsetfunction Update(){// 保存原始的pixelInset并修改它var originalPixelRect = guiTexture.pixelI// 通过缩放GUI纹理来更新进度栏,直到到达末端var stream = new WWW(&http://www.unity3d.com/webplayers/Lightning/lightning.unity3d&);while(!stream.isDone){guiTexture.pixelInset.xMax = originalPixelRect.xMin + stream.progress * originalPixelRect.}// 在加载前更新最后一次guiTexture.pixelInset.xMax = originalPixelRect.xMstream.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 : WheelHvar wheel : WheelCollider = GetComponent(WheelCollider);if(wheel.GetGroundHit(hit)){wheel.forwardFriction.siffness = hit.collider.material.staticFwheel.sidewayFriction.siffness = hit.collider.material.staticF}}WheelHit 结构车轮的接触信息,由WheelCollider得到。用于WheelCollider的摩擦力是独立于物理系统计算的,使用基于轮胎摩擦力模型的滑动。这允许更加真实的行为,而且使车轮忽略标准的PhysicMaterial设置。模拟不同地面材质的方法是查询WheelCollider获取它的碰撞信息(参考WheelCollider.GetGroundHit)。通常你可以获取车轮碰到的其他collider,并基于地面material修改车轮的forwardFriction和sidewayFriction。变量◆ var collider : Collider描述: 车轮碰撞到的Collider。// 当附加到WheelCollider时,基于地面的材质的静态摩擦力修改轮胎的摩擦力function FixedUpdate(){var hit : WheelHvar wheel : WheelCollider = GetComponent(WheelCollider);if(wheel.GetGroundHit(hit)){wheel.forwardFriction.siffness = hit.collider.material.staticFwheel.sidewayFriction.siffness = hit.collider.material.staticF}}◆ var force : float描述: 应用到接触点的力的大小。◆ var forwardDir : Vector3描述: 车轮指向的方向。◆ var forwardSlip : float描述: 在滚动方向上的滑动,加速滑动为负,制动滑动为正。// 当轮胎滑动时打印&Braking Slip!&function FixedUpdate(){var hit : WheelHvar 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 类,继承自YieldInstructionMonoBehaviour.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.var height = Screen.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);if(w.error != null){print(w.error);}else{print(Finished Uploading Screenshot&);}// 在游戏视图中显示alpha通道的内容,需要UnityPro因为这个脚本使用了GI类private var mat : M// 在该帧被完全渲染后,我们将绘制提取了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;i&mat.passC++i){mat.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语句。// 打印0print(Time.time);// 等待5秒yield new WaitForSeconds(5);// 打印5.0print(Time.time);构造函数◆ static function WaitForSeconds(seconds : float) : WaitForSeconds描述: 创建一个yield指令来等待给定的秒数。// 打印0print(Time.time);// 等待5秒yield new WaitForSeconds(5);// 打印5.0print(Time.time);属性AddComponentMenu 类,从Attribute继承。AddComponentMenu属性允许你防止一个脚本到&Component&菜单的任何位置,而不仅是&Component-&Scripts&菜单。使用这个更好的组织Component菜单,这种方法可以在添加脚本时改善工作流程。重要提示:需要重启!// JavaScript的例子@scriptAddComponentMenu(&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继承让脚本在编辑模式执行。默认的,脚本只在运行模式时执行。这可以让这个脚本在编辑模式时执行。@scriptExecuteInEditMode();// 只是一个简单的脚本来查找目标变换var target : Tfunction Update(){if(target)transform.LookAt(target);}HiddenInInspector类,从Attribute继承使一个变量不会出现在检视面板中但是能被序列化。// 使p不显示在检视面板中,但是能被序列化@HiddenInInspectorvar p = 5;NonSerialized 类,从Attribute继承NonSerialized属性标记一个变量没有被序列化。用这种方法你能保持一个公开变量,并且Unity不会序列化它或在检视面板中显示它。// p不会显示在检视面板中或被序列化// JavaScript的例子@System.NonSerializedvar p = 5;// C#的例子class Test{// p不会显示在检视面板中或者被序列化[System.NonSerialized]public int p = 5;}RPC 类,从Attribute继承RenderBeforeQueues类,从Attribute继承定义在哪个渲染队列中OnRenderObject将被调用的属性。参见: Render.queues,MonoBehaviour.OnRenderObject// 在渲染不透明和透明物体之前OnRenderObject被调用@RenderBeforeQueues()function OnRenderObject(queue : int){// 做自定义的渲染}构造函数◆ static function RenderBeforeQueues(params args : int[]) : RenderBeforeQueues描述: 定义在哪个渲染队列中OnRenderObject将被调用。参见: Render.queues,MonoBehaviour.OnRenderObject// 在渲染不透明和透明物体之前OnRenderObject被调用@RenderBeforeQueues()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.}var test = Test();// C#的例子:[System.Serializable]class Test{public int p = 5;public Color c= Color.}枚举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.D参见: Camera.clearFlags属性,camera组件◆ CameraClearFlags.Nothing描述: 不清除任何东西。这将留下前一帧的颜色的深度缓存或者任何被显示的东西。// 不清除任何东西camera.clearFlags = CameraClearFlags.N参见: Camera.clearFlags属性,camera组件◆ CameraClearFlags.Skybox描述: 用天空盒清除。如果没有设置天空盒,相机将继续使用backgroundColor来清除。// 用天空盒清除camera.clearFlags = CameraClearFlags.S参见: Camera.clearFlags属性,camera组件,Render设置◆ CameraClearFlags.SolidColor描述: 用背景颜色清除camera.clearFlags = CameraClearFlags.SolidC参见: 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.Sides)print(&Touching sides!&);if(controller.collisionFlags == CollisionFlags.Sides)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.Sides)print(&Touching sides!&);if(controller.collisionFlags == CollisionFlags.Sides)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.Sides)print(&Touching sides!&);if(controller.collisionFlags == CollisionFlags.Sides)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.Sides描述: CollisionFlags是由CharacterController.Move返回的一个bitmask。它给你一个角色和其他任何物体碰撞的大概位置。function Update() {var controller : CharacterController = GetComponent(CharacterController);if(controller.collisionFlags == CollisionFlags.None)print(&Free floating!&);if(controller.collisionFlags & CollisionFlags.Sides)print(&Touching sides!&);if(controller.collisionFlags == CollisionFlags.Sides)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,GUI脚本手册。值◆ 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.B参见: Texture.filterMode,texture assets◆ FilterMode.Point描述: 点过滤 & 纹理像素变得近乎斑驳。renderer.material.mainTexture.filterMode = FilterMode.P参见: Texture.filterMode,texture assets◆ FilterMode.Trilinear描述: 三线性过滤 & 纹理被平均采样并在mipmap等级之间混合。renderer.material.mainTexture.filterMode = FilterMode.T参见: Texture.filterMode,texture assetsFocusType被GUIUtility.GetControlID使用来通知UnityGUI系统给定的空间能否获取键盘焦点。值◆ FocusType.Keyborad描述: 这是一个何时的键盘控制。在所有平台上它都能有输入焦点。用于TextField和TextArea控件。◆ FocusType.Native描述: 这个空间可以在Windows下获取焦点,但是在Mac下不能。用于按钮,复选框和其他的&可按下&物体。◆ FocusType.Passive描述: 这个控件永远不能接收键盘焦点。ForceModeRigidbody.AddForce如何使用力的选项。值◆ ForceMode.Acceleration描述: 添加一个牛顿力到这个刚体,忽略它的质量。这个模式不依赖于刚体的质量。因此推和旋转的应用将不会受到刚体质量的影响,相对于ForceMode.Force这将以相同的设置移动每个刚体而忽略它们的质量差别。这个模式更像一个加速度而不是速度。在这个模式线,应用到物体的力参数的单位是距离/时间^2。◆ ForceMode.Force描述: 添加一个牛顿力到这个刚体,使用它的质量。这个模式依赖于刚体的质量。因此,必须对较大的质量的物体应用更多的力来推动或旋转它。这模式更像一个加速度而不是速度。在这个模式线,应用到物体的力的参数的单位是质量*距离/时间^2。◆ ForceMode.Impulse描述: 用刚体的质量改变它的速度。这个模式依赖于刚体的质量。因此,必须对较大质量的物体应用更多的力来推动或旋转它。这模式更像一个速度而不是加速度。在这个模式线,应用到物体的力的参数是质量*距离/时间。◆ ForceMode.VelocityChange描述: 改变刚体的速度。忽略它的质量。这个模式不依赖于刚体的质量。因此推和旋转的应用将不会受到刚体质量的影响。这可用于控制不同尺寸的飞船而不考虑质量差别。在这个模式,应用到物体的力的参数的单位是距离/时间。HideFlagsBit蒙板,可以控制对象销毁和在检视面板中的可视性。值◆ HideFlag.DontSave描述: 这个物体将不会被保存到场景。当一个新的场景被加载时它将不会被销毁。使用DestroyImmediate手工清理这个物体是你的责任,否则它将泄漏。◆ HideFlags.HideAndDontSave描述: 不显示在层次视图中并且不保存到场景的组合。这个最常用于那些由脚本创建并纯粹在它控制之下的物体。◆ HideFlags.HideInHierarchy描述: 如果这个对象是储存在一个资源中,这个对象将不会显示在层次视图中并且不会显示在工程视图中。◆ HideFlags.HideInInspector描述: 不能在检视面板中查看。◆ HideFlags.NotEditable描述: 这个物体在检视面板中不可编辑。ImagePosition在GUIStyle中图片和文本如何被放置。值&◆ ImagePosition.ImageAbove描述: 图片在文本上面。◆ ImagePosition.ImageLeft描述: 图片在文本左侧。◆ ImagePosition.ImageOnly描述: 只有这个图片被显示。◆ ImagePosition.TextOnly描述: 只有这个文本被显示。JointDriveModeConfigurableJoint试图基于这个表示来达到这个位置/速度的目的。值◆ JointDriveMode.None描述: 不用任何力来达到目标。◆ JointDriveMode.Position描述: 尽量达到特定的位置。◆ JointDriveMode.PositionAndVelocity描述: 尽量达到特定的位置和速度。◆ JointDriveMode.Velocity描述: 尽量达到特定的速度。JointProjectionMode该属性用来决定在物体偏离太多的时候如果它吸附到约束位置。参见: ConfigurableJoint值◆ JointProjectionMode.None描述: 不吸附。◆ JointProjectionMode.PositionAndRotation描述: 吸附到位置和旋转。◆ JointProjectionMode.PositionOnly描述: 只吸附到位置。KeyCodeKeyCode是由Event.keyCode返回的。这些直接映射到键盘上的物理键。值Backspace 退格键Delete Delete键TabTab键Clear Clear键Return 回车键Pause 暂停键Escape ESC键Space 空格键Keypad0 小键盘0Keypad1 小键盘1Keypad2 小键盘2Keypad3 小键盘3Keypad4 小键盘4Keypad5 小键盘5Keypad6 小键盘6Keypad7 小键盘7Keypad8 小键盘8Keypad9 小键盘9KeypadPeriod 小键盘&.&KeypadDivide 小键盘&/&KeypadMultiply小键盘&*&KeypadMinus 小键盘&-&KeypadPlus 小键盘&+&KeypadEnter 小键盘&Enter&KeypadEquals 小键盘&=&UpArrow 方向键上DownArrow 方向键下RightArrow 方向键右LeftArrow 方向键左Insert Insert键Home Home键EndEnd键PageUp PageUp键PageDown PageDown键F1功能键F1F2功能键F2F3功能键F3F4功能键F4F5功能键F5F6功能键F6F7功能键F7F8 功能键F8F9 功能键F9F10 功能键F10F11 功能键F11F12 功能键F12F13 功能键F13F14 功能键F14F15 功能键F15Alpha0 按键0Alpha1 按键1Alpha2 按键2Alpha3 按键3Alpha4 按键4Alpha5 按键5Alpha6 按键6Alpha7 按键7Alpha8 按键7Alpha9 按键9Exclaim &!&键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手柄按键0JoystickButton1手柄按键1JoystickButton2手柄按键2JoystickButton3手柄按键3JoystickButton4手柄按键4JoystickButton5手柄按键5JoystickButton6手柄按键6JoystickButton7手柄按键7JoystickButton8手柄按键8JoystickButton9手柄按键9JoystickButton10手柄按键10JoystickButton11手柄按键11JoystickButton12手柄按键12JoystickButton13手柄按键13JoystickButton14手柄按键14JoystickButton15手柄按键15JoystickButton16手柄按键16JoystickButton17手柄按键17JoystickButton18手柄按键18JoystickButton19手柄按键19Joystick1Button0第一个手柄按键0Joystick1Button1第一个手柄按键1Joystick1Button2第一个手柄按键2Joystick1Button3第一个手柄按键3Joystick1Button4第一个手柄按键4Joystick1Button5第一个手柄按键5Joystick1Button6第一个手柄按键6Joystick1Button7第一个手柄按键7Joystick1Button8第一个手柄按键8Joystick1Button9第一个手柄按键9&Joystick1Button10第一个手柄按键10Joystick1Button11第一个手柄按键11Joystick1Button12第一个手柄按键12Joystick1Button13第一个手柄按键13Joystick1Button14第一个手柄按键14Joystick1Button15第一个手柄按键15Joystick1Button16第一个手柄按键16Joystick1Button17第一个手柄按键17Joystick1Button18第一个手柄按键18Joystick1Button19第一个手柄按键19Joystick2Button0第二个手柄按键0Joystick2Button1第二个手柄按键1Joystick2Button2第二个手柄按键2Joystick2Button3第二个手柄按键3Joystick2Button4第二个手柄按键4Joystick2Button5第二个手柄按键5Joystick2Button6第二个手柄按键6Joystick2Button7第二个手柄按键7Joystick2Button8第二个手柄按键8Joystick2Button9第二个手柄按键9Joystick2Button10第二个手柄按键10Joystick2Button11第二个手柄按键11Joystick2Button12第二个手柄按键12Joystick2Button13第二个手柄按键13Joystick2Button14第二个手柄按键14Joystick2Button15第二个手柄按键15Joystick2Button16第二个手柄按键16Joystick2Button17第二个手柄按键17Joystick2Button18第二个手柄按键18Joystick2Button19第二个手柄按键19Joystick3Button0第三个手柄按键0Joystick3Button1第三个手柄按键1Joystick3Button2第三个手柄按键2Joystick3Button3第三个手柄按键3Joystick3Button4第三个手柄按键4Joystick3Button5第三个手柄按键5Joystick3Button6第三个手柄按键6Joystick3Button7第三个手柄按键7Joystick3Button8第三个手柄按键8Joystick3Button9第三个手柄按键9Joystick3Button10第三个手柄按键10Joystick3Button11第三个手柄按键11Joystick3Button12第三个手柄按键12Joystick3Button13第三个手柄按键13Joystick3Button14第三个手柄按键14Joystick3Button15第三个手柄按键15Joystick3Button16第三个手柄按键16Joystick3Button17第三个手柄按键17Joystick3Button18第三个手柄按键18Joystick3Button19第三个手柄按键19LightRenderModeLight如何被渲染。参见: light组件值
阅读(...) 评论()

我要回帖

更多关于 unity 3d 教程 的文章

 

随机推荐