21
2016
08

Unity浼犻侀棬绫讳技鏁堟灉瀹炵幇

绠杩

鍦ㄤ紶閫侀棬涓紝鏍稿績鐨勭帺娉曟槸鍦ㄥ湴涓婃垨鑰呭涓婃墦寮2涓彲浠ヨ仈閫氱殑娲炴潵瀹炵幇浼犻佺殑鏁堟灉銆備互姝ゆ墿灞曞姞鍏ヨВ璋滆绱犳瀯鎴愭父鎴忕殑鏍稿績銆

杩欓噷灏濊瘯浣跨敤unity鏉ュ疄鐜颁紶閫侀棬鐨勬牳蹇冨姛鑳斤紝鍏蜂綋鍔熻兘鍒嗘瀽濡備笅锛

1銆佷紶閫侀棬鐨勬ā鍨

2銆佷紶閫侀棬鐨勮创鍥

3銆佷紶閫侀棬鐨勪紶閫佸姛鑳

杩欓噷鎴戜滑闇瑕佷互涓嬭蒋浠讹細3dmax 2014锛寀nity3d 5.4.0锛寁isual studio 2015

涓銆佷紶閫侀棬鐨勬ā鍨嬪拰uv

鎵撳紑3dmax锛岀‘璁ょ郴缁熷崟浣嶅拰鏄剧ず鍗曚綅閮戒负绫筹紝濡傛灉涓嶄负绫筹紝鏀规垚绫

image

寤虹珛涓涓渾鏌变綋锛岄珮搴︽鏁1锛岀闈㈠垎娈1锛岃竟鏁32锛岃皟鏁村埌閫傚綋澶у皬锛岃浆鍖栦负鍙紪杈戝杈瑰舰锛屽垹闄ら櫎浜嗛《閮ㄩ潰涔嬪鐨勬墍鏈夐潰锛屼綅缃綊0銆傚啀娆¤浆鍖栦负鍙紪杈戝杈瑰舰銆

image

浣跨敤uvw灞曞紑鍛戒护锛岃繘琛寀v灞曞紑

image

鏇存敼妯″瀷鐨勫悕绉板拰鏉愯川鐨勫悕绉帮紝瀵煎嚭fbx鏂囦欢

image

浜屻佷紶閫侀棬鐨勫姩鎬佽创鍥

1銆侀潤鎬佹晥鏋滃疄鐜

鎵撳紑unity锛屽鍏ユā鍨嬶紝瀵煎叆涓涓傚綋鐨勫満鏅寘浣滀负娴嬭瘯鍦烘櫙锛屽垱寤轰竴涓彲浠ョ敤閿洏鎺у埗鐨凱layer锛岀敤浜庡満鏅父鍘嗗拰鍔熻兘娴嬭瘯

image

image

鍒涘缓涓涓柊鐨勬憚鍍忔満锛屾斁鍦ㄥ叾浠栦綅缃紝浣滀负浼犻佺殑鐩爣鐐广傚垱寤轰竴涓猂enderTexture锛屾嫋鎷藉埌鎽勫儚鏈虹殑Target Texture涓娿傚皢鎽勫儚鏈虹殑Clear flag鏀逛负solid color銆傞傚綋鏇存敼鐩告満鐨刅iewport Rect銆

灏嗗鍏ョ殑浼犻侀棬妯″瀷鎷栨嫿鍒板満鏅腑锛屾斁缃湪涓闈㈠涓婏紝璁剧疆妯″瀷鏉愯川鐨勮创鍥句负RenderTexture銆

鍙互鐪嬪埌鏁堟灉濡備笅

image

2銆佸姩鎬佹晥鏋滃疄鐜

浼犻侀棬鐨勬晥鏋滅被浼间笌涓涓礊锛屽湪涓嶅悓鐨勪綅缃湅杩囧幓锛屾樉绀虹殑澶у皬鍜岀墿浠堕兘鏄湁宸埆鐨勩傚氨绫讳技浣犻氳繃涓涓獥鎴风湅澶栭潰鐨勪笘鐣岀被浼笺傛墍浠ワ紝鎴戜滑瑕佹牴鎹帺瀹剁殑鎽勫儚鏈虹浉瀵逛笌浼犻侀棬鐨勭浉瀵逛綅缃叧绯伙紝鏉ヨ缃洰鏍囩偣鎽勫儚鏈虹殑鐩稿叧鏁版嵁锛屾瘮濡傦紝瑙嗚锛屼綅缃紝閫夋嫨鍜岃鍓瓑銆

  • 鐩爣鎽勫儚鏈哄拰浼犻佺偣鐨勮窛绂=鐜╁鍜屼紶閫侀棬鐨勮窛绂

  • 鐩爣鎽勫儚鏈虹殑瑁佸壀璺濈=鐩爣鎽勫儚鏈哄拰浼犻佺偣鐨勮窛绂

  • 鐩爣鎽勫儚鏈哄缁堟湞鍚戜紶閫佺偣

  • 鐩爣鎽勫儚鏈虹殑瑙嗚=2*Atan(浼犻侀棬楂樺害/2/鐩爣鎽勫儚鏈哄拰浼犻佺偣鐨勮窛绂)

娉ㄦ剰Atan鍦╱nity涓负寮у害锛岄渶瑕佸啀涔樹笂Mathf.Rad2Deg杞垚瑙掑害

閮ㄥ垎浠g爜濡備笅锛堣繖閲屽埄鐢ㄧ埗瀛愬叧绯诲疄鐜颁綅缃彉鍖栵紝鐩爣鎽勫儚鏈轰负浼犻佺偣鐨勫瓙鐗╀綋锛屾墍浠ョ洰鏍囨憚鍍忔満鐨刲ocalposition涔熷氨鏄浉瀵逛簬浼犻佺偣鐨勭浉瀵硅窛绂伙級

internal protected void Update()
{
    var cpos = Camera.main.transform.position;var mt = Render.worldToLocalMatrix;     mt = Matrix4x4.TRS(Vector3.zero, Quaternion.AngleAxis(180, Vector3.up), Vector3.one) * mt;     Camera.transform.localPosition = mt.MultiplyPoint(cpos);     Camera.transform.LookAt(Point);
    Camera.nearClipPlane = -Camera.transform.localPosition.z;
    const float renderHeight = 3f;     Camera.fieldOfView = 2 * Mathf.Atan(renderHeight / 2 / Camera.nearClipPlane) * Mathf.Rad2Deg;
}

涓夈佷紶閫佸姛鑳藉疄鐜

鍦ㄤ紶閫侀棬涓婂鍔犱竴涓猚ollider锛岃缃负Trigger锛屽綋鐜╁涓庝箣鍙戠敓纰版挒鐨勬椂鍊欒缃帺瀹剁殑浣嶇疆鏁版嵁

  • 鐜╁鐨勪綅缃=浼犻佺偣鐨勪綅缃紝

  • 鐜╁鐩稿涓庝紶閫佺偣鐨勬湞鍚=浼犻佸墠锛岀帺瀹剁浉瀵逛簬浼犻侀棬鐨勬湞鍚

閮ㄥ垎浠g爜濡備笅

internal protected void OnTriggerEnter(Collider other)
{
 
    other.transform.root.rotation = other.transform.root.rotation * Point.rotation * Render.rotation;     other.transform.root.position = Point.position;
}

鎬荤粨

鏈」鐩暣浣撻毦搴︿笉澶э紝澶х害鑺辫垂鏃堕棿2澶

鐩墠椤圭洰宸茬粡寮婧愶紝鍦板潃涓http://git.oschina.net/CodeGize/PortalGame锛屽彲浠ュ墠寰涓嬭浇

婕旂ず鍦板潃锛http://v.youku.com/v_show/id_XMTY5MzE3MzU0MA==.html

芦 涓婁竴绡 涓嬩竴绡 禄