20190719のUnityに関する記事は6件です。

Unity チュートリアル(1)play & edit mode

Unityでゲームを作るときの基本手順
 ・自分のゲームに変更を加える
 ・自分のゲームをやってみて変更をテストする
gameを繰り返し繰り返し試してみて、どうやってゲームをテストするかを学ぶってことで。
コメント 2019-07-19 223133.gif

光ってるやつがチュートリアルウィンドウね。
コメント 2019-07-19 223226.gif

今光ってるウィンドウがシーンビュー
このなかでゲームを作るようだ。
コメント 2019-07-19 223330.gif

今光ってるウィンドウがgameビュー
プレイヤーがゲームやってるときの画面の見え方はコッチになる。
コメント 2019-07-19 223429.gif

画面上部のプレイボタンを押して遊んでみよう~ってことで。
コメント 2019-07-19 223511.gif

方向キーを押したら動くっぽい。確かに動く。
コメント 2019-07-19 22362h9.gif

クリアした。どっちかというとgameビューから見たらどんな感じかを見てみてって感じ。
コメント 2019-07-19 223722.gif

コメント 2019-07-19 223752.gif

ここでまとめのようだ。
 エディター使ってgameテストしてね、とのこと
 プレイモードとエディットモードの動かし方
がこれでわかったねってことらしい。
コメント 2019-07-19 223828.gif

~おしまい~

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

テトリスの次にレーシングゲーム作った話

はじめに

こんにちは。ユニバの MJ です。
前回はテトリスを二週間で作った後に、なんと部活動っぽくなりまして、ユニバユニティ倶楽部 略して UUC という糞ダサネームで活動していくことになりました。
そうして今回はレーシングゲームを作ろうかという話になって、大体できたので記事にしようかと思った次第です。
今回のゲームは Maker Faire Tokyo 2019 でプレイできる予定なので、いらっしゃる方がいたら弊社ブースに足を運んでいただければ幸いです。

できたもの

今回はシャワーヘッドが爆走するレーシングゲームを作ることになった。
製作期間は大体一か月ぐらい?
案件が入ったりでやっぱり大変だった。
きっかけはメンバの一人がシャワーヘッドを握っていたことに由来。

shawer-op.gif

op。 意味ありげなシーン。特に意味はない。

shawer-select.gif

機体セレクト。なるべく高級感を出したかった。普通に店頭販売用のプロモーションにこういうの使ったら面白そう(仕事ください)

shawer-race (1).gif

レースシーン。シャワーの飛沫が画面にかかるようになっている。非常に不快。
と単純なレーシングゲームではありますが、テトリスの何倍も考えることが多く大変でした。
参加メンバーの皆さんお疲れさまでした。

開発メンバ

MJ(おじさん1): 主にロジック担当、今回は画面のざっとした絵作りとかしてみたり、とにかく前に進めることを考える
おじさん2;AI書いたり、周回判定したり
おじさん3:UI置いてくれたり画面つなぎこんでくれたり
おじさん4:音つくってくれたり、フォント選定してくれたり
わかさ1:エフェクトつくってくれたり
わかさ2:ステージつくってくれたり、もろもろ指導してくれたり
わかさ3:シーンロード系の基盤を用意してくれたり

みたいな感じ。ウェブ開発より登場人物多いかも!

プロジェクト管理

前回はかなりざっくりとした管理だったので、今回はちょっと力をいれました。
とはいえ、今回もやる気ベースで無理をしない。

仕様をざっくり共有する

何はともあれみんなで作るもののイメージを含ませるのは大事
基本的な仕様だったり、どんな質感にするのかだったり、使わないものでもとりあえずまとめたりする。
Miro という最高便利ツールを使ってまとめてます。

siyou1.PNG

全体のざっくり仕様まとめ、取り組む課題や今回は妥協するとこなど、自分の取り組む課題の下地に利用する

siyou2.png

世界観。実現無理そうなものでもワイワイ話せるのが良い

siyou3.png

シーンフロー。予想がたったら、ユニティの世界でどうするか一旦考えたりする。現実味を帯びてきた。

siyou4.png

実際こんな感じかな?とうい図。絵が上手いとか下手とかではなく、こういうイメージを持ってますという宣言が大事。

スプレッドシートで最初にスケジュール構想を練りながら毎週何をする予定かを書いたりする

schedule.PNG

スケジュールシート。時期に対する着地点と、それに対して毎週何をする予定かをまとめる。
他の案件との兼ね合いもあるので無理せず、ゴールをアップデートしながら進めた。

というのをしながら進めました。前回よりプロジェクトっぽい装いですね。

今後に向けてと反省

繋がないと盛り上がらない

ユニティ開発というものはある種コンフリクトとの闘いでもあるなと感じていて、いかにお互いが気持ちよくシーンを開発するか?というテーマのもデバッグシーンを一人一個もった状態で開発をつづけました。が、徐々にモチベーションが下がっていく。一人一人の進捗は確実にあるのに。
要するに作業はしてるんだけど、ゲームが出来てないというジレンマが皆の中にあったわけですね。
スケジュールにあった目標は達成はしているんですが、マスタシーンの上で動いていたわけではなかったのです。

なので次回はマスタシーンにつなぐ時期とか、完成度 xx% でも一旦入れましょう。
とかそういうところを考えないといけないですね。

絵を描くってすごい大事

弊社は基本的に web を主に生業にしている会社なのですが、ウェブサイトというのはある程度フレームが決まっているものです(慣れているだけかもしれないですが、、、)。それに比べてゲームというのは無限の可能性を秘めいているわけで、とにかくシーンの装いの第一歩を決めたり、こういう演出をしたいんだ!と宣言するのが大事ですね。

進行に関して言えば最初はスタートダッシュを切ることはできましたが、そのあとも継続的に妄想を続ける必要があったかな?と思います。

ちなみに私が途中で書いたのがこれ。

File.png
エフェクトの感じ。同じような感じにはいかなかったが、勢いは共有できた。

File (1).png
セレクトシーン。おしゃれな感じにはなったなという印象。

File (2).png
op シーンの元ネタ。常夏な雰囲気がよかったけど、アンニュイな感じに実際はなった。

実際作りながら書くというの大変なんですが、やっぱり俯瞰してみたり、勢いを感じれたり、そういうのがゲームという総合作品に関してはより重要になりますね。

最後に

弊社はユニティを使って表現を行い、さらには現実世界とのつながり(ハードウェア)もデザインすることができます。 Maker Faire Tokyo 2019 ではシャワーヘッド型コントローラで試遊してもらう想定です。

IMG_0057.jpg

せっかくなのでユニティ案件あると楽しいなと思っているので気軽にお声がけください。
露骨な宣伝になってしまいましたが、ゲーム作りやると凄いノウハウ溜まって楽しいよ!というお話でした。
みんなも作ったもの自慢しよう。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Unity】Unity Editorかスマホ実機か判別して処理を分ける

はじめに

スマホ実機で毎回動作確認するのが面倒だったので、Unity Editorの場合はキーボード操作ができるようにしました。

サンプルスクリプト

Main CameraにAttachして使用することを想定したスクリプトです。
Unity Editorの場合は、方向キーで視点移動ができるように、
スマホ実機(Unity Editor以外)の場合は、端末を傾けて視点移動ができるようになっています。

GyroController
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GyroController : MonoBehaviour
{
    // キーボード操作用
    private Vector3 rotate;
    void Start()
    {
        // Unityエディタと実機で処理を分ける
        if (Application.isEditor)
        {
            rotate = transform.rotation.eulerAngles;
        }
        else 
        {
            Input.gyro.enabled =true;
        }
    }

    void Update()
    {
        // キーボードで視点変更
        float speed = Time.deltaTime * 100.0f;

        // PCは矢印キーで視点変更
        if (Application.isEditor)
        {
            if (Input.GetKey(KeyCode.LeftArrow))
            {
                rotate.y -= speed;
            }
            if (Input.GetKey(KeyCode.RightArrow))
            {
                rotate.y += speed;
            }
            if (Input.GetKey(KeyCode.UpArrow))
            {
                rotate.x -= speed;
            }
            if (Input.GetKey(KeyCode.DownArrow))
            {
                rotate.x += speed;
            }
            transform.rotation = Quaternion.Euler(rotate);
        }
        // スマホはジャイロで視点変更
        else
        {
            Quaternion gratitude = Input.gyro.attitude;
            gratitude.x *= -1;
            gratitude.y *= -1;
            transform.localRotation = Quaternion.Euler(90, 0, 0) * gratitude;
        }
    }
}

最後に

Unity初心者なので、より良い方法や間違いがあったら、是非教えてほしいです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

波長ベース色空間【光の波長をRGBに変換】

659afc172f18b7f95b8b82d68341a168.png

概要

 色の表現方法にはRGBやHSVなどがあり、これらは人間が色を認識するL・M・S錐体がそれぞれ赤・緑・青に反応することに基づいて色を表現しています。
 たしかにRGBやHSVは人間の目に映るあらゆる色を表現できるのですが、この空間で色を変化させても不規則に明るさが変化したりしてそんなにきれいには見えないと思います。
 そこで今回は光の波長をRGBに変換する関数を紹介します。これを使ってきれいな虹色を表現してください!
92e6dbfe950f8c631cbfb4519fed6132.png

コード

波長とRGBの対応表はCIE1931色空間(http://cvrl.ucl.ac.uk/cmfs.htm) に基づいています。
このコードはShaderLabですが書き換えればGLSLでもHLSLでも使えるはず。。。

HLSL

Wave2RGB.cginc
//data on http://cvrl.ucl.ac.uk/cmfs.htm
static float MinVal = 390.0;
static int DataNum = 89;
static float Interval = 5.0;
static fixed4 CMF[89]={ //fixed4(wavelength,R,G,B)元のデータの構造由来
    fixed4(390,1.5000E-03,-4.0000E-04,6.2000E-03),
    fixed4(395,3.8000E-03,-1.0000E-03,1.6100E-02),
    fixed4(400,8.9000E-03,-2.5000E-03,4.0000E-02),
    fixed4(405,1.8800E-02,-5.9000E-03,9.0600E-02),
    fixed4(410,3.5000E-02,-1.1900E-02,1.8020E-01),
    fixed4(415,5.3100E-02,-2.0100E-02,3.0880E-01),
    fixed4(420,7.0200E-02,-2.8900E-02,4.6700E-01),
    fixed4(425,7.6300E-02,-3.3800E-02,6.1520E-01),
    fixed4(430,7.4500E-02,-3.4900E-02,7.6380E-01),
    fixed4(435,5.6100E-02,-2.7600E-02,8.7780E-01),
    fixed4(440,3.2300E-02,-1.6900E-02,9.7550E-01),
    fixed4(445,-4.4000E-03,2.4000E-03,1.0019E+00),
    fixed4(450,-4.7800E-02,2.8300E-02,9.9960E-01),
    fixed4(455,-9.7000E-02,6.3600E-02,9.1390E-01),
    fixed4(460,-1.5860E-01,1.0820E-01,8.2970E-01),
    fixed4(465,-2.2350E-01,1.6170E-01,7.4170E-01),
    fixed4(470,-2.8480E-01,2.2010E-01,6.1340E-01),
    fixed4(475,-3.3460E-01,2.7960E-01,4.7200E-01),
    fixed4(480,-3.7760E-01,3.4280E-01,3.4950E-01),
    fixed4(485,-4.1360E-01,4.0860E-01,2.5640E-01),
    fixed4(490,-4.3170E-01,4.7160E-01,1.8190E-01),
    fixed4(495,-4.4520E-01,5.4910E-01,1.3070E-01),
    fixed4(500,-4.3500E-01,6.2600E-01,9.1000E-02),
    fixed4(505,-4.1400E-01,7.0970E-01,5.8000E-02),
    fixed4(510,-3.6730E-01,7.9350E-01,3.5700E-02),
    fixed4(515,-2.8450E-01,8.7150E-01,2.0000E-02),
    fixed4(520,-1.8550E-01,9.4770E-01,9.5000E-03),
    fixed4(525,-4.3500E-02,9.9450E-01,7.0000E-04),
    fixed4(530,1.2700E-01,1.0203E+00,-4.3000E-03),
    fixed4(535,3.1290E-01,1.0375E+00,-6.4000E-03),
    fixed4(540,5.3620E-01,1.0517E+00,-8.2000E-03),
    fixed4(545,7.7220E-01,1.0390E+00,-9.4000E-03),
    fixed4(550,1.0059E+00,1.0029E+00,-9.7000E-03),
    fixed4(555,1.2710E+00,9.6980E-01,-9.7000E-03),
    fixed4(560,1.5574E+00,9.1620E-01,-9.3000E-03),
    fixed4(565,1.8465E+00,8.5710E-01,-8.7000E-03),
    fixed4(570,2.1511E+00,7.8230E-01,-8.0000E-03),
    fixed4(575,2.4250E+00,6.9530E-01,-7.3000E-03),
    fixed4(580,2.6574E+00,5.9660E-01,-6.3000E-03),
    fixed4(585,2.9151E+00,5.0630E-01,-5.3700E-03),
    fixed4(590,3.0779E+00,4.2030E-01,-4.4500E-03),
    fixed4(595,3.1613E+00,3.3600E-01,-3.5700E-03),
    fixed4(600,3.1673E+00,2.5910E-01,-2.7700E-03),
    fixed4(605,3.1048E+00,1.9170E-01,-2.0800E-03),
    fixed4(610,2.9462E+00,1.3670E-01,-1.5000E-03),
    fixed4(615,2.7194E+00,9.3800E-02,-1.0300E-03),
    fixed4(620,2.4526E+00,6.1100E-02,-6.8000E-04),
    fixed4(625,2.1700E+00,3.7100E-02,-4.4200E-04),
    fixed4(630,1.8358E+00,2.1500E-02,-2.7200E-04),
    fixed4(635,1.5179E+00,1.1200E-02,-1.4100E-04),
    fixed4(640,1.2428E+00,4.4000E-03,-5.4900E-05),
    fixed4(645,1.0070E+00,7.8000E-05,-2.2000E-06),
    fixed4(650,7.8270E-01,-1.3680E-03,2.3700E-05),
    fixed4(655,5.9340E-01,-1.9880E-03,2.8600E-05),
    fixed4(660,4.4420E-01,-2.1680E-03,2.6100E-05),
    fixed4(665,3.2830E-01,-2.0060E-03,2.2500E-05),
    fixed4(670,2.3940E-01,-1.6420E-03,1.8200E-05),
    fixed4(675,1.7220E-01,-1.2720E-03,1.3900E-05),
    fixed4(680,1.2210E-01,-9.4700E-04,1.0300E-05),
    fixed4(685,8.5300E-02,-6.8300E-04,7.3800E-06),
    fixed4(690,5.8600E-02,-4.7800E-04,5.2200E-06),
    fixed4(695,4.0800E-02,-3.3700E-04,3.6700E-06),
    fixed4(700,2.8400E-02,-2.3500E-04,2.5600E-06),
    fixed4(705,1.9700E-02,-1.6300E-04,1.7600E-06),
    fixed4(710,1.3500E-02,-1.1100E-04,1.2000E-06),
    fixed4(715,9.2400E-03,-7.4800E-05,8.1700E-07),
    fixed4(720,6.3800E-03,-5.0800E-05,5.5500E-07),
    fixed4(725,4.4100E-03,-3.4400E-05,3.7500E-07),
    fixed4(730,3.0700E-03,-2.3400E-05,2.5400E-07),
    fixed4(735,2.1400E-03,-1.5900E-05,1.7100E-07),
    fixed4(740,1.4900E-03,-1.0700E-05,1.1600E-07),
    fixed4(745,1.0500E-03,-7.2300E-06,7.8500E-08),
    fixed4(750,7.3900E-04,-4.8700E-06,5.3100E-08),
    fixed4(755,5.2300E-04,-3.2900E-06,3.6000E-08),
    fixed4(760,3.7200E-04,-2.2200E-06,2.4400E-08),
    fixed4(765,2.6500E-04,-1.5000E-06,1.6500E-08),
    fixed4(770,1.9000E-04,-1.0200E-06,1.1200E-08),
    fixed4(775,1.3600E-04,-6.8800E-07,7.5300E-09),
    fixed4(780,9.8400E-05,-4.6500E-07,5.0700E-09),
    fixed4(785,7.1300E-05,-3.1200E-07,3.4000E-09),
    fixed4(790,5.1800E-05,-2.0800E-07,2.2700E-09),
    fixed4(795,3.7700E-05,-1.3700E-07,1.5000E-09),
    fixed4(800,2.7600E-05,-8.8000E-08,9.8600E-10),
    fixed4(805,2.0300E-05,-5.5300E-08,6.3900E-10),
    fixed4(810,1.4900E-05,-3.3600E-08,4.0700E-10),
    fixed4(815,1.1000E-05,-1.9600E-08,2.5300E-10),
    fixed4(820,8.1800E-06,-1.0900E-08,1.5200E-10),
    fixed4(825,6.0900E-06,-5.7000E-09,8.6400E-11),
    fixed4(830,4.5500E-06,-2.7700E-09,4.4200E-11),
};

fixed4 Wave2RGB(float wavelength){ //波長→RGB
    wavelength = clamp( wavelength, MinVal, MinVal+Interval*DataNum);
    int index = clamp( (int)(wavelength-MinVal)/Interval, 0, DataNum);
    float weight = saturate((wavelength - MinVal - index * Interval)/(Interval));
    fixed4 output = lerp(CMF[index],CMF[index+1],weight);
    return fixed4(output.yzw,1.0);
}

fixed4 Val2RGB(float val){ //01→RGB
    return Wave2RGB(val*300+390);
}
wave2color.shader
Shader "HOTATE/Wave2Color" {
    Properties {
        _Wave ("wave(nm)",range(390,830)) = 500
    }
    SubShader {
        Tags { "Queue" = "Geometry" "RenderType" = "Opaque"}

        Pass {
            CGPROGRAM
                #pragma vertex vert
                #pragma fragment frag
                #include "UnityCG.cginc"
                #include "wave2rgb.cginc"

                float _Wave;

                struct appdata {
                    float4 vertex : POSITION;
                    float2 uv : TEXCOORD;
                };

                struct v2f {
                    float4 vertex : SV_POSITION;
                    float2 uv : TEXCOORD;
                };

                v2f vert (appdata IN) {
                    v2f output;
                    output.vertex = UnityObjectToClipPos(IN.vertex);
                    output.uv = IN.uv;
                    return output;
                }

                fixed4 frag(v2f IN) : SV_Target {
                    return Wave2RGB(_Wave);
                    //return Val2RGB(IN.uv.x);
                }
            ENDCG
        }
    }
}
Rainbow.shader
Shader "HOTATE/Rainbow" {
    Properties {
        _Ypow ("Y曲げ具合",range(0.0,5000.0)) = 1000.0
        _Xpow ("X曲げ具合",range(0.0,5000.0)) = 100.0
        _Height ("高さ",range(-5000,5000)) = 0.0
        _Brightnes ("明るさ",range(0,30)) = 1.0
    }
    SubShader {
        Tags { "Queue" = "Transparent"}
        Blend One One

        Pass {
            CGPROGRAM
                #pragma vertex vert
                #pragma fragment frag
                #include "UnityCG.cginc"
                #include "wave2rgb.cginc"

                float _Ypow, _Xpow, _Height, _Brightnes;

                struct appdata {
                    float4 vertex : POSITION;
                    float2 uv : TEXCOORD;
                };

                struct v2f {
                    float4 vertex : SV_POSITION;
                    float2 uv : TEXCOORD;
                };

                v2f vert (appdata IN) {
                    v2f output;
                    output.vertex = UnityObjectToClipPos(IN.vertex);
                    output.uv = IN.uv;
                    return output;
                }

                fixed4 frag(v2f IN) : SV_Target {
                    return Wave2RGB(IN.uv.y*_Ypow + (IN.uv.x-0.5)*(IN.uv.x-0.5)*_Xpow + _Height) * _Brightnes;
                }
            ENDCG
        }
    }
}

GLSL

wave2rgb

e1dc2f6d8c60262c9926dcaee8bdeea4.gif

解説

 多段階線形補完みたいな方法使っているので、これは他にも応用できそう・・・
 波長方式だと単純にはループさせられないので、ここはひと工夫必要かと思います。

サンプル

虹サンプルのgithubリポジトリ

https://github.com/HhotateA/RainbowColor_Shaderlab
35dfee577643676b7d3d25c32807308e.png

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Wave to RGB【波長をRGBに変換】

概要

 色の表現方法にはRGBやHSVなどがあり、これらは人間が色を認識するL・M・S錐体がそれぞれ赤・緑・青に反応することに基づいて色を表現しています。
 たしかにRGBやHSVは人間の目に映るあらゆる色を表現できるのですが、この空間で色を変化させても不規則に明るさが変化したりしてそんなにきれいには見えないと思います。
 そこで今回は光の波長をRGBに変換する関数を紹介します。これを使ってきれいな虹色を表現してください!

92e6dbfe950f8c631cbfb4519fed6132.png

コード

波長とRGBの対応表はCIE1931色空間(http://cvrl.ucl.ac.uk/cmfs.htm) に基づいています。
このコードはShaderLabですが書き換えればGLSLでもHLSLでも使えるはず。。。

Wave2RGB.shader
Shader "HOTATE/Wave2RGB" {
    Properties {
    }
    SubShader {
        Tags { "Queue" = "Geometry" "RenderType" = "Opaque"}
        CGINCLUDE
            #include "UnityCG.cginc"

            //data on http://cvrl.ucl.ac.uk/cmfs.htm //fixed4(wavelength,R,G,B)元のデータの構造由来
            #define minwave 390.0
            #define  datanum 89
            #define interval 5.0
            static fixed4 CMF[89]={
                fixed4(390,1.5000E-03,-4.0000E-04,6.2000E-03),
                fixed4(395,3.8000E-03,-1.0000E-03,1.6100E-02),
                fixed4(400,8.9000E-03,-2.5000E-03,4.0000E-02),
                fixed4(405,1.8800E-02,-5.9000E-03,9.0600E-02),
                fixed4(410,3.5000E-02,-1.1900E-02,1.8020E-01),
                fixed4(415,5.3100E-02,-2.0100E-02,3.0880E-01),
                fixed4(420,7.0200E-02,-2.8900E-02,4.6700E-01),
                fixed4(425,7.6300E-02,-3.3800E-02,6.1520E-01),
                fixed4(430,7.4500E-02,-3.4900E-02,7.6380E-01),
                fixed4(435,5.6100E-02,-2.7600E-02,8.7780E-01),
                fixed4(440,3.2300E-02,-1.6900E-02,9.7550E-01),
                fixed4(445,-4.4000E-03,2.4000E-03,1.0019E+00),
                fixed4(450,-4.7800E-02,2.8300E-02,9.9960E-01),
                fixed4(455,-9.7000E-02,6.3600E-02,9.1390E-01),
                fixed4(460,-1.5860E-01,1.0820E-01,8.2970E-01),
                fixed4(465,-2.2350E-01,1.6170E-01,7.4170E-01),
                fixed4(470,-2.8480E-01,2.2010E-01,6.1340E-01),
                fixed4(475,-3.3460E-01,2.7960E-01,4.7200E-01),
                fixed4(480,-3.7760E-01,3.4280E-01,3.4950E-01),
                fixed4(485,-4.1360E-01,4.0860E-01,2.5640E-01),
                fixed4(490,-4.3170E-01,4.7160E-01,1.8190E-01),
                fixed4(495,-4.4520E-01,5.4910E-01,1.3070E-01),
                fixed4(500,-4.3500E-01,6.2600E-01,9.1000E-02),
                fixed4(505,-4.1400E-01,7.0970E-01,5.8000E-02),
                fixed4(510,-3.6730E-01,7.9350E-01,3.5700E-02),
                fixed4(515,-2.8450E-01,8.7150E-01,2.0000E-02),
                fixed4(520,-1.8550E-01,9.4770E-01,9.5000E-03),
                fixed4(525,-4.3500E-02,9.9450E-01,7.0000E-04),
                fixed4(530,1.2700E-01,1.0203E+00,-4.3000E-03),
                fixed4(535,3.1290E-01,1.0375E+00,-6.4000E-03),
                fixed4(540,5.3620E-01,1.0517E+00,-8.2000E-03),
                fixed4(545,7.7220E-01,1.0390E+00,-9.4000E-03),
                fixed4(550,1.0059E+00,1.0029E+00,-9.7000E-03),
                fixed4(555,1.2710E+00,9.6980E-01,-9.7000E-03),
                fixed4(560,1.5574E+00,9.1620E-01,-9.3000E-03),
                fixed4(565,1.8465E+00,8.5710E-01,-8.7000E-03),
                fixed4(570,2.1511E+00,7.8230E-01,-8.0000E-03),
                fixed4(575,2.4250E+00,6.9530E-01,-7.3000E-03),
                fixed4(580,2.6574E+00,5.9660E-01,-6.3000E-03),
                fixed4(585,2.9151E+00,5.0630E-01,-5.3700E-03),
                fixed4(590,3.0779E+00,4.2030E-01,-4.4500E-03),
                fixed4(595,3.1613E+00,3.3600E-01,-3.5700E-03),
                fixed4(600,3.1673E+00,2.5910E-01,-2.7700E-03),
                fixed4(605,3.1048E+00,1.9170E-01,-2.0800E-03),
                fixed4(610,2.9462E+00,1.3670E-01,-1.5000E-03),
                fixed4(615,2.7194E+00,9.3800E-02,-1.0300E-03),
                fixed4(620,2.4526E+00,6.1100E-02,-6.8000E-04),
                fixed4(625,2.1700E+00,3.7100E-02,-4.4200E-04),
                fixed4(630,1.8358E+00,2.1500E-02,-2.7200E-04),
                fixed4(635,1.5179E+00,1.1200E-02,-1.4100E-04),
                fixed4(640,1.2428E+00,4.4000E-03,-5.4900E-05),
                fixed4(645,1.0070E+00,7.8000E-05,-2.2000E-06),
                fixed4(650,7.8270E-01,-1.3680E-03,2.3700E-05),
                fixed4(655,5.9340E-01,-1.9880E-03,2.8600E-05),
                fixed4(660,4.4420E-01,-2.1680E-03,2.6100E-05),
                fixed4(665,3.2830E-01,-2.0060E-03,2.2500E-05),
                fixed4(670,2.3940E-01,-1.6420E-03,1.8200E-05),
                fixed4(675,1.7220E-01,-1.2720E-03,1.3900E-05),
                fixed4(680,1.2210E-01,-9.4700E-04,1.0300E-05),
                fixed4(685,8.5300E-02,-6.8300E-04,7.3800E-06),
                fixed4(690,5.8600E-02,-4.7800E-04,5.2200E-06),
                fixed4(695,4.0800E-02,-3.3700E-04,3.6700E-06),
                fixed4(700,2.8400E-02,-2.3500E-04,2.5600E-06),
                fixed4(705,1.9700E-02,-1.6300E-04,1.7600E-06),
                fixed4(710,1.3500E-02,-1.1100E-04,1.2000E-06),
                fixed4(715,9.2400E-03,-7.4800E-05,8.1700E-07),
                fixed4(720,6.3800E-03,-5.0800E-05,5.5500E-07),
                fixed4(725,4.4100E-03,-3.4400E-05,3.7500E-07),
                fixed4(730,3.0700E-03,-2.3400E-05,2.5400E-07),
                fixed4(735,2.1400E-03,-1.5900E-05,1.7100E-07),
                fixed4(740,1.4900E-03,-1.0700E-05,1.1600E-07),
                fixed4(745,1.0500E-03,-7.2300E-06,7.8500E-08),
                fixed4(750,7.3900E-04,-4.8700E-06,5.3100E-08),
                fixed4(755,5.2300E-04,-3.2900E-06,3.6000E-08),
                fixed4(760,3.7200E-04,-2.2200E-06,2.4400E-08),
                fixed4(765,2.6500E-04,-1.5000E-06,1.6500E-08),
                fixed4(770,1.9000E-04,-1.0200E-06,1.1200E-08),
                fixed4(775,1.3600E-04,-6.8800E-07,7.5300E-09),
                fixed4(780,9.8400E-05,-4.6500E-07,5.0700E-09),
                fixed4(785,7.1300E-05,-3.1200E-07,3.4000E-09),
                fixed4(790,5.1800E-05,-2.0800E-07,2.2700E-09),
                fixed4(795,3.7700E-05,-1.3700E-07,1.5000E-09),
                fixed4(800,2.7600E-05,-8.8000E-08,9.8600E-10),
                fixed4(805,2.0300E-05,-5.5300E-08,6.3900E-10),
                fixed4(810,1.4900E-05,-3.3600E-08,4.0700E-10),
                fixed4(815,1.1000E-05,-1.9600E-08,2.5300E-10),
                fixed4(820,8.1800E-06,-1.0900E-08,1.5200E-10),
                fixed4(825,6.0900E-06,-5.7000E-09,8.6400E-11),
                fixed4(830,4.5500E-06,-2.7700E-09,4.4200E-11),
            };

            fixed4 Wave2RGB(float wavelength){
                wavelength = clamp( wavelength, minwave, minwave+interval*datanum);
                int index = clamp( (int)(wavelength-minwave)/interval, 0, datanum);
                float waight = saturate((wavelength - minwave - index * interval)/interval);
                fixed4 output = lerp(CMF[index],CMF[index+1],waight);
                return fixed4(output.yzw,1.0);
            }

            fixed4 Val2RGB(float val){
                return Wave2RGB(val*300+390);
            }
        ENDCG

        Pass {
            CGPROGRAM
                #pragma vertex vert
                #pragma fragment frag

                struct appdata {
                    float4 vertex : POSITION;
                    float2 uv : TEXCOORD;
                };

                struct v2f {
                    float4 vertex : SV_POSITION;
                    float2 uv : TEXCOORD;
                };

                v2f vert (appdata IN) {
                    v2f output;
                    output.vertex = UnityObjectToClipPos(IN.vertex);
                    output.uv = IN.uv;
                    return output;
                }

                fixed4 frag(v2f IN) : SV_Target {
                    return Val2RGB(IN.uv.x);
                }
            ENDCG
        }
    }
}

あとがき

 多段階線形補完みたいな方法使っているので、これは他にも応用できそう・・・
 波長方式だと単純にはループさせられないので、ここはひと工夫必要かと思います。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Unityをインストールしたよ

きっかけ

会社の後輩が「ゲーム開発に興味がある」という会話になり
何を使ってみたいのか聞いたところ「Unreal Engine4(通称UE4)」という言葉を初めて知った。
で、
https://gd-navi.com/beginner-create/
へ行って軽く勉強したところ
UE4はUnityやAWS Sumerianと同等の代物だということを知り
我が家の貧弱PCでUE4は難しいかもしれない&C++は未体験すぎて挫折しそうと思い
Unity入れよう!
という大胆な方向転換を実施。
で、今に至ります。

我が家のPC環境

PC Inspiron 15
OS Windows10 Home
CPU Intel COre i5-7200U 2.5GHz 2.7GHz
メモリ 8.00GB
SSD 256GB

手順

全ては以下のサイトを参考に自分の環境で頑張る!
https://www.sejuku.net/blog/47646

まずは、Unityのダウンロード
コメント 2019-07-18 233204.gif
…早速参考サイトとちょっと違う。
 Unity Hubってなんだ!?ってことで少し調べた
 「複数のバージョンのUnityエディタを簡単に管理することができるツールです。」
  by https://akisnote.com/2018/12/unity-hub/

  …なるほど!いったん忘れてよさそうだ

[Unityを選択+ダウンロード]をクリック

お次はプラン選択。当然「Personal」。
コメント 2019-07-18 233634.gif

ここがダウンロード画面でいいのかな?
image.png

なんか色々教えてくれそうだ。親切な人だ。。。
「ここから始める」をクリックしたら、急に利用規約が出た、焦った。。。
とりあえず個人使用なら別にタダでいいよ、って意味っぽいので安心してクリック。
image.png

ダウンロードしたら「UnityHubSetup.exe」だった。
あれ?UnityHubってバージョン管理するやつかと思ったけど違うのかな?とりあえずありがたく頂戴する。
image.png

あと、この後もこの学習サイトに来そうなのでURLをメモ残す。
https://store.unity.com/ja/download-nuo

ひとまず、さっきダウンロードした
「UnityHubSetup.exe」がインストーラなのかな?
とりあえずクリック。

インストール作業が始まったぞ。とりあえずOK。
コメント 2019-07-18 234448.gif

このあたりはどんどんOKしていこう。
コメント 2019-07-18 234510.gif

どんどこどんどこ。
コメント 2019-07-18 234521.gif

終わった。あっけないな。
コメント 2019-07-18 234530.gif

…と思ったらここからが本番か!?改めて[INSTALL]クリック。
コメント 2019-07-18 234555.gif

インストールの段階でID登録始まるの?!
よくみると、GoogleかFacebookと連携できるようだ。これはありがたい。
コメント 2019-07-18 234655.gif

ID入れて…パスワード入れて…これでいいかな。
コメント 2019-07-18 234844.gif

あれ…?googleアカウントと連携しようと思ったら、すでにUnity IDもってるよって言ってる?
パスワードはすっかり忘れたので再発行で。
コメント 2019-07-18 234943.gif

再発行メールが飛んでったようだ。
コメント 2019-07-18 235106.gif

ここからはスマホで再発行をしたので画面は無い。。。

いきなり再発行が完了したところから再開。
なんかテンプレートを用意してくれていきなりどんなゲーム作りたいか聞いてきた!
ちょっとよくわからないけど3Dゲームを選んでおこう
コメント 2019-07-18 235613.gif

ようやく、準備が整ったようだ。[Launch Unity]クリック
コメント 2019-07-18 235629.gif

起動画面が出た…ようやくか。。。それにしても起動が長い…2分くらい待ったら画面出た。
コメント 2019-07-18 235723.gif

最初の画面はコチラ。
いきなりチュートリアルが始まった。ここでやめたかったのに…。
とりあえず最後まで続けよう。
コメント 2019-07-18 235924.gif

上の再生ボタンを押せば画面下のゲームが始まるってことね。
コメント 2019-07-18 235952.gif

矢印キーを押したらカートが走り出した…いきなりゲームできてる状態なのね。すごいな。
コメント 2019-07-19 000021.gif

あれ?やめたいんだけど・・・と思ったら3週走って的なこと書いてる。
正気か…とりあえず走ろう。。。
コメント 2019-07-19 000056.gif

走り終わった。。。けど終わらない。
…よくみると再生ボタンをもう一回押したらよかったのか、ヤレヤレ…
コメント 2019-07-19 000255.gif

ひとしきり遊んだところで、パラメータを変えようって話になったっぽい。
速度を変更してみよう、とのこと。オブジェクトツリー画面が右側にあるぞ。
このあたりはAWS Sumerianと見た目が似てるのでなんとなくわかる。
コメント 2019-07-19 000319.gif

Kartをクリックしたらプロパティが出るってことね。
コメント 2019-07-19 000342.gif

とりあえず押す。
コメント 2019-07-19 000407.gif

プロパティ画面が出た。
コメント 2019-07-19 000516.gif

[Default Status]に注目ってことね。
コメント 2019-07-19 000611.gif

ココの数字をいじればよいのね。
コメント 2019-07-19 000635.gif

25→40に変更。微妙な数字変更なので違いが判らないかもしれない…
コメント 2019-07-19 000655.gif

数字をいじってから特に保存ボタンとか押してないけど
パラメータは即時反映されるのかな?
早速、再生ボタンを押して的な催促が出た。
実際のところ、数字変化による違いはよく分からなかった…ちょっと失敗かな。。。
ともあれ、なんとなく…ではあるけど、一つのゲームを立ち上げてどこをどういじるのかの雰囲気はつかめたので収穫だと思う。
コメント 2019-07-19 000709.gif

ようやく、チュートリアルは終了のようだ。長かった…。
なんかwalkthrough2ってのが出てる。クリックしても変化ないのでこれはまた今度ってことで。
コメント 2019-07-19 000804.gif

ようやく通常の画面に戻ってきた。
ここからはお好きにどうぞってことね。
…と言いながらも右側に案内はあるからきっとまだ続くのだろう。
どこまでも親切だ…。
コメント 2019-07-19 000832.gif

Unityを終了して初めてアイコンが増えてることに気づいた。
次回はこれをクリックしたらいいのね。
コメント 2019-07-19 000912.gif

おわりに

意外と長かった。けど、チュートリアルがとにかく親切だった。
初心者向けってことで方々の技術サイトで押されるだけのことはある。
案外自分のPCでも問題なく動いたし、いい感じ。
個人的にはゲームよりも物理演算エンジンとしての使い道に興味があるので
シミュレーション方面で活躍できるような使い方に挑戦してみたいな、と。

それと参考URLの手順とは思ったよりも違いが出てた。時期のものってことは分かるけど
どんどんUnityも直感的に扱えるように工夫した成果なんだと思う。
自分も技術ブログを参考にしたのはURLの紹介までであとはほとんど
画面の指示に従っただけだった。本当に親切な世の中になったもんだ。しみじみ。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む