0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

『Unity C# 個人用メモ』 WASDや矢印キーでオブジェクトの位置を動かす

Last updated at Posted at 2020-02-21

自分用メモであり同じような初心者の方へ向けた自分なりの解説
名称がちゃんとあっているのかどうかは正直わかりませn

WASDや矢印キーを入力をしたときに移動させる

適当に作ったゲームオブジェクトにRigidbodyコンポーネントを追加してから
以下の様にスクリプトを書く

public class NewBehaviourScript : MonoBehaviour
{
    //Rigidbody型のrbという変数を作る
    private Rigidbody rb;

    //float型のpowerという変数を作り、3fを代入する
    private float power = 3f;

    private void Start()
    {
        //リジットボディを取得しrbに代入する
        rb = GetComponent<Rigidbody>();
    }

    void Update()
    {
        //キー入力による値を代入(解説は後で
        float x = Input.GetAxisRaw("Horizontal");
        float z = Input.GetAxisRaw("Vertical");

        //↑で代入された値をVector3型のIdouHoukouという変数に代入する
        Vector3 IdouHoukou = new Vector3(x, 0, z);

        //rbに力を加える
        //velocityは質量などの物理演算を無視するときに使う
        rb.velocity = IdouHoukou * power;

        //rbの回転をさせない様にする
        rb.constraints = RigidbodyConstraints.FreezeRotation;

        //移動範囲の制限
        transform.position = new Vector3(
            Mathf.Clamp(transform.position.x, -5f, 5f),
            Mathf.Clamp(transform.position.y,1f,1f),
         Mathf.Clamp(transform.position.z, 5f, 5f));
    }
}

これでWASDや矢印キーを入力したときに移動が出来るようになります

解説コーナー

入力受付

Input.GetAxisRaw("Horizontal");
Input.GetAxisRaw("Vertical");

Input.GetAxisRaw
とは入力された物に対してint型(整数)で-1~1を返す
HorizontalA,D,がUnityに初期設定として登録されており、
Aが入力されている時は-1
何も入力されていない時は0
Dが入力されている時はを返す

同じようにVerticalは、
sが入力されている時は-1
何も入力されていない時は0
wが入力されている時はを返す

つまり先ほど書いた以下の

Vector3 idou = new Vector3(x, 0, z);

new Vector3(x, 0, z)このx部分とz部分に-1,0,1が代入される

動かす

rb.velocity = idou * speed;

とあるので
xの値が-1ならx(-1)*speed(3f)となりx軸-3fの力を加える
xの値が0ならx(0)*speed(3f)となりx軸0の力を加える
xの値が1ならx(1)*speed(3f)となりx軸3fの力を加える
ということになる
y軸も同じ考えなので割愛

転がらないようにする

rb.constraints = RigidbodyConstraints.FreezeRotation;

こちらはゲームオブジェクトのインスペクタ内の
Rigidbodyコンポーネントの下部にある
constraintsという項目の2段目にある
回転するかどうかのチェックマークをスクリプト上でつけているだけなので
チェックマークを付けた場合は記入しなくても問題はありません。(てかチェック付けた方が楽)

移動範囲に制限をつける

transform.position = new Vector3(
            Mathf.Clamp(transform.position.x, -5f, 5f),
            Mathf.Clamp(transform.position.y,1f,1f),
         Mathf.Clamp(transform.position.z, -5f, 5f));

Mathf.Clamp(対象,最小値,最大値)を使用することで
簡単にtransform.positionMathf.Clamp()内の範囲以上には移動できなくなるという処理が作れます
使わない場合

        if (transform.position.x >= -5f)
        {
            transform.position = new Vector3(-5f, transform.position.y, transform.position.z);
        }

こんな感じの物をx,y,zそれぞれ2パターンで合計6回も書くことになるのでMathf.Clampは偉大です

以上

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?