デジタルフロッグ

Unityのアプリの開発をしながらいろいろと忘れないための備忘録でございます。

Gitのコマンドってどこから書くの?

これ本当に全然わからなかったんです。

本当。

全然わからなくてコマンドなんてもう知らん!とか思ってました。

ええ。

先日教わってきましたよ!

f:id:karaagedigital:20160904150000p:plain

ここですって。

Git Bashですって奥さん。

f:id:karaagedigital:20160904150403p:plain

こんな画面です。

コマンドプロンプトで最初打とうと思ってたんです自分。

こんなにすぐ見つかるなんて。

 

ちなみによく使うコマンドをざっくり載せておきます。

 

●ブランチ作成
git branch ブランチ名

●ブランチの移動
git checkout ブランチ名

●マージ
git merge ブランチ名

●プル
git pull

 

プッシュしたりコミットしたりはTortoisegitから行ったりプルリクとかもBitbucketから送ってます。なんだか色々あるみたいでこの辺はこちらからご覧ください。

 

qiita.com

Instantiateで生成したオブジェクトに値を渡す 生成したオブジェクトの親子関係

こんばんにちは!

毎日楽しくUnityをさわれていますが、やっぱりゲームはやってるのも楽しいもので休みの日は一日気が付いたらゲームだけして終わってるという事も多々あります。

さて、今回はInstantiateでオブジェクトを生成した場合にそのオブジェクトに値を渡すやり方を紹介したいと思います。

新しいProjectでもシーンでもいいので開いていただいてまずUIのImageを選択して下さい。

f:id:karaagedigital:20160904140438p:plain

白い四角イメージが出来たのでとりあえずそれでOKです。そいつをプレハブ化しちゃいましょう。

 

f:id:karaagedigital:20160904140825p:plain

次に空のオブジェクトを作りましょう。

f:id:karaagedigital:20160904140949p:plain

作ったからのオブジェクトにhogehogeという名前で新しいスクリプトを作成します。

f:id:karaagedigital:20160904141223p:plain

ごめんなさい忘れてました!HierarchyのImageを右クリックしてUI→Textを選択して子オブジェクトにTextを入れておいてください。

f:id:karaagedigital:20160904141825p:plain

TextのInspectorはこんな感じに

f:id:karaagedigital:20160904141845p:plain

Imageのプレハブを更新する為にImageのInspectorからApplyボタンを押してプレハブを更新しておいてください。

それではhogehogeのスクリプトを書いていきます。

 

using UnityEngine;

using System.Collections;
using UnityEngine.UI;

public class hogehoge : MonoBehaviour {
    public GameObject pref;
    public GameObject canvasObj;
    public void hogehogeButton(){
        GameObject obj = (GameObject)Instantiate (pref);
        obj.transform.FindChild ("Text").gameObject.GetComponent<Text>().text = "abc";
        obj.transform.SetParent (canvasObj.transform, false);

        iTween.MoveTo (obj.gameObject, iTween.Hash ("y",1000.0f,"time",2.0f));
    }

}

 

f:id:karaagedigital:20160904142829p:plain

canvasObjeにCanvasをprefにはプレハブのImageを突っ込んでください。

最後にCreateからUI→Buttonを選択してButtonを作って下さい。

作ったらInspectorの下の方からOn Click()の+を選択して、Inspectorのhogehoge.csが入ったGameObjectを選択し右のプルダウンからhogehogeButtonを選択して下さい。

f:id:karaagedigital:20160904143118p:plain

InspectorのImageのアクティブは非アクティブにして、ゲームをスタートさせてみましょう。

ボタンを押すとイメージが作られてイメージの中のテキストの中身がスクリプトの中で指定した abc になっていると思います。

これでInstantiateで作られたオブジェクトの中のTextに値を渡せている事がわかると思います。

f:id:karaagedigital:20160904143902g:plain

iTweenを使ったのは作ったものが上に重なるとわかりづらいと思って使ってるだけなので、別に今回の題材には必要ないのでスクリプトから消しちゃっても構いません。

 

Canvasの子オブジェクトに生成することもついでにやっちゃいましたが、わかりましたでしょうか?ボタンを押すと次々に生成されていき、生成された子オブジェクトのテキストの中身が変更されているのがわかると思います。

C# if文 部分一致していたら

パパッとこれについて書いてる人がいなくてちょっと探しました。

VBをよく使っていたのでVBならInStr関数があったのですが、どうもC#では使えないという事でどうしようかと思ってましたが、それっぽいのがあったので自分用に残しておきます。

 

if (string1.IndexOf(string2) == 0) {
 //string1の中にstring2が入っている場合
} else {

 //string1の中にstring2が入ってない場合

}

 

入ってない場合は-1を返します。そういえば先日久しぶりに勉強会なるものに行ってきましたが、やっぱりいいものですね。自分ひとりでこもって作っていると迷走するときが多々あるので、他人との交流というのはたまには取らなければと再認識しました(´・ω・`)頑張っていきましょうー!

タッチした位置にオブジェクトを移動させる C#

ひとつ前の記事に書いたのですが、わりと需要ありそうなので別記事で一応立てておきました。

Tweenを使うとたったのこれだけで移動出来ちゃう。

今回2DなのでカメラはOrthographicにしておいてください

[SerializeField] GameObject a;

// Update is called once per frame
void Update () {
 if (Input.GetMouseButtonDown(0)) {
 Vector3 aTapPoint = Camera.main.ScreenToWorldPoint(Input.mousePosition);
 iTween.MoveTo (a.gameObject,iTween.Hash("x",aTapPoint.x,"y",aTapPoint.y,"time",1.0f));
 }
}

 

このaに動かしたいオブジェクトを突っ込むと、クリックした位置に1秒で移動するという動きを行います。

f:id:karaagedigital:20160901115224p:plain

f:id:karaagedigital:20160901113805g:plain

動き方に関してはeaseType一覧をこちらで確認下さい。

karaagedigital.hatenablog.jp

Unityで使うマウス判定、スマホタッチ判定のスクリプト

今日はiTweenを離れて?マウスとスマホのタッチについてです。

マウスのクリック判定とスマホのタッチ操作といってもスマホだとタッチの判定なので、スマホゲームを作られる方も必ず通る道だと思われます。

ざっくりとマウス操作のスクリプトを書いてみます。

※CameraのProjectionをOrthographicにしておいてください

if (Input.GetMouseButton(0)) {
 //左ボタンが押されている
}
if (Input.GetMouseButton(1)) {
 //右ボタンが押されている
}
if (Input.GetMouseButtonDown(0)) {
 //左ボタンが押された
}
if (Input.GetMouseButtonDown(1)) {
 //右ボタンが押された
}

if (Input.GetMouseButtonUp(0)) {
 //左ボタンが押された
}
if (Input.GetMouseButtonUp(1)) {
 //右ボタンが押された
}

とりあえずこんなところだと思います。ただ、これだけじゃクリックをしても何をクリックしているかわかりません。

という事で必要になってくるのがColliderです。

空のオブジェクトを作ってC#を追加して下記のスクリプトをvoid Start()の中に書いてみて下さい。

if (Input.GetMouseButtonDown(0)) {
 Vector3 aTapPoint = Camera.main.ScreenToWorldPoint(Input.mousePosition);

 Collider2D aCollider2d = Physics2D.OverlapPoint(aTapPoint);

 if (aCollider2d) {
  GameObject obj = aCollider2d.transform.gameObject;
  Debug.Log(obj.name);
 }
}

そのあとに2DのSpriteを準備しましょう。

f:id:karaagedigital:20160901111018p:plain

追加したSpriteのInspectorからAdd Componentボタン→Box Collider2Dを選択して追加しましょう。追加すると下記の画像のように緑の枠が現れます。この緑の枠はColliderのサイズなのでInspectorからSizeを変更すると緑の枠も拡大縮小します。

f:id:karaagedigital:20160901111004p:plain

実際に再生してSpriteをクリックしてみましょう。

f:id:karaagedigital:20160901111859p:plain

こんな感じでコンソールにクリックしたオブジェクトの名前が取得されます。

ちなみに・・・

 

[SerializeField] GameObject a;

// Update is called once per frame
void Update () {
 if (Input.GetMouseButtonDown(0)) {
 Vector3 aTapPoint = Camera.main.ScreenToWorldPoint(Input.mousePosition);
 iTween.MoveTo (a.gameObject,iTween.Hash("x",aTapPoint.x,"y",aTapPoint.y,"time",1.0f));
 }
}

 

このaに動かしたいオブジェクトを突っ込むと、クリックした位置に1秒で移動するという動きを行います。

Tweenを離れると言っておいてまた使ってしまった…

f:id:karaagedigital:20160901113805g:plain

iTweenを使った動的なメニューの表示

最近はiTweenの事ばかりやっていてゲームなるものを全く作っていません。

でもこういう積み重ねが面白いゲームを作るうえでは必要だと考えてはいますがどうでしょう(´・ω・`)

それではiTweenを使って今回もざっとやっていきたいと思います。

f:id:karaagedigital:20160827140801p:plain

Menuの作成

まず最初にCanvasでPanelを準備します。

f:id:karaagedigital:20160831111420p:plain

PanelのImageには適当に背景をぶっこみました。

karaagedigital.hatenablog.jp

アニメーションの遷移でも使った背景を使ってます。

その次に再びCreateからUI→Buttonを選択しMenuボタンを作成し、Create→UI→ImageからImageを作成してCntr+Dで6つほどコピーしました。

それぞれに適当にボタンっぽい画像をImageに突っ込みRectTransfromのPosYを画面外に出るまで下に下げます。

スクリプトをガリガリ書いてみる

次にButtonにスクリプトを追加しました。名前は今回はわかりやすいように

iTweenMenuという名前でやってます。

それではスクリプトです。ガリガリというほどありません。

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

public class iTweenMenu : MonoBehaviour {
[SerializeField] List<Image> B = new List<Image>();
bool Menu;
void Start(){
Menu = false;
}
public void ButtonClick(){
 if (!Menu) {
  Menu = true;
  iTween.MoveTo (B [0].gameObject, iTween.Hash ("y", 80, "time", 1.0f, "delay", 0f));
  iTween.MoveTo (B [1].gameObject, iTween.Hash ("y", 220, "time", 1.0f, "delay", 0.2f));
  iTween.MoveTo (B [2].gameObject, iTween.Hash ("y", 370, "time", 1.0f, "delay", 0.4f));
  iTween.MoveTo (B [3].gameObject, iTween.Hash ("y", 520, "time", 1.0f, "delay", 0.6f));
  iTween.MoveTo (B [4].gameObject, iTween.Hash ("y", 670, "time", 1.0f, "delay", 0.8f));
  iTween.MoveTo (B [5].gameObject, iTween.Hash ("y", 820, "time", 1.0f, "delay", 1.0f));
  iTween.MoveTo (B [6].gameObject, iTween.Hash ("y", 970, "time", 1.0f, "delay", 1.2f));
 } else {
  Menu = false;
  iTween.MoveTo (B [0].gameObject, iTween.Hash ("y", -500, "time", 1.0f));
  iTween.MoveTo (B [1].gameObject, iTween.Hash ("y", -500, "time", 1.0f));
  iTween.MoveTo (B [2].gameObject, iTween.Hash ("y", -500, "time", 1.0f));
  iTween.MoveTo (B [3].gameObject, iTween.Hash ("y", -500, "time", 1.0f));
  iTween.MoveTo (B [4].gameObject, iTween.Hash ("y", -500, "time", 1.0f));
  iTween.MoveTo (B [5].gameObject, iTween.Hash ("y", -500, "time", 1.0f));
  iTween.MoveTo (B [6].gameObject, iTween.Hash ("y", -500, "time", 1.0f));
 }
}
}

 

using UnityEngine.UI;

UIを使う際には必要です。もう魔法の言葉的な感じなのでとにかく必要だと覚えておきましょう。
using System.Collections.Generic;

 

Listを使う際に必要です。これも魔法の言葉的な感じなのでとにかく必要だと覚えておきましょう。

スクリプトを保存するとInspectorのI Tween MenuにはB SizeとあるのでSizeを7にします。

そうするとElement0~6まで展開されので最初に作成したImageをそれぞれ突っ込んでいきます。

 

f:id:karaagedigital:20160831111910p:plain

最後にOn Click()のところにiTweenMenuのスクリプトが格納されたButtonオブジェクトを突っ込んでiTweenMenuのButtonClickを選択して下さい。

そうるするとボタンを押すとiTweenMenu内のButtonClick()内のスクリプトを実行します。

f:id:karaagedigital:20160831112612g:plain

クリックすると順にしたから出て来て、もう一度押すと引っ込んでいく動きが出来ました。

メニューボタンを押していきなりメニューボタンがパッと出てくるよりも視覚的にメニューがズズズッと出てくるだけでなんだか作りこまれているように見えてきますね。

パパッとmenuだせよ!と思う人もいるのでまあその辺は…timeを縮めるなどしましょうか(´・ω・`)

ちなみにスクリプトはわかりやすいように列を揃えてますが、Tabが使えなくてスペースを使っているのでそのままコピペするとエラーが出るのでお気を付けください。

iTweenを使った動き

よくあるカードゲームやトランプなど、配られるような動きを作ってみたいと思います。

あくまで今回作るものはiTweenを使ってみてこういう動きも出来ますよというものであって完成形ではありません。

それでは最初にどういう動きをしているかを見てみましょう。

f:id:karaagedigital:20160830163409g:plain

カードを配るというボタンを押すことによってカードが右中央にある山札から回転しながら手札に揃います。

この動きはiTweenを使って再現してみました。以下がスクリプトです。

 

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class CardButton : MonoBehaviour {
[SerializeField] GameObject Cube;
[SerializeField] Text card;
public static int c = 0;
// Use this for initialization
public void ButtonClick(){
  c += 1;
  card.text = "×" + c.ToString();
  Instantiate (Cube);
  }
}

 

最初にボタンの方のスクリプトですが、右下にあるカードの枚数のテキストをこちらで制御し、何枚手札にあるかもこちらのボタンで管理しています。カードはプレハブ化しておき、ボタンがクリックされるたびに生成されます。

次にカードの方のスクリプトです。

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class Tweentest : MonoBehaviour {
int c;
void Start(){
c = 0;
c = CardButton.c;
iTween.MoveTo(gameObject,iTween.Hash(
  "x",4.5f - c * 1.5f,
  "y",-4,
  "time",0.2f,
  "easeType",iTween.EaseType.linear
));
iTween.RotateTo(gameObject,iTween.Hash(
  "z",90,
  "y",180,
  "time",0.1f,
  "easeType",iTween.EaseType.linear
));
}

}

カードの方はCardButtonの方から変数cを取得し、現在何枚目なのかを理解させて枚数に応じて着地点を少しずつずらしていきます。

こうする事でクリックするたびに等間隔開けた状態でカードが配られることになります。

他にもたくさん簡単なやり方はあるかもしれませんが、ゲームしながらこの動きでいいか。とパパッと思いついた動きを載せてみました。