ム空間雑記:||

インドアと厨二病の化身。

3D物体の移動そして回転。

移動

まず移動、移動の仕方は2種類。

1.座標を書き換えていく

2.リジットボディに物理的に力を加える

 

1.座標を書き換える

多分2Dゲームじゃお馴染みの手法だと思う。

update内で座標を増減していくだけで分かりやすい。

this.transform.Translate(Vector3.forward * Time.deltaTime * speed);

これで前に移動する。

vector3.forwardで前方向。rightとかleftとかにすればその方向へ指定できる。

3D物体が回転してればちゃんとその向いてる方向に移動する。

ただし速度が速すぎたりすると、壁や床へのめり込みが発生しやすいのが難点。

例えば毎フレーム20ドットで移動しようとすると壁が10ドット先にあった場合に、そこを10ドット突き抜けてしまうって事がおきる。

 

上キーで進む↓

if (Input.GetKey(KeyCode.UpArrow)) // 上キーで前に動く
{
this.transform.Translate(Vector3.forward * Time.deltaTime * movespeed);
}

 

ちなみにTime.deltaTimeを掛けてるのは、とりあえず毎フレームの時間差を見てる?みたいな感じ(違うかも)

これを使うことでPC性能差でフレーム経過が違って移動速度や変数カウントを正確な秒数で再現できる。

speedは移動速度変数で任意で指定。

 

2.リジットボディに物理的に力を加える

座標書き換えに対して、こっちは実際に物体を押すって感じ。

ボールを転がしたり、キューブをゴリゴリ押す感じで地面との摩擦も考慮されるようになる。

座標書き換えに対して物理的な当たり判定はしっかり行われる・・・らしい。

こっちはあんまりまだ使えてない。

(超スピードで物理的に押す事が今のところ無い)

 

回転

回転は今の自分だと回転角度指定しか分からん。

これは座標書き換えと同じやり方だと思うけど、今はこれだけ使ってる。

transform.Rotate(new Vector3(x, y, z));

カッコ内のx,y,zは回転軸と回転速度の指定になる。

自分が実際に移動で使ってるのは↓

transform.Rotate(new Vector3(0, -rSpeed, 0));

キャラを左右に回転させたいので、xとzはゼロ。

y軸中心に変数rSpeedで指定した分の速度で回転。

 

左右キーで移動↓

if (Input.GetKey(KeyCode.LeftArrow)) // 左キーで左回転
{
transform.Rotate(new Vector3(0, -rspeed, 0));
}


if (Input.GetKey(KeyCode.RightArrow)) // 右キーで右回転
{
transform.Rotate(new Vector3(0, rspeed, 0));
}

 

上に書いた記述を広げるだけで全周囲360°に回転できるけど、自動で動く物体の回転方向指定とかはまだできてない。

イメージとしてはホーミングミサイルとか。

sin,cos出てくるよね。

Tonyu時代は利用してたんだけど、改めて使おうとすると分からなくなってる。