LemonteaのUnity部屋

LemonteaのUnity部屋

Unityの使い方とかです~

VisualStudioのスニペットでスクリプトを書く手間を端折る!

こんにちは。レモンティーです。

スクリプトを書いていると、何度も同じ構文をかくことがあります。
大体はVisualStudioの補完機能のおかげでそれほど苦にはなりませんが…

中には面倒な輩もいます。

そこで今回は、スクリプトを書く手間を端折る方法を調べました。

その結果、スニペットという便利な機能が見つかったので紹介します。

そもそもスニペットとは…

プログラムの辞書登録のようなものです。
たとえばswitchと入力してTabキーを二回押すと、

switch (switch_on)
        {
            default:
        }

と勝手にテンプレを書いてくれる機能です。

string絡みだと日本語入力してるのでスニペットより
辞書登録で端折ったほうが便利だったりしますが、

スニペットには複数行登録できるという強みがありますので
覚えて損は無いと思います。

既存のもの

VisualStudioでは、はじめから使えるスニペットがあります。
先ほど紹介したswitchなどですね。

↓のサイトに一覧があります。
「名前」の所に書いてある文字を入力してTabキーを二回おせばOKです。

Visual C# のコード スニペット

自作しよう

さて、デフォルト以外にも
自分が「よくつかうな~」と思う物を登録できます。

公式チュートリアルはコチラ
チュートリアル: コード スニペットを作成する


それではVisualStudioを開いて
実際にやっていきます。
(いつもみたいにスクリプトをダブルクリックして開いたので問題ないです)


まず、スニペットを書くファイルを作ります。

ファイル>新規作成>ファイル

f:id:sawalemontea:20170820170114p:plain

スニペットXMLで書いていくので
XMLファイルをダブルクリックします。

f:id:sawalemontea:20170820170423p:plain

こんな画面がでました。

f:id:sawalemontea:20170820170446p:plain

ここに、テンプレを参考に書いていきます。

今回は、switch文をさらに楽に書くため
三個の分岐を登録しておきます。

f:id:sawalemontea:20170820170433p:plain

こんな感じです。

↓コピペ用

<?xml version="1.0" encoding="utf-8"?>
<CodeSnippet Format="1.0.0">
  <Header>
    <Title>switchcase</Title>
    <Shortcut>ca3</Shortcut>
  </Header>
  <Snippet>
    <Code Language="CSharp">
      switch()
      {
        case(0):

         break;
        case(1):

         break;
        case(2):

         break;
      }
    </Code>
  </Snippet>
</CodeSnippet>


<Title>の部分はスニペットの名前です。たいした意味はないです。

<Shortcut>は重要で、呼び出しのための文字列です。
ここの文字を入力してTabキーを二回おすと呼び出されます。
さっきの一覧でいう「名前」にあたります。


<Code Language="CSharp">と </Code>の間にコードを書きます。

これで保存します。
その際、拡張子は.Snippetにします。

f:id:sawalemontea:20170820171849p:plain


あとはこのファイルをインポートすれば使えます。

インポートするには、
ツール>スニペットマネージャーで開いた画面でインポートします。

f:id:sawalemontea:20170820172050p:plain

f:id:sawalemontea:20170820172104p:plain

次の画面で完了をおせば無事インポート終了です。

さっそく試してみましょう。

ca3と入力して、Tabキーを二回押します。

f:id:sawalemontea:20170820173522p:plain

おお~楽ちんですね!

これからよくつかうのが現れたらまた登録しようと思います笑笑

今回はこれでおしまいです。

Unityエラー解決(1) UnityAdsで広告がエラーで読み込めない時

こんにちは。レモンティーです。

UnityAdsで、ちゃんと設定したのに
「エラーで読み込めません」
みたいなエラーがでた時の対処です。

ブログを始めるより前のことで、
エラー文のコピペやスクショが残っていません…

ただ、検索しても日本語の回答がなくて困った記憶があるので書いておきます。

貧相な英語力で読んだどこかの掲示板(?)の書き込みで解決したので
本質を理解しているわけではなく、効率の悪いやり方かもしれません。
それだけ先に断っておきます。

やり方は簡単で

①Project Settingsの中のUnityConnectSetting.assetファイルを削除

②Libraryフォルダを削除

③もう一度はじめからUnityAdsを設定しなおす。


これでなおりました。

初めてのスクリプト(6) GetAxis(Mouse X)でフリックorドラッグ

youtu.be


こんにちは。レモンティーです。

今回は、久々のスクリプト系です。
Input.GetAxis("Mouse X")を使って、マウスの動きを取得します。

フリックやドラッグといえばInput.MousePositionを使うことが多いですが、
その場合はスクリーン座標をワールド座標に変換しないといけません。

その点Mouse X,Mouse Yなら、そのまま使えるので
ひょっとするととっつきやすいかもしれません。

今回はその辺の検証もかねています。



使い方はInput.GetAxis("Vertical")とかと全く同じです。

Input.GetAxis("Mouse X")

これで、X方向のマウスの移動がとれます。

注意すべきは、

そのままだと、マウスをクリックしていなくても判定されること

MouseとX,Yの間に半角スペースが一ついること

くらいです。

動画のはこんなスクリプトです。

void Update () {
        if (Input.anyKey)
        {
            var x = Input.GetAxis("Mouse X");
            var y = Input.GetAxis("Mouse Y");
            var Direction = new Vector3(x, y, 0);
            transform.position += Speed * Direction;
        }
    }

動画のようにどこをタップしてもドラッグする操作ならこれで十分そうですね。

(ちなみに”タップした物体を”ドラッグする方法は最後にリンク張っておきました)



フリックにするなら…

    public float Speed;
    Vector3 Direction;
	void Update () {
        if (Input.GetMouseButton(0))
        {
            var x = Input.GetAxis("Mouse X");
            var y = Input.GetAxis("Mouse Y");
            Direction = new Vector3(x, y, 0);
        }

        if (Input.GetMouseButtonUp(0))
        {
            transform.position += Speed * Direction;
        }
    }

これなら一応フリックになります

しかし、ちょっとコツがいるという糞仕様になります…
(なぞった後、指を離すのが遅いと動かない)


それだったら、素直にInput.mousePositionを使って

public float Speed;
    Vector3 Direction,TapPosSc,TapPosWo;
	
	// Update is called once per frame
	void Update () {
        if (Input.GetMouseButtonDown(0))
        {
            TapPosSc = Input.mousePosition;
            TapPosSc.z = 10;
            TapPosWo = Camera.main.ScreenToWorldPoint(TapPosSc);
        }

        if (Input.GetMouseButtonUp(0))
        {
            TapPosSc = Input.mousePosition;
            TapPosSc.z = 10;
            Direction = Camera.main.ScreenToWorldPoint(TapPosSc);
            Direction -= TapPosWo;
            transform.position += Speed * Direction;
        }
    }

みたいにしたほうがいいかもしれません


これで、今回はおしまいです。



関連
①オブジェクトのタップ判定
②簡単ドラッグ        (②は①の続き)

sawalemounity.hatenablog.com

sawalemounity.hatenablog.com



前回
sawalemounity.hatenablog.com

Unity Clothで簡単にリアルな布の表現~フード付きマント~

youtu.be


こんにちは。レモンティーです。

中二心をくすぐる服といえば、どんなものがあるでしょうか。
私はFF零式をやった影響もあり、フード付きマントが思い浮かびます。

ですが、BlenderでつくったマントをそのままUnityにインポートしても、
当然ヒラヒラしないですよね。これじゃ、変な形のポリバケツです。
全く中二心をくすぐりません。


そこでClothコンポーネントの出番です。

今回はこのサイトを参考に、フード付きマントをつくってみました。

blogs.unity3d.com


Blenderで適当に作ったフード付きマントのモデルをインポートし、
さっそくSkinned Mesh RendererとClothをアタッチ。
Mesh Rendererは削除しました。


とりあえず実行してみます。

f:id:sawalemontea:20170818170016p:plain

あらら…
はじまるやいなやヒューンと落ちて行ってしまいました。
Clothコンポーネントの設定をいじる必要がありそうです。

Use Gravityをオフにしてもいいんですが、
どうせColliderを設定することになるので、頭部にColliderを設定して解決することに。

f:id:sawalemontea:20170818170324p:plain

ここですね。
大きさを決定すると、Colliderが設定できるようになるみたいです。

f:id:sawalemontea:20170818170424p:plain


こんな感じにしました。

f:id:sawalemontea:20170818170449p:plain

選んだのはこのColliderです。

これで実行してみましょう。

f:id:sawalemontea:20170818170528p:plain

落ちなくはなりましたが、まだ変更が必要そうです。

どうも捻りが効きすぎているっぽいので、
Bendingの値を大きくすればよさそうです。

f:id:sawalemontea:20170818170755p:plain


こんな感じにしました。

これで実行してみます。

f:id:sawalemontea:20170818170822p:plain


お、それっぽくなりましたね。

若干ゴミ袋に見えますが、それは元々モデルが薄いのと、
マテリアルがテクスチャ無しの単色なせい…??

というわけで、今回はここまでです。


関連
自作モデルの使用
sawalemounity.hatenablog.com

MakeHuman→Unityでの目のテクスチャの注意~そんな子に設定した覚えはありません!~

こんにちは。レモンティーです。

こんかいはMakeHumanのモデルをUnityで使う際に
やらかした話です。

まずは画像をご覧ください。

f:id:sawalemontea:20170817201703p:plain

おわかり頂けただろうか…

Replay

…は要りませんね。
そうです。目です。

なんだか目のテクスチャの様子がおかしいのです。

最初はMakeHumanのEyesを間違ってNoneとかにしたかも…と思い
MakeHumanに戻って確認しましたが、向こうの設定は正しかったのです…
てかうっすら黒目見えてますからそれはありえないんですが…。

こりゃUnityのほうで間違えたかな、と思い
試しに目のテクスチャを見てみました。

f:id:sawalemontea:20170817202209p:plain

ああ、やっぱりRenderingModeでした

f:id:sawalemontea:20170817202317p:plain

Fadeに直すと…


f:id:sawalemontea:20170817202345p:plain



おお~

無事、イケメンに戻りました。

もしかしたら同じことになってる人がいるかもしれないので
書いておきます。

今回はこれでおしまいです。


関連
モデルの使用
sawalemounity.hatenablog.com

Unity Terrainで大地と海を創る・後編

こんにちは。レモンティーです。

今回は、前回↓の続きです。

sawalemounity.hatenablog.com

予告通り、↓の赤丸のボタン達を解説した後、海を創ります。

f:id:sawalemontea:20170816195255p:plain


まず、一番左のボタンを押してください。

f:id:sawalemontea:20170817085717p:plain

これでTerrainをクリックまたはドラッグすると、
Terrainに起伏をつけることができます。

Opacityが大きいほど、強い起伏がつきます。

下げる場合は、Shiftキーを押しながらクリックまたはドラッグしてください。
(0より低くはなりません)


次に、真ん中のボタンを押してください。

f:id:sawalemontea:20170817090611p:plain

ここでは、Heightに設定した高さに近づけることができます。

ただし、Heightに0以下の値を設定することはできません。
そのため、下げたい場合は全体を引き上げてから下げることになります。

そんな時は、
FlattenをおすとTerrain全域がHeightの高さになるので便利です。

ただし、当然起伏は消えるので作り直しです。


最後に、右のボタンを押してください。

f:id:sawalemontea:20170817091535p:plain

ここでは、高さを変更すると言うよりは、
角をとってなめらかにすることができます。

言ってみれば、やすりがけ です。


これで、Terrainの使い方についてはおわりです。




それではこれから海を創ってみます。

まず、先ほど紹介した「真ん中のボタン」で
全体をひきあげ、海岸にする部分だけ低くします。

次に、昨日紹介したテクスチャ塗りで
低くした部分に砂浜っぽいテクスチャを塗ります。

最後に、水を張ります。
昨日ImportしたStandard Assetには、水の素材も入っているのです。

Standard Asset>Environment>Water>Water4>Prefabs>Water4Advanced です。

f:id:sawalemontea:20170817092823p:plain

これをドラッグしてシーンに配置すれば…

f:id:sawalemontea:20170817092945p:plain


すごいリアルな海が Σ(゜Д゜;)
勝手に波も再現される優れものです!

というわけで今回はこれでおしまいです。


関連

空を創る
sawalemounity.hatenablog.com

Unity Terrainで大地と海をつくる・前編

こんにちは。レモンティーです。

リアルなゲームの舞台を自作したい、と思ったことありませんか?

UnityのTerrainなら、それが簡単に実現できます。

今回は、中でも一番とっつきやすい大自然を作っていきたいと思います。

まず、TerrainをCreateしましょう。
Create>3D Object>Terrainです。

f:id:sawalemontea:20170816195130p:plain

インスペクタに独特のメニューがでてますね。

f:id:sawalemontea:20170816195255p:plain

赤が地形を操作する部分

青が木や草をはやしたり、テクスチャをペイントする部分

黄が大きさなどの設定を弄る部分です。

この色分けごとに機能を説明していきます。
さっそく自然を創っていきましょう!

…とは言っても、木を生やすには木のプレハブがいりますし、
テクスチャを塗り塗りするにはテクスチャがいります。

そこまで自作するのはかなり手間がかかるものです。

なので、Unityの標準装備を使いましょう。
Asset>Import Package>Environment です。

f:id:sawalemontea:20170816195801p:plain

この画面になりますので、そのままImportをクリックします。

f:id:sawalemontea:20170816195940p:plain

これで、必要な素材がImportされました。

Terrainのインスペクターに戻ります。

赤はとばして、まず青丸のボタン達を見ていきます。

筆のようなボタンを押してください。

f:id:sawalemontea:20170816200617p:plain

こんな画面になりますので、
Edit Texture>Add Textureを押して、先ほどインポートしたテクスチャを追加します。

f:id:sawalemontea:20170816200723p:plain

こんな風に、草原のテクスチャを選んで、
Addを押してみましょう。

一面の草原になりましたね。

ここに道を引いてみます。
もう一度Edit Texture>Add Textureを押し、
今度は土っぽいテクスチャを追加します。

f:id:sawalemontea:20170816201319p:plain

こんなかんじです。
選択されているテクスチャは、左側に青いラインがでます。
土っぽいのを選択しましょう。

これで、ペイントでお絵かきするように、
選択したテクスチャをTerrainに塗れます。

Texturesの上にあるBrushesでブラシの形を変えられます。

また、下にあるSettingsで、塗るさいの設定ができます。

Brush Size は大きさ。 
Opacity は効果の強さ(不透明度)
Target Strength は重なったときの強さ

みたいな感じです。

次に、木のボタンを押してください。

f:id:sawalemontea:20170816202616p:plain

Edit Trees>Add Treeで、木のプレハブを追加します。
いっぱいありますが、Broadleaf_Mobileにします。

f:id:sawalemontea:20170816203156p:plain

Addで追加したら、Terrainをクリックしたりドラッグしたりするだけで
簡単に木が生えます。

さきほど同様、Settingsでいろいろ変えられます。

Brush Sizeはブラシの大きさ。
Tree Densityは木の密度。
Tree Heightは木の高さの範囲です。Randomのチェックを外すと数値指定になります。

次に、花のボタンを押してください。

f:id:sawalemontea:20170816203848p:plain


Edit Details>Add Grass Textureで、
いままでのように草のテクスチャを追加します。

f:id:sawalemontea:20170816204218p:plain

f:id:sawalemontea:20170816204314p:plain

こんな感じです。

これで、テクスチャ塗りと全く同じ要領で草をはやせます。

ブラシの設定まで全く同じなので説明は割愛します。

注意点としては、パソコンによっては、真上から見たとき
草が描写されず、何重にも塗ったあげく、シーンをよこから見たら
大草原になっていた…ということがあげられます。
真上からみてTerrainを編集している方は気をつけてください。

これで青のボタン達の説明はおわりです

つぎに黄色のボタン(と言っても歯車のボタンだけ)
についてですが、これは今回は使いません。

よく使うのは、Resolution↓の、三つです。

f:id:sawalemontea:20170816205421p:plain

最初にチラッと触れましたが、これでTerrainの大きさを変更します。


これで、前半は終ります。
後半では、赤のボタン達の解説をしてから、
海をつくってみたいと思います。

Next
sawalemounity.hatenablog.com



関連
空をつくる場合
sawalemounity.hatenablog.com