發表文章

目前顯示的是 一月, 2013的文章

Unity 判斷兩物之間距離、角度,並注視目標

圖片
當要開始撰寫一個敵人AI時,總會有許多需要做判斷與偵測的,在這裡我們將最基本的距離與角度判斷稍作撰寫,判斷兩個GameObject的Position距離,並以數學公式計算之間的水平角度。 相信可以用這個基礎程式延伸撰寫為一個敵人角色的AI。 var target : Transform; // 宣告 注視目標 var viewAngle :float = 20.0; // 尋敵角度 var viewDis : float = 8.0; // 尋敵距離 function Update() { // 宣告 dis 浮點數 為 本身與目標之間距離 var dis : float=Vector3.Distance(transform.position, target.transform.position); // 距離小於 8.0 則 if (dis < viewDis) { // 宣告 注視目標座標 為 目標位置 var lookAtPos : Vector3 = target.position; // 本身與目標之間相對位置 var relative : Vector3 = transform.InverseTransformPoint(lookAtPos); // 計算兩者之間角度 var angle : float = Mathf.Atan2(relative.x, relative.z) * Mathf.Rad2Deg; // 兩者角度絕對值 小於 尋迪角度 則 if (Mathf.Abs(angle) < viewAngle) {    // 注視目標座標Y軸 為 自身Y軸    lookAtPos.y = transform.position.y; // 注視目標    transform.LookAt (lookAtPos); } } }

Uinty Mecanim 練習與心得

圖片
Mecanim是Unity 4.0 新增的一個角色動畫系統,細節跟官方的構想不是很清楚,但目前各人感覺最方便的幾個點就是"方便共用動畫",它有點類似遊戲引擎官方做一個公共骨骼,將每個人的骨骼連結到公共的骨骼上,動畫也綁到公共骨骼,就可以一個動畫多模型使用。 並且以往遊戲角色動畫偏向設計為"原地行走",這個動畫系統的範本卻做成"向前行走",轉向也是一樣不再是原地,而有位移(跳躍還沒實際測試練習)。 所以使用這個動畫系統也可以考慮將移動動畫做成有位移的。 這次練習是使用3dsmax的CAT系統,參考  3ds Max CAT四足动物动作调节详解 - CAT路径动画设置  製作向前、轉圈的行走動畫。 在Unity的Mecanim設定混合樹時參考  新动画系统Mecanim的简单图文教程  來設定混合樹的條件、參數與變數。 控制的程式碼則參考  Unity3d 4.0新动画系统Mecanim用法(二)  並嘗試以javascript來撰寫。 以下是程式碼,如果有將倒退動畫設定進去,應該也可以沿用,程式碼跟舊的方式一樣,拖曳到角色身上即可。 不過仔細看影片發現,新版的將人物重力系統弄為Rigibody,而不是Charactr Controller,這可能還要再花點時間研究。 #pragma strict // 宣告動畫參數:移動 | 方向 var walk:float; var direction:float; // 宣告 animator為Animator var animator : Animator; function Start () { // animator 為物件的Animator animator = gameObject.GetComponent(Animator); } function Update () { // 動畫參數 為 鍵盤水平、垂直參數 walk = Input.GetAxis("Vertical"); direction = Input.GetAxis("Horizontal"); if(animator) { // 設定 物件上Animator變數,播放相對應動畫 animator.SetFloat(