- 1、本文档共23页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
物理模擬引擎.doc
Unity 物理模擬引擎
請下載本單元使用的資源包(Physics test.unitypackage)
/open?id=0B9nexOsTrwhOYl9YRDFDVjgyZkk
Unity提供了許多物理模擬的功能,包含物體重量、慣性、彈力等物理特性,還有速度、加速度、碰撞和反饋等,這些物理屬性存在於各種不同的物理元件中。
下面我們將以物理元件(component)為基礎,介紹這些物理模擬。
1. Collider (碰撞體)
Collider是描述物體碰撞的有效範圍,一個Collider要綁在Rigidbody(剛體)上才能產生碰撞效果和事件。碰撞事件可以觸發指定的行為。
Unity 提供了多種類型的碰撞體:
Box Collider 方塊碰撞體 - 適用於方形的碰撞偵測(例如建築物、桌椅、汽車等)。
Sphere Collider 球形碰撞體 - 適用於球形的碰撞偵測。
Capsule Collider 膠囊碰撞體 - 適用於樹木、圓柱的碰撞偵測。
Mesh Collider 網格碰撞體 - 適用於形狀複雜的物件
這些碰撞體只是形狀不同而已,我們也可以使用編輯器再細部調整形狀。
每個Collider (碰撞體)都會有Is Trigger和Material兩種屬性
2. Rigidbody (剛體)
為了讓物體有重力或碰撞的效果就要加入Rigidbody。
現在先做一個簡單的實驗,
建立一個新場景,放入Plane和Cube,並讓Cube置於Plane上面。
選取方塊,加入Rigidbody (在Inspector中按add component,選physics Rigidbody)
執行後,就可以看到Cuble掉到Plane上了。
Rigidbody的屬性功能如下:
angularDrag:角阻力。旋轉時的阻力。
drag:物體位移時的阻力。
isKinematie:啟用的話,碰撞或者關節將不再會影響這個剛體。
Mass:剛體的質量。
useGravity:重力是否影響這個剛體。
constraints: 物體移動、旋轉時地限制
將Cube複製一份成Cube1,並將Cube1再往上提高一點,將Cube的isKinematie打勾,則Cube不受重力影響,因此,執行後Cube1就掉到Cube上。
3. 自動生成骨牌
為了要測試施力的效果,我們要先製作骨牌,請依下面步驟進行:
step 1
先開一個新的場景,做一個骨牌的預置物件(Prefab),然後,放入開始和結束的骨牌(命名為DominoesStart, DominoesEnd)
step 2
建立腳本SetDominoes.cs (若專案中已經有此腳本,不能重複)。
SetDominoes.cs
using UnityEngine;
using System.Collections;
public class SetDominoes : MonoBehaviour {
public GameObject dominoePrefab; // 骨牌的Prefab
public GameObject dominoeEnd; //結束的骨牌
public int NumCenterDom = 25; //中間的骨牌數量
void Start() {
// 開始方塊到結束方塊的位移量
Vector3 dir = dominoeEnd.transform.position - transform.position;
//算出間隔的長度
float interval = dir.magnitude / (NumCenterDom+1);
//將dir正規劃程單位向量
dir.Normalize();
for (int i=1; i=NumCenterDom; i++){
GameObject newDom = (GameObject)Instantiate(dominoePrefab);
newDom.transform.position = transform.position + dir*interval*i;
newDom.transform.rotation = transform.rotation;
}
}
}
step 3
將SetDominoes.cs起始骨牌(DominoesStart)上,並設定Dominoes Prefab和DominoesEnd兩參數
step 4
在場景加入一個Plane來支撐骨牌,執行後就可以看到一排骨牌了。
(see create dominoes)
4. AddForce
接下來,我們要探討施力對骨牌的影響了! 最常使用的方式是AddForce(),對物體中心
文档评论(0)