go’s blog

聴いた音楽とか、見たものとか

DOTweenのDOLookAtで躓いた話

とても便利なUnityAssetの「DOTween

f:id:gounsx:20170105021538p:plain

便利メソッドの一つである、ターゲットの方向に回転するDOLookAtで躓いた。

というのもこのDOLookAt、ターゲットの方向を向くときのベクトルが、回転させるオブジェクトのforwardであるために回転させるオブジェクトのforwardがモデルの背中方向にのびている場合、背中がターゲットの方を向くという事態に陥る。

AssetStoreからインポートしたモデルとかだとforwardが背中方向というのはよくある話。

f:id:gounsx:20170105023222p:plain

1つの解決策として、回転させたいオブジェクトに親オブジェクトを作り、スクリプトをアタッチして、子要素であるオブジェクトをあらかじめ180度回転させておくといった方法もあるのだが、親子構造でややこしくなってしまうので今回は違う方法で回避。

結論から言うと、第一引数にそのままターゲットのpositionを渡すのではなく、前処理をしてあげる。

以下がそのコード

var direction = gameObject.transform.position + (gameObject.transform.position - targetObject.transform.position);

ターゲットのオブジェクトから回転させたいオブジェクトのベクトルに、回転させたいオブジェクトのpositionを足してあげる。
これをDOLookAtの第一引数として渡してあげることで、無事LookAtさせることに成功。