はりうすブログ (のすけのメモ)

湘南にある小さな会社 代表 ”のすけ”のブログです

【Unity道場1】座標を移動させる方法:問題文つき (Transformコンポーネント)

Unityの書籍を使っていくつかゲームを作った後に気付きました。


何も身についてねぇーーー!

本見ないと何にもできねxあーーー!


ということで、基本に立ち返って、ゲームを作る前にGameObjctの操作方法を

C#スクリプトレベルで覚え直すことにしました。


まず、1つ目!! Transformコンポーネント

問題1:ゲームオブジェクトのx座標を一定毎に増やせ

ゲームオブジェクトのx座標を一定毎に増やせ

解答例

using UnityEngine;

public class Test : MonoBehaviour
{
  Transform t;

  void Start()
  {
    t = this.gameObject.GetComponent<Transform>();
  }

  // Update is called once per frame
  void Update()
  {
    Vector3 pos = t.position;
    pos.x += 0.1f;
    t.position = pos;
  }
}

まず、取得したいゲームオブジェクトにこのTestスクリプトがAdd Componentされている前提です。

t = this.gameObject.GetComponent<Transform>();

この部分は、正確に書いたバージョンで、よく他の説明ページではより簡易的に

t = this.transform;

とか,さらにthisすら省略して

t = transform;

と書いている場合もありますが、こちらでもOK。だた、より内部構造を意識してプログラミングするなら前者の方がいいかと思います。


後、Update部の部分ですが

t.position.x += 0.1f

でもいいんじゃ。と思いがちですが、これだと動きません。

一度Vector3に入れて上げて、座標を修正し、元に戻すというような手順が必要

 Vector3 pos = t.position;
    pos.x += 0.1f;
    t.position = pos;

問題2:ゲームオブジェクトのx座標を軸に回転させよ

ゲームオブジェクトのx座標を軸に回転させよ

解答例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test2 : MonoBehaviour
{
  Transform v;

  void Start()
  {
    v = this.gameObject.GetComponent<Transform>();
  }

  // Update is called once per frame
  void Update()
  {
    Quaternion rot = v.rotation;
    rot.x += 0.01f;
    v.rotation = rot;
  }
}


問題1との違いはVector3かQuaternionかの違いです。

あとはあんまり変わりません。


ちなみに、Quaternioは180が最大値なのでこのプログラムだと180まで行くと回転がとまります。

問題3:ゲームオブジェクトのx座標成分に大きさを変えよ!

ゲームオブジェクトのx座標成分に大きさを変えよ!

解答例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test3 : MonoBehaviour
{
  Transform v;

  void Start()
  {
    v = this.gameObject.GetComponent<Transform>();
    Debug.Log(v);
  }

  // Update is called once per frame
  void Update()
  {
    Vector3 s = v.localScale;
    s.x += 0.01f;
    v.localScale = s;
  }
}


Unity2020入門

Unity2020入門