改变unity中人物的注视方向

http://nn-hokuson.hatenablog.com/entry/2017/07/11/205245

Unityではオブジェクト向きを変えるにはTransform.LookAtメソッドを使います。この場合、体ごとグルっと回ってしまって不自然なことがあります。

ここではIKを使ってUnityちゃんの注視点方向を変える方法を紹介します。

f:id:nn_hokuson:20170711205128j:plain

スポンサーリンク

Unityちゃんを配置しする

Unityちゃんのモデルをシーンビューに配置しましょう。WAITアニメを表示するため、UnityChan/Animationフォルダにある「UnityChanLocomotions」をUnityちゃんにドラッグ&ドロップします。

f:id:nn_hokuson:20170711202548j:plain

これで、自動的にUnityちゃんにAnimatorコンポーネントがアタッチされます。実行するとWAITアニメーションが実行されます。

f:id:nn_hokuson:20170711202751j:plain:w450

UnityちゃんをIK対応にする

UnityちゃんをIKにしたがって動かすためには、Animator ControllerでUnityちゃんをIKで動くように設定する必要があります。

UnityChanLocomotionsを開いて、画面左のBaseLayerの横の歯車ボタンを押してください。出てくるメニューの一番下にある「IK Pass」にチェックを入れます

f:id:nn_hokuson:20170711203140j:plain

これで、MechanimでIKが使えるようになりました。

マウスの移動をUnityちゃんが追うようにする

最後に、Unityちゃんの視線がマウスを追うように、スクリプトを作成します。プロジェクトビューで右クリックし、Create→Script→C# Scriptを選択して「LookAtController.cs」という名前で保存しましょう。

保存できたら次のスクリプトを入力してください。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class LookAtController : MonoBehaviour {

    Animator animator;
    Vector3 targetPos;

    void Start () {
        this.animator = GetComponent<Animator> ();    
        this.targetPos = Camera.main.transform.position;
    }
    
    void Update () {
        if (Input.GetMouseButton (0))
        {
            Vector3 touchPos = Camera.main.ScreenPointToRay (Input.mousePosition).origin;
            touchPos.z = -0.5f;
            targetPos = touchPos;
        }
    }

    private void OnAnimatorIK(int layerIndex)
    {
        this.animator.SetLookAtWeight(1.0f, 0.8f, 1.0f, 0.0f, 0f);
        this.animator.SetLookAtPosition(this.targetPos);
    }
}

ここではSetLookAtWeightメソッドと、SetLookAtPositionメソッドを使ってUnityちゃんの体をIKで動かしています。

SetLookAtWeightは体や頭、目の追従具合(重み)を調整するためのメソッドです。SetLookAtWeightの引数は次のようになります。

変数意味
weight全体の重み
bodyWeight体を動かす重み
headWeight頭を動かす重み
eyesWeight目を動かす重み
clampWeightモーションの制限量

ここでは、第2引数でマウスの動きに対して体がどれだけ追従するかを指定しています。また、第3引数ではマウスの動きに頭がどれだけ追従するかを指定しています。

続けて、ユニティちゃんの注視方向をSetLookAtPositionで指定しています。ここではマウスでクリックしている座標を指定しています。

入力できたら、スクリプトをUnityちゃんにドラッグ&ドロップしてアタッチしましょう。

f:id:nn_hokuson:20170711203731j:plain

実行するとマウスのカーソルをUnityちゃんが追うように体と首を回転させます。

f:id:nn_hokuson:20170711205001g:plain


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值