Unityでオブジェクトの移動をする
オブジェクトの移動
フレーム単位での移動
Unityで一番最初に書く人も多いであろうオブジェクトの移動スクリプト。
x方向に動かしたい場合について考えていこうと思う。
書くとしたらこんな感じだろうか?
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Move : MonoBehaviour { // 変化量 public float dx; void Update() { // dxは任意の値 this.transform.position += new Vector3(dx, 0, 0); } }
これで毎フレーム(dx, 0, 0)の値だけ座標が加算されていく。
this.transform.positionはこのスクリプトが貼り付いてるオブジェクトの
座標(x, y, z)のこと。そこに変化量を加えていく感じ。
Update関数はフレーム毎更新だからFPS(1秒毎の画面の更新回数)の値次第で移動速度が変わって見えてしまう!
つまり処理が遅いと遅く移動しているように見える。処理が早いときはその逆。
できれば等速直線運動してほしいよね~?って人は次の項目へ。
時間単位での移動
等速直線運動の式は距離x、速さv、時間tとするとき
x = v * t
が成り立ってるのは既知だと思われる。
(きのしたのはげおやじ、って覚えたよね?)
これをスクリプトにしたいとき、
x = オブジェクトの位置
v = 任意の速度
t = 経過時間
を設定してあげればいいな~ってことで
書こう。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Move : MonoBehaviour { // 変化量 public float dx; void Update() { // dxは任意の値 this.transform.position += new Vector3(dx * Time.deltaTime, 0, 0); } }
Time.deltaTimeは1フレーム前からの経過時間を表してくれているから
変化量 * 時間の形にすることができた。
これで時間単位で移動してくれるようになる。
変化量dxの変更
変化量dxはpublicな変数だから、Inspector上からも数値を代入できる。
Moveスクリプトに表示されているdxに任意の値を入力したらそれが変化量になる。
なんかブログ始めてみた(適当)
ブログとかやったことが無いから書き方がわからん!
色々調べた結果、ソースコードは
>|言語名|と||<で囲んで記述すれば下のようになることがわかった。
お馴染みのハローワールド #include <stdio.h> int main(void){ printf("Hello World!!\n"); return 0; }
シンタックスハイライトまで付いてくれるなんてすごいな~(小並感)
画像の挿入も簡単そうだし、試しに今Unityで作ってる音ゲーのゲーム画面でも貼ってみる。
タイトルは「BeatCluster」。
チュウ○ズムじゃないです。
作り始めた頃から記事書いてれば遡って書く必要もなかったのになあと思いつつ、
せっかくだし記事に残して形にしたいな~とか。
なんで音ゲー?
数あるゲームのジャンルの中で音ゲーを選択した理由
人間みたいな3Dモデルがなくて楽!モーション書かなくていいから楽!ストーリーがないから楽!- 音ゲーが好き(そんなに上手くはない)
思い浮かぶのがこれくらいかな~
楽っていうのは個人で作るって意味だからね勘違い✖!
やっていくこと
- 躓いたところとその解決策
- 実装したいことのメモ
- etc
同じようなことで躓いてる人が検索してヒットしてこのブログ見てくれたらいいなー
ぐらいの気持ちで書いていこうかな。
Unity楽しいよUnity