ここから本文です

質問です。 UnityのC#スクリプトを用いてゲームを作成しています。

bokusatu333さん

2015/2/1815:54:59

質問です。
UnityのC#スクリプトを用いてゲームを作成しています。

そこでマス目移動をするプレイヤーを作成しているのですが、
右を押したら右のマス目に一瞬で移動するのはできるのですが
ゆっくりとアニメーションのようにすることができません。

using UnityEngine;
using System.Collections;

public class idou : MonoBehaviour {

// Use this for initialization
void Start () {

}

// Update is called once per frame
void Update()
{

Vector3 v = this.transform.position;
if (Input.GetKeyDown(KeyCode.LeftArrow))
{
transform.position -= new Vector3(4.0f, 0.0f, 0.0f);
}

if (Input.GetKeyDown(KeyCode.RightArrow))
{
transform.position += new Vector3(4.0f, 0.0f, 0.0f);
}

if (Input.GetKeyDown(KeyCode.UpArrow))
{
transform.position += new Vector3(0.0f, 0.0f, 4.0f);
}

if (Input.GetKeyDown(KeyCode.DownArrow))
{
transform.position -= new Vector3(0.0f, 0.0f, 4.0f);
}

}

}

このようにいま打っているのですが、
ここからどのようにしたらアニメのようにプレイヤーが動きながら
その隣のマスまで1回だけ押したら移動するようにできますか?

お願いします・・・。

閲覧数:
1,171
回答数:
1
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

2015/2/1822:36:30

アセットのiTweenを使ってはどうでしょうか?
メニューのWindow→Asset Storeにて
itweenで検索
iTween無料と書かれてあるアセットを
ダウンロード、インポートします

コード中のVector3?は
Vector3がnullを設定できないためです(?はNull許容型)
nullを設定する意味はキーが押されているかを
判断する為です
数値のint等も?を付けることでnullを設定可能となります

※iTweenは移動だけでなく回転やサイズ(Scale)等も滑らかに
変化させることのできる便利なアセットです
いろいろ試してみてください

以下サンプルコードです

using UnityEngine;
using System.Collections;
public class movescript : MonoBehaviour {

bool moveflg = false; // 移動中はtrue
void Start () {
}

void Update () {
// Vector3はnullが設定できないので?を付けてnull許容型にする
Vector3? movepos = null;

// キーを押すと現在位置(transform.position)と移動量で移動先を算出
if (Input.GetKeyDown(KeyCode.LeftArrow))
{
movepos = transform.position - new Vector3(4.0f, 0.0f, 0.0f);
}

if (Input.GetKeyDown(KeyCode.RightArrow))
{
movepos = transform.position + new Vector3(4.0f, 0.0f, 0.0f);
}

if (Input.GetKeyDown(KeyCode.UpArrow))
{
movepos = transform.position + new Vector3(0.0f, 0.0f, 4.0f);
}

if (Input.GetKeyDown(KeyCode.DownArrow))
{
movepos = transform.position - new Vector3(0.0f, 0.0f, 4.0f);
}

// キーが押されて移動量が算出された状態
// 且つ移動中でない場合移動
if( movepos != null && moveflg == false)
{

iTween.MoveTo(gameObject,
iTween.Hash(
"position", movepos, // 移動先
"time", 1.5, // 移動にかかる秒数(調整してください)1.5fのようにfは必要ありません
"oncomplete", "complete" // 移動が終了すると関数complete()が呼ばれる
));
moveflg = true;

}

}

void complete()
{
// 移動が終了したので移動中flagをfalseにする
moveflg = false;
}

}

参考になれば幸いです

この質問は投票によってベストアンサーに選ばれました!

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。