這個發現倒是挺讓人開心的,因為要在Unity中要把動畫中的模型關節獨立出來運作,這是專業版限定而且能控制的關節不多,既然插件的作者Nora連Script都幫大家寫好了,那就不客氣地拿來玩,首先成品在這裡,讓模型可以一直盯著攝影機看就是這次要做出來的結果。
首先在攝影機控制上使用Character Controller Package內的Mouse Look.cs再加以修改,如何修改另外一篇再談,下一段只大略的提一下攝影機的部分。
先在模型頭部位置新增CameraTarget空物件,將Main Camera加入拍攝目標物CameraTarget之下,再將Mouse Look.cs也加入CameraTarget下,最後針對旋轉做角度上的限制,這樣就可以做出Main Camera保持在前方而且拍攝模型頭部的效果。
接著進入模型骨架角度的控制,在CameraTarget下新增腳本(CameraLookAt.cs),以及新增兩個變數:
1. GameObject head是要控制的關節,在這裡是模型下59.joint_Head。
2. Camera mainCamera就是已經加入CameraTarget下的攝影機,這裡就直接用一開始場景預設的Main Camera。
剩下的變數是做表情控制的,在這裡一樣先保留之後再談。
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class CameraLookAt : MonoBehaviour {
public GameObject head;
private Vector3 originVector;
private Vector3 newVector;
private Vector3 angle;
public Camera mainCamera =new Camera();
void Start () {
originVector = mainCamera.transform.position - head.transform.position;////(1)
}
void Update () {
newVector = mainCamera.transform.position - head.transform.position;////(2)
float angleX = Vector3.Angle(originVector, new Vector3(0,newVector.y,newVector.z));////(3)
if (newVector.y > 0){
angleX *= -1;
}
float angleY = Vector3.Angle(originVector, new Vector3(newVector.x,0,newVector.z));
if (newVector.x < 0){
angleY *= -1;
}
head.GetComponent<MMD4MecanimBone> ().userEulerAngles = new Vector3 (angleX, angleY, 0);////(4)
}
}
(1)在做初始化Start時會儲存從head到camera的初始向量。
(2)在Update時會隨時跟新head到camera的向量。
(3)分別求出X軸和Y軸的角度,另外還要透過向量方向修正旋轉角度。
(4)將求出的角度帶到MMD4MecanimBone下的userEulerAngles。
以上就是旋轉角度的控制,但正負判斷會讓模型旋轉時有一個奇怪的頓點,這個問題需要再修正,至於表情的控制就留在下一次。
素材:
結月ゆかりVer3.5 by お宮 - https://bowlroll.net/file/6518
Keyboard Keys Icons by Chromatix - http://www.iconarchive.com/show/keyboard-keys-icons-by-chromatix.html




沒有留言:
張貼留言