質問: Vector2.MoveTowards(transform.position, new Vector2(vec.x,vec.y), speed * Time.deltaTime); } ``` こちらに関して良いアイディアは御座いませんでしょうか?お知恵を拝借したく存じます。
回答: 必要になるのはVector2の演算とMecanimをつかったアニメーションの切り替えです。 どちらも公式のチュートリアルに出てきますので確認してみてください。 * 2つのVector2を引き算した値を取得したXとYのそれぞれが一定の値以上か以下かの組み合わせで8方向の判定を得られます。参考までに4方向の例を挙げます。チュートリアルのようにnormalizeするのもよいでしょう。 ``` //移動速度 public float speed = 2; Vector2 vec; void Update () { //移動処理 if(Input.GetMouseButtonDown(0)){ Vector2 vec = Camera.main.ScreenToWorldPoint(Input.mousePosition); Vector2 diff = (Vector2) this.transform.position - vec; Debug.Log ("x="+diff.x+" y="+diff.y); var direction = "nutral"; if (diff.x > 0 && diff.y < 0) { // left up } else if (diff.x > 0 && diff.y > 0) { // left down } else if (diff.x < 0 && diff.y < 0) { // right up } else if (diff.x < 0 && diff.y > 0) { // right down } } } ``` * 判定した結果を元にAnimatorControllerにフラグをあてて対応するアニメーションステートに切り替えてはどうでしょうか。サンプルではSetTriggerを使っていますが、SetParameterを使って値を渡すこともできます。 パラメータの場合であればVector2の差分のXとYをそのまま渡し、方向の制御はすべてMecanimのステート制御にまかせてしまうとコードが要らなくなりますね。 Mecanimについては、まさにそのものという記事がありました。 *