(1)3Dカメラを方向キーで操作するの実験
ヤルこと:今回は移動のみで、「transform」「Vector3」「Rigidbody」での違いを体感してみる。
(1)-①「transform」(transform.Translate)版
▲現在のオブジェクトの位置を基準にして移動
void Update()
{
//キー入力があったら、カメラ位置を更新する
//キー入力(上_Y軸+)
if (Input.GetKey(KeyCode.UpArrow))
{
this.transform.Translate(0f, 0.1f, 0f);
}
//キー入力(下_Y軸-)
if (Input.GetKey(KeyCode.DownArrow))
{
this.transform.Translate(0f, -0.1f, 0f);
}
//キー入力(左_X軸+)
if (Input.GetKey(KeyCode.LeftArrow))
{
this.transform.Translate(-0.1f, 0f, 0f);
}
//キー入力(右_X軸-)
if (Input.GetKey(KeyCode.RightArrow))
{
//Vector3宣言せずに通るのが謎だったのでVector3を利用した形をテスト
Vector3 rightArrow = new Vector3(0.1f, 0f, 0f);
//この形しか通らない?
this.transform.Translate(rightArrow);
}
//キー入力(右_Z軸+)
if (Input.GetKey(KeyCode.W))
{
this.transform.Translate(0, 0f, 0.1f);
}
//キー入力(右_Z軸-)
if (Input.GetKey(KeyCode.S))
{
this.transform.Translate(0f, 0f, -0.1f);
}
}
(1)-②「transform」(transform.position)版
▲指定した場所へワープさせるのに使う
if (Input.GetKeyDown(KeyCode.UpArrow))
{
Vector3 posItion = this.gameObject.transform.position;
this.gameObject.transform.position = new Vector3(posItion.x , posItion.y + 1.0f, posItion.z);
//👆2:移動量を毎回更新する
Debug.Log(posItion);
/*this.gameObject.transform.position = new Vector3(posItion.x, posItion.y + 1.0f, posItion.z);「だけ」だと、毎回(0,0,0)
■なんで無いと毎回(0,0,0)その際、Vector3 posItion = this.gameObject.transform.position;はvoid Startに記載した。
→なんとなく、Updateに書かないと毎回更新されないからかな?*/
}
見た目ほぼ一緒なので、Vector3を毎回宣言して更新するのが「transform.position」は、面倒くさいくらいの違いかな?
if (Input.GetKeyDown(KeyCode.UpArrow))
{
//Vector3宣言 + posItion変数にtransformコンポーネントを取得
Vector3 posItion = this.gameObject.transform.position;
Debug.Log(posItion);
this.gameObject.transform.position = new Vector3(0f, 10f, 0f);
Debug.Log(gameObject.transform.position);
//posItionの値は更新されない
Debug.Log(posItion);
}
※上は更新されて、どんどん上昇する、下は1回ポッキリの書き方。
(1)-③Vector3 を使わなくてもtransform.upとかも上昇してくれる。
if (Input.GetKey("up"))
{
transform.position += transform.up * 1f * Time.deltaTime;
}
②はVecter3な気がするけど。
ここまでのまとめ(覚えたこと)
・transform.Translate(0f, 0.1f, 0f);は今いる位置から、XYZの動かしたい方向の値を入力して使う。【Vector3不要】
・transform.positionは指定した場所へワープさせるのに使う
・Vector3は直接更新出来ない。Vector3変数にtransformを1回入れて、そのtransformを新しい移動用newVector3で更新するややこしい作り
・transform.positionにtransform.upなどで更新することもできる【Vector3不要】
(2)「Vector3」の研究 Vector3.MoveTowards
Vector3 direction = new Vector3(10f, 10f, 10f);
float speed = 1.0f;
void Start()
{
}
// Update is called once per frame
void Update()
{
float step = speed * Time.deltaTime;
transform.position = Vector3.MoveTowards(transform.position, direction, step);
Debug.Log(transform.position);
//追尾(移動)したいオブジェクトのポジション = Vector3.MoveTowards(追尾(移動)したいオブジェクトのポジション, ターゲットのポジション, 移動速度)
}
ここまでのまとめ(覚えたこと)
・Vector3(この場合direction)でターゲットポジションを設定するとそこに向かって移動を開始する。
・カメラが追尾(移動)したいオブジェクトで
・Vector3 directionがターゲットのポジション
・ 移動速度はspeed変数にTime.deltaTimeをかけて均一の速度を提供
(3)「Vector3」の研究 Rigidbody.AddForceでカメラを動かす
Rigidbody takaRb;
void Start()
{
//takaRbに、リジッドボディを取得
takaRb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
//横と縦方向に-1から1までの数値を返す
float takaX = Input.GetAxis("Horizontal");
float takaY = Input.GetAxis("Vertical");
//入力した分の力を加える
takaRb.AddForce(takaX, takaY, 0);
}
ぬるっと動く。
それでspeedをかけるのか。。
Z方向も、Input.GetAxis("Vertical");で作るのかな?
→Z方向作ると、斜めに移動する
上下左右、奥手前左右に制限されるのか?違うのがあるのか?
ここまでのまとめ(覚えたこと)
・Rigidbodyでもカメラは動く
・ただ、4方向だけっぽい
・Input.GetAxisは-1から1までの数値を返してくれる
・speed変数を設定して、takaXとかに掛けてやると「ぬるっと」が「きりっと」になる予定
参考サイト
【Unity】オブジェクトを移動させる方法まとめ「Translate, Rigidbody, Vector3」
【Unity基礎】transformを変更してオブジェクトを移動させる2つの方法
【Unity(C#)】ゲームオブジェクトを追尾する(MoveToWards)
Author And Source
この問題について((1)3Dカメラを方向キーで操作するの実験), 我々は、より多くの情報をここで見つけました https://qiita.com/egiheiIsono/items/a910ea478cb860701321著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .