Unityメモ

Unityで学んだことをメモするやつ

Inputで入力を取得する

InputはInputManagerで設定した値を取得したりする時に使用します。

docs.unity3d.com

InputManagerはEdit > Project Settings > Inputの中にあります。 f:id:nullkun0803:20180410134225p:plain

中には色々と、入力軸が用意されています。 f:id:nullkun0803:20180410135644p:plain

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での記述ができなくなっているようです。

corevale.com

なのでちょっと先に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 () {
        
    }
}

最初に出てくるコードの謎はこちらから理解しました。

qiita.com

現在のバージョン(Unity 2017.4.0f1)では以下のように

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

System.CollectionsSystem.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 - オブジェクト・スケール

オブジェクトの基本

オブジェクトは形を表現する
色やテクスチャ、質感、跳ね方などをMaterialが管理している
Assets内にMaterialを作りそれをObjectにアサインする形で使う
 

Rigidbodyを使う

RigidBodyはObjectのComponentで追加をする
Objectの反発係数はMaterialで設定する。 =  PysicsMaterial

GameObjectを階層化する

階層化することで親子関係を作ることができる
空のGameObjectを作って、Objectをまとめることができる
Pivotは親要素を中心として操作する。
Centerは全要素の中心点を基準に操作する。

Prefab化する

Prefab化すると、同じObjectを一括で変更できる
ObjectをAssetsにドラッグ&ドロップでPrefab化できる
共通の形をいっぱい作りたいとかに有効
 
 
ひとまずこんなものが作れました。
f:id:nullkun0803:20180403181640g:plain
 
結構これだけでも楽しいですね。

初めてのUnity

Unityに触れてみようと思って色々調べたので、有益そうなことはここにメモしていこうと思います。

 

まずはとりあえず以下を読みこなすのが良さそう。

docs.unity3d.com

 

チュートリアルはこれをとりあえずやってみます。

www.atmarkit.co.jp