利用に関して

掲載記事は個人的な見解・理解を多く含み、確実に正規な情報ではないことがあります。
このサイト閲覧・利用に伴う損害等の免責は負いません。

2018年12月25日火曜日

Blogger の設定 コードブロック編

Bloggerアーカイブ書こうとしてソースコードのハイライトが欲しくなったので追加しました。


導入

Bloggerの管理画面 > テーマ > HTMLの編集

<head>の中に1行追加するだけです
[HTMLの編集]
<head>
      :
<script src="https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js?skin=sunburst">
      :
</head>
行末のskinでスタイルを選べます。
一覧:スタイルリスト

設定

表示を調整する

さらに横に長くなった時にスクロールバーを出す機能と長すぎるコードは縦スクロールできるようにする機能を付けました
先ほど追加した部分に追記します
<script src='https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js?skin=desert'/>
    <style type='text/css'>
    pre.prettyprint {
      font-size:12px;
      overflow: auto;
    }
    pre.prettyprint.high {
      overflow: auto;
      height: 23em;
    }
    </style>

行番号を表示する

デフォルトでは行番号が5行おきに表示されるので1行ずつ表示するようにします。

CSSに追記[テーマ>カスタマイズ>上級者向け>CSSを追加]

[CSS追記]

li.L0, li.L1, li.L2, li.L3,
li.L5, li.L6, li.L7, li.L8 {
  list-style-type: decimal !important;
}



使用方法

コードハイライトの使い方

[HTML編集モード]

&ltpre class="prettyprint [lang-XXX] [linenum] [high]"&gt

コードを記入

&lt/pre&gt


オプション引数

linenums

行番号を表示するときに指定します。
linenums:[開始数字]
開始数字を指定するとその番号からカウントされます。
/*Sample.cs*/

using System;

public class Sample{
   public int intvalue;
   private float floatvalue;
   private double doublevalue;
   public bool boolvalue;

   Sample(){
     /* */

     intvalue = 0;
     floatvalue = 1.3f;
     doublevalue = 2.291;
     

     boolvalue = true;

   }

   public float Func1(){
     float x = intvalue + floatvalue;
     return x;
   }
}


high

コードブロックの長さを固定して、はみ出した分のコードはスクロールで表示します。
* 設定で追加した項目です。
using System;

public class Sample{
   public int intvalue;
   private float floatvalue;
   private double doublevalue;
   public bool boolvalue;

   Sample(){
     /* */

     intvalue = 0;
     floatvalue = 1.3f;
     doublevalue = 2.291;
     

     boolvalue = true;

   }

   public float Func1(){
     float x = intvalue + floatvalue;
     return x;
   }
}


lang-[言語]

コードの言語を指定するときに使用します。これに応じてコードの解釈が変わります。
デフォルトの対応言語
"bsh", "c", "cc", "cpp", "cs", "csh", "cyc", "cv", "htm", "html", "java",
"js", "m", "mxml", "perl", "pl", "pm", "py", "rb", "sh", "xhtml", "xml","xsl"



参考サイト



2018年12月21日金曜日

UnityでアレのAoEっぽいものを作る


あれのAoEっぽいシェーダー

シェーダーについて勉強していた時の話
円をシェーダーで描く項目をやって円を描いてみたのです


そして次に思ったのが
”メッシュに図形を書き加えられるなら[とあるゲーム]のAoEっぽいの作れるんじゃ?”
そんな出来心スタートです。

http://nn-hokuson.hatenablog.com/entry/2016/11/14/203745

こちらを参考にすると円を表示させてスクロールさせることまでできます。



AoEを実現するにはそこから
・円の原点を任意に変えられるようにする
・任意のメッシュ上にこのシェーダーを適用できるようにする

が出来たら実装できそう

任意のメッシュ上にシェーダーを適用させる

こちらはどうやって実装しようか悩んだところです。
いろいろ考えた結果、投影することにしました。
投影の計算式はまぁ複雑なのですがUnityでは投影をやってくれるコンポーネントがあるのでそれを使います。

Projectirコンポーネント
ここにセットされたマテリアルを投影してくれます。



位置を動的に変更する

円の原点を任意に変える

これは
「シェーダー」
void surf(Input IN, inout SurfaceOutputStandard o) {
 float dist = distance(float4(0,0,0,0), IN.worldPos);

の”float4(0,0,0,0)”を

「シェーダー」
void surf(Input IN, inout SurfaceOutputStandard o) {
    float dist = distance(_Center, IN.worldPos);

プロパティの変数”_Center”にして、スクリプトから設定してあげることで実現できます。

ProjectorがアタッチされているtransformのpositionをShaderに渡します
「スクリプト」
_AoEmaterial.SetVector(_AoES_CenterID, this.transform.position);

これでShaderの円の中心がオブジェクトの場所になります

円の範囲を制限する

このままでは無限に範囲が表示されるので描画範囲を制限します

「シェーダー」
if (dist < _Range) {
    o.Albedo = _AoEColor;
    =中略=
   }
   else {
    o.Albedo = fixed4(0,0,0,0);
    o.Alpha = 0;
   }
}


半径を設定してそれ以外は透明で描画するようにします

ぬぺっとした円が描画されます

AoEは加算合成っぽい見え方をしているので加算モードにします

「シェーダー」
Blend One One

光って見えるようにEmissionの値も設定します

いい感じに加算されました

AoEはヘリの部分が光っていてあとはうっすら光っている
これを表現します

Alphaの値を設定することで重ね具合は表せそうです
Emissionの値も一緒に調整します

ヘリに近いところはAlphaが大きくなるようにシグモイド関数を利用します


加工したシグモイド関数

式を加工して半径の部分が立ち上がるようにします

「シェーダー」
       float expo = 1 / (1 + pow(2.7, -(_Gain) * (dist - _Range * 0.95)));
       o.Emission = _AoEEmission * expo;
       o.Alpha = expo * 0.5 + 0.3;




いい感じに表現できました。

ちなみにすこし重い。
処理改善の余地がありますね。

2018年12月20日木曜日

Blogger 再開

ほったらかしになっていたこのサイトを個人的な技術情報のアーカイブ用途で動かすことにしました。

日記からメモ帳になりました。