Inputで入力を取得する
InputはInputManagerで設定した値を取得したりする時に使用します。
InputManagerはEdit > Project Settings > Inputの中にあります。
中には色々と、入力軸が用意されています。
Jump
にはspaceキーがもともと設定してありますが、色々と変更することも可能です。
入力の詳しい内容はこちらをご覧ください。
Unity - マニュアル: 一般的なゲーム入力
ボタンが押されたかどうかの判定は以下の関数で判定することができます。
関数名 | 内容 |
---|---|
GetButton | buttonName で識別される仮想ボタンを押している間 true を返します |
GetButtonDown | buttonName で識別される仮想ボタンを押したフレームの間だけ true を返します。 |
GetButtonUp | buttonName によって識別される仮想ボタンを離したフレームの間だけ true を返します |
以下の例はJumpが押された時にconsoleにメッセージを表示します。
//ボタンが押されて離した時に表示する if(Input.GetButtonUp("Jump")){ Debug.Log("ジャンプ"); }
また左右、上下の移動など、移動する値を取得したい際は以下の関数を使います。
関数名 | 内容 |
---|---|
GetAxis | axisName で識別される仮想軸の値を返します |
こちらが矢印キーを押して、移動する例です。
//Input.GetAxis: 数値を-1〜1の間で取得する float x = Input.GetAxis("Horizontal"); //横方向 -1 ~ 1が帰ってくる float z = Input.GetAxis("Vertical"); //縦方向 -1 ~ 1が帰ってくる transform.Translate(x * 0.2f, 0, z * 0.2f);
オブジェクトのポジションの変更
JavaScriptのような以下の書き方はC#だと使えないようです。
transform.position.x += 0.1f;
transform.position
に入れる値はVector3
という型に揃えないといけません。
Vector3
はUnityEngine三次元ベクトルを扱うための型です。
Unity - スクリプトリファレンス: Vector3
なので、以下のように動かします。
public class PlayerScript : MonoBehaviour { void Start () { } void Update () { //Vector3という型に一旦値を入れて、計算して入れ直す Vector3 pos = transform.position; pos.x += 0.1f; transform.position = pos; //現在のpositionに値を加えたものを入れ直す Vector3 pos = transform.position; transform.position = new Vector3(pos.x + 0.1f, pos.y, pos.z); //Vector3という値を別に作り、追加する transform.position += new Vector3(0.1f, 0.0f, 0.0f); //transform.Translateを使う transform.Translate(0.1f, 0, 0); } }
どのコードも、xを0.1ずつ移動するというコードです。
もしくはtransform.Translate
を使用する方法があります。
参考URL qiita.com docs.unity3d.com
ドットインストールでの躓き 〜 #Cはじめました
昨日で、ドットインストールのスクリプトを書く前まで終わらせました。
今日からスクリプト書くぞ!と思ったのですがドットインストールの解説動画のバージョンは4.2.0なのですが、最新のものではJavaScriptでの記述ができなくなっているようです。
なのでちょっと先にC#をざっくり勉強しました。こちらがわかりやすかったです。 qiita.com
アセットでスクリプトを作成した時の状態はこんな感じになっております。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class NewBehaviourScript : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { } }
最初に出てくるコードの謎はこちらから理解しました。
現在のバージョン(Unity 2017.4.0f1)では以下のように
using System.Collections; using System.Collections.Generic;
System.Collections
とSystem.Collections.Generic
の2つを定義するようになっていました。
調べたところSystem.Collections
で使用できるコレクションは型の定義が必要ないため、どんな型でも入れることができるが、変数に入れる時などは型変換が必要になってくる。
System.Collections.Generic
は先にコレクションを定義する際に入れることのできる型を指定して置くことができるようです。
以下の2つの記事をみるとわかりやすかったです。
dotnetcsharptips.seesaa.net dotnetcsharptips.seesaa.net
テストでこんな感じのコードをかいてみました。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerScript : MonoBehaviour { string numberType (int val) { if(val % 2 == 1) { return "is Odd"; } else { return "is Even"; } } // Use this for initialization void Start () { Debug.Log(numberType(2)); } // Update is called once per frame void Update () { } }
numberType
というstring型の関数を定義して、実行時に数字を入れると奇数か偶数かを返してくれます。
大体はわかったので、ドットインストールは続けつつ、#Cに置き換えながら進めていきたいと思います。
ドットインストールはじめました
前回行っていたあの記事だと結構、理解するのが大変そうだったので、結局ドットインストールを使うことにしました。
Unity入門 (全26回) - プログラミングならドットインストール
https://dotinstall.com/lessons/basic_unity
とりあえずコード書く前まで完了しました。やったらなんとなく概要はつかめた気がする
ざっくりメモだけ残しておきます。
Unityの概念
- Project = Game
-
- Scene - オブジェクトを置く場所
-
- GameObject - Scene状に置くもの
-
- Component - Objectのパラメータを変更するもの・いろんな種類がある
- Assets - 共通の部品
操作ボタンのショートカット
- Q - 視点移動
-
- optionを押しながら - 視点回転
- controllを押しながら - 視点拡大
- W - オブジェクト・移動
- E - オブジェクト・回転
- R - オブジェクト・スケール