歩けるバージョンあもら

SD版あもら、HD版あもら、Unity版あもら、と現在のあもらは3代目

4代目うごけるあもら作成中。VRバージョンが5代目。


FinakIKのsimplelocomotionを本体オブジェクトにアタッチ

Camera ControllerにCameraを指定

(CameraをDemoの中からコピペしてもってくる)

アニメーターに↑↓←・→でidleとwalkできるようmecanimの配置


追記

動作に多少の一貫性のなさがみられる。

simplelocomotionが機能しないことがある。

(矢印キーで移動しないなど)

スクリプトやカメラの指定、コンポーネントにアタッチするの順序を変えたり

一度Unityを落として立ち上げて再度アタッチしなおしたら直った。

Apply Root MotionはチェックをONで現状動いてる。


動いたところでうまく行ったところまで一回保存してプロジェクト全体を新しいコピーでいじるようにした。

どこで動かなくなるかわからないので。


追記

スクリプトアタッチの位置をいじったりしてるとプレハブ状態じゃなくなったりして

あとから顔モデルの追加とかできなくなっていた。

いったん作ったスクリプトやアニメーターは再利用できるので

もう一度シーンつくってモデルいれてやり直したら修正できた。


トランジションでおもったようにホームに戻せない場合

戻りのアニメーションを3Dで作って経由させると戻れる場合があり。


あとからオブジェを持たせたり追加するには

3Dでスケール0のオブジェよりトランジションでON、OFFできる。


ひとつのモーションのなかでスケール0-100にすると

場ぐることがあって、最初0.1とかからはじめると動くことがある。


ディゾルブの概念がない。いれたらかなり作りやすくなるのに。

ちなみにアンチエリアスの設定は

UnityのEdit>Project Setting>Quality

AntiAliasing



必要なスクリプトの記録

warkkey

矢印キーで待機と歩きをコントロールするためのキーアサイン用。

---------------------------------------------------------------

using UnityEngine;

using System.Collections;

public class walkkey: MonoBehaviour

{

private Animator anim;

void Start()

{

anim = GetComponent<Animator>();

}

void Update()

{

if (Input.GetKey("up"))

{

anim.SetBool("Walk", true);

}

else

{

anim.SetBool("Walk", false);

}

if (Input.GetKey("down"))

{

anim.SetBool("down", true);

}

else

{

anim.SetBool("down", false);

}

if (Input.GetKey("right"))

{

anim.SetBool("right", true);

}

else

{

anim.SetBool("right", false);

}

if (Input.GetKey("left"))

{

anim.SetBool("left", true);

}

else

{

anim.SetBool("left", false);

}

}

}


----------------------------------------------------------------------------


keyoption

その他の動きようのキーアサイン

----------------------------------------------------------------------------

using UnityEngine;

using System.Collections;

public class keyoption: MonoBehaviour

{

void Update()

{

bool jump = false;

bool naku = false;

bool idle = false;

if (Input.GetKeyDown(KeyCode.J))

{

jump = true;

}

if (Input.GetKeyDown(KeyCode.N))

{

naku = true;

}

if (Input.GetKeyDown(KeyCode.Space))

{

idle = true;

}

GetComponent<Animator>().SetBool("jump", jump);

GetComponent<Animator>().SetBool("naku", naku);

GetComponent<Animator>().SetBool("idle", idle);

}

}

-----------------------------------------------------------------------


reset     assets>importpackage>Utility>にあるObjectResetterを使う。

このスクリプトをリセットしたいオブジェクトにアタッチ

下のスクリプトをC#でつくってそれもオブジェクトにアタッチ

2つのスクリプトをアタッチすることで位置がリセットさせる。

位置のリセット関係

詳細


-----------------------------------------------------------------------

using UnityEngine;

using System.Collections;

using UnityStandardAssets.Utility;

public class reset : MonoBehaviour

{

private ObjectResetter objectR;

// Use this for initialization

void Start()

{

objectR = GetComponent<ObjectResetter>();

}

// Update is called once per frame

void Update()

{

// マウスの左ボタンを押したら5秒後にゲームオブジェクトの位置をリセット

if (Input.GetKeyDown(KeyCode.F12))

{

objectR.DelayedReset(0f);

Debug.Log("Reset");

}

}

// ObjectResetterでSendMessageされてるので一応受け取りメソッドを用意

public void Reset()

{

Debug.Log("リセットしました");

}

}

-------------------------------------------------------------------------------------



Final IKのsimplelocomotionだと都合が悪いことが分かって

これに変更。

----------------------------------------------------------------------------------------

// Player3.cs

using UnityEngine;

// プレイヤー

public class Player3 : MonoBehaviour

{

[SerializeField]

private Vector3 velocity; // 移動方向

[SerializeField]

private float moveSpeed = 5.0f; // 移動速度

[SerializeField]

private float applySpeed = 0.2f; // 振り向きの適用速度

void Update()

{

// WASD入力から、XZ平面(水平な地面)を移動する方向(velocity)を得ます

velocity = Vector3.zero;

if (Input.GetKey(KeyCode.UpArrow))

velocity.z += 1;

if (Input.GetKey(KeyCode.LeftArrow))

velocity.x -= 1;

if (Input.GetKey(KeyCode.DownArrow))

velocity.z -= 1;

if (Input.GetKey(KeyCode.RightArrow))

velocity.x += 1;

// 速度ベクトルの長さを1秒でmoveSpeedだけ進むように調整します

velocity = velocity.normalized * moveSpeed * Time.deltaTime;

// いずれかの方向に移動している場合

if (velocity.magnitude > 0)

{

// プレイヤーの回転(transform.rotation)の更新

// 無回転状態のプレイヤーのZ+方向(後頭部)を、移動の反対方向(-velocity)に回す回転に段々近づけます

transform.position += velocity;

transform.rotation = Quaternion.Slerp(transform.rotation,

Quaternion.LookRotation(velocity),

applySpeed);

}

}

}

--------------------------------------------------------------------------