<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:blogChannel="http://backend.userland.com/blogChannelModule" >
  <channel>
  <title>KT.SOFTWARE blog</title>
  <link>https://ktstg.blog.shinobi.jp/</link>
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="https://ktstg.blog.shinobi.jp/RSS/" />
  <description>まったくのプログラミング素人の筆者がC++/HSPを使用してSTG（シューティングゲーム）を作っていく過程を書くブログでしたが最近は脱線気味。プログラミング以外にも、ゲーム関連の記事、日々の戯言など。</description>
  <lastBuildDate>Tue, 04 Apr 2023 09:45:26 GMT</lastBuildDate>
  <language>ja</language>
  <copyright>© Ninja Tools Inc.</copyright>
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" />

    <item>
    <title>noteに移行</title>
    <description>
    <![CDATA[今後はnoteに移行しようかと思います。<br />
<a href="https://note.com/xxxx_kt_xxxx" title="" target="_blank">https://note.com/xxxx_kt_xxxx<br />
<br />
</a>今迄の記事も引っ越そうかと思ったのですが画像ファイルは引っ越し出来ないようで個別に設定する訳にもいかないのでこのまま置いておきます。<br />
<br />
<iframe width="320" height="400" style="border: 0; display: block; max-width: 99%; width: 494px; padding: 0px; margin: 10px 0px; position: static; visibility: visible;" src="https://note.com/embed/notes/ne5f5d003866d"></iframe>
<script async="" src="https://note.com/scripts/embed.js" charset="utf-8" type="text/javascript"></script>]]>
    </description>
    <category>その他</category>
    <link>https://ktstg.blog.shinobi.jp/Entry/1015/</link>
    <pubDate>Tue, 04 Apr 2023 09:45:26 GMT</pubDate>
    <guid isPermaLink="false">ktstg.blog.shinobi.jp://entry/1015</guid>
  </item>
    <item>
    <title>【Steamworks】報酬の受け取り口座について【Valve】</title>
    <description>
    <![CDATA[Steamに登録する時に報酬の振り込み口座を登録するのですが、この口座は外貨受け取りが出来る口座じゃないと駄目なんです。<br />
当初私はどんな銀行でも良いと思っていてペイペイ銀行で登録していたのですが、最初の報酬の支払いの時に入金に失敗したとメールが来たので調べてみるとペイペイ銀行は外貨受け取りが出来ない銀行だった事がわかりました。<br />
<br />
外貨受け取りする為にはSWIFTコードを入力しないと駄目なのですが、ペイペイ銀行にもSWIFTコードはあったので大丈夫だと思っていたら国内の口座にある外貨を受け取るためで海外からの送金は出来ない模様。<br />
そういう銀行は結構あるようなので最初の登録の時に良く調べておいた方が良いかもです。<br />
ざっと調べてみた感じだと大手の銀行は大体大丈夫そうでしたが手数料が結構かかるなぁと言う印象でした（2000円～5000円程度かな？）<br />
<br />
そんな事をTwitterで呟いていたら<a href="https://www.shinseibank.com/" title="" target="_blank">新生銀行</a>が良いと教えて貰って調べてみると手数料は2000円か14ドルで新生銀行を給料の振り込み口座などにしておくと口座のステージが上がり手数料はキャッシュバックされる（実質無料）って感じでしたので早速口座を作って登録してみました。（口座を作った当初6か月間は自動的にプラチナステージなる模様）<br />
<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/d26c64b1.png" title=""><img src="//ktstg.blog.shinobi.jp/Img/1672058395/" alt="" /></a> <br />

<div>受取人名:ローマ字で口座名を記入する</div>
<div>銀行名:SHINSEI BANK, LTD., HEAD OFFICE</div>
<div>銀行 SWIFT コード:LTCBJPJT</div>
<div>受取人の口座番号:***********(店番号と口座番号の10桁)</div>
<div>口座の種類:作った種類の口座</div>
<div>通貨:USD</div>
<div>銀行住所:2-4-3, NIHONBASHI-MUROMACHI, CHUOKU</div>
<div>銀行所在都市:TOKYO</div>
<div>銀行郵便番号:1030022</div>
<div>銀行口座開設国:Japan<br />
<br />
新生銀行のHPにはこんな感じで説明されてました。<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/img_02.png" title=""><img src="//ktstg.blog.shinobi.jp/Img/1672058403/" alt="" /><br />
<br />
</a></div>
口座開設後にマイナンバーの登録も済ませておくと良いと思います。(外貨受け取り時に必要なようです)<br />
<br />
新生銀行の場合はこれだけで良かったのですが、銀行によっては中継銀行も記入しないと駄目っぽいです。<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/57d66b74.png" title=""><img src="//ktstg.blog.shinobi.jp/Img/1672058394/" alt="" /><br />
<br />
</a>と言う事で無事に入金されていました。<br />
振り込み手数料は14ドル引かれていました。またドルから円に換金するのに1ドルにつき0.07円かかるようです。<br />
結局、総売り上げからSteamに30％支払った残りより振込手数料14ドルが引かれた物が入金されました。<br />
<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/3c28d754.png" title=""><img src="//ktstg.blog.shinobi.jp/Img/1672059670/" alt="" /><br />
</a>USドルで入金されていたので換金する時は出来るだけ円安の時に換金するのが良いのでしょうけど、ここ最近上下しまくってるのでタイミング難しすぎます。。。]]>
    </description>
    <category>その他</category>
    <link>https://ktstg.blog.shinobi.jp/Entry/1014/</link>
    <pubDate>Mon, 26 Dec 2022 13:13:47 GMT</pubDate>
    <guid isPermaLink="false">ktstg.blog.shinobi.jp://entry/1014</guid>
  </item>
    <item>
    <title>【Unity】曲線のプログラムを色々作ってみた</title>
    <description>
    <![CDATA[曲線のプログラムを色々作ってみたものをTwitterにアップしたので忘備録としてまとめておきます。<br />
制作に当たって下記のサイトさまを参考にさせて頂きました。<br />
<a href="http://www.ne.jp/asahi/music/marinkyo/matematiko/kurbo.html.ja" title="" target="_blank">http://www.ne.jp/asahi/music/marinkyo/matematiko/kurbo.html.ja</a><br />
<a href="https://r-dimension.xsrv.jp/classes_j/sine_cosine/" title="" target="_blank">https://r-dimension.xsrv.jp/classes_j/sine_cosine/</a><br />
<br />
<br />

<blockquote class="twitter-tweet">
<p lang="ja" dir="ltr">メモ:曲線のプログラムを色々試したので忘備録。<br />
<br />
八の字<br />
float A1 = 8f;<br />
float ds = 0.5f;<br />
x = A1 * Mathf.Sin(rad) * ds;<br />
y = A1 * Mathf.Sin(rad * 2) * ds;<br />
rad += 0.02f;<br />
(続<a href="https://twitter.com/hashtag/Unity?src=hash&amp;ref_src=twsrc%5Etfw">#Unity</a> <a href="https://twitter.com/hashtag/gamedev?src=hash&amp;ref_src=twsrc%5Etfw">#gamedev</a> <a href="https://t.co/qQScFjUaeW">pic.twitter.com/qQScFjUaeW</a></p>
&mdash; kt. (@xxxx_kt_xxxx) <a href="https://twitter.com/xxxx_kt_xxxx/status/1606680018914279424?ref_src=twsrc%5Etfw">December 24, 2022</a></blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8" type="text/javascript"></script>
<br />

<blockquote class="twitter-tweet" data-conversation="none">
<p lang="ja" dir="ltr">アステロイド、A2A3の値を変えると色々変化<br />
float A1 = 4f;<br />
float A2 = 1f;<br />
float A3 = 1f;<br />
x = A1 * Mathf.Pow(Mathf.Cos(rad * A2), 3);<br />
y = A1 * Mathf.Pow(Mathf.Sin(rad * A3), 3);<br />
rad += 0.02f;<br />
(続 <a href="https://t.co/gQisj5JBJb">pic.twitter.com/gQisj5JBJb</a></p>
&mdash; kt. (@xxxx_kt_xxxx) <a href="https://twitter.com/xxxx_kt_xxxx/status/1606680233662611456?ref_src=twsrc%5Etfw">December 24, 2022</a></blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8" type="text/javascript"></script>
<br />

<blockquote class="twitter-tweet" data-conversation="none">
<p lang="ja" dir="ltr">リサジュー。w1, w2, p1, p2の数値を変えると図形が変化<br />
float A1 = 4f;<br />
float A2 = 4f;<br />
float w1 = 2f;<br />
float w2 = 3f;<br />
float p1 = 0f;<br />
float p2 = 0f;<br />
x = A1 * Mathf.Sin(w1 * rad + p1);<br />
y = A2 * Mathf.Sin(w2 * rad + p2);<br />
rad -= 0.01f;<br />
(続 <a href="https://t.co/YrPiDJdCBx">pic.twitter.com/YrPiDJdCBx</a></p>
&mdash; kt. (@xxxx_kt_xxxx) <a href="https://twitter.com/xxxx_kt_xxxx/status/1606680529667256321?ref_src=twsrc%5Etfw">December 24, 2022</a></blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8" type="text/javascript"></script>
<br />

<blockquote class="twitter-tweet" data-conversation="none">
<p lang="ja" dir="ltr">サイクロイド<br />
ds = 0.9f;<br />
float A1 = 0.4f;<br />
x = A1 * (rad - Mathf.Sin(ds * rad));<br />
y = A1 * (1 - Mathf.Cos(ds * rad));<br />
rad += 0.1f;<br />
(続 <a href="https://t.co/DcuyuaecDJ">pic.twitter.com/DcuyuaecDJ</a></p>
&mdash; kt. (@xxxx_kt_xxxx) <a href="https://twitter.com/xxxx_kt_xxxx/status/1606680682222489601?ref_src=twsrc%5Etfw">December 24, 2022</a></blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8" type="text/javascript"></script>
<br />

<blockquote class="twitter-tweet" data-conversation="none">
<p lang="ja" dir="ltr">トロコイド（A1 = A2の時にはサイクロイドになる）<br />
ds = 0.9f;<br />
float A1 = 0.4f;<br />
float A2 = 0.8f;<br />
x = A1*(rad) - A2* Mathf.Sin(rad);<br />
y = A1 - A2* Mathf.Cos(rad);<br />
rad += 0.1f;<br />
(続 <a href="https://t.co/Rl1nAX9Yfj">pic.twitter.com/Rl1nAX9Yfj</a></p>
&mdash; kt. (@xxxx_kt_xxxx) <a href="https://twitter.com/xxxx_kt_xxxx/status/1606680821376880640?ref_src=twsrc%5Etfw">December 24, 2022</a></blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8" type="text/javascript"></script>
<br />

<blockquote class="twitter-tweet" data-conversation="none">
<p lang="ja" dir="ltr">内サイクロイド<br />
ds = 0.5f;<br />
float A1 = 5f;<br />
float A2 = 1f;<br />
x = ((A1 - A2) * Mathf.Cos(rad * 1 * ds)) + (A2 * Mathf.Cos((((A1 - A2) / A2) * rad)));<br />
y = ((A1 - A2) * Mathf.Sin(rad * 1 * ds)) - (A2 * Mathf.Sin((((A1 - A2) / A2) * rad)));<br />
rad += 0.02f;<br />
(続 <a href="https://t.co/afwRuJIi8V">pic.twitter.com/afwRuJIi8V</a></p>
&mdash; kt. (@xxxx_kt_xxxx) <a href="https://twitter.com/xxxx_kt_xxxx/status/1606681043876339713?ref_src=twsrc%5Etfw">December 24, 2022</a></blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8" type="text/javascript"></script>
<br />

<blockquote class="twitter-tweet" data-conversation="none">
<p lang="ja" dir="ltr">内トロコイド（A2 = A3内サイ）<br />
ds = 0.5f;<br />
float A1 = 5f;<br />
float A2 = 1f;<br />
float A3 = 2f;<br />
x = ((A1 - A2) * Mathf.Cos(rad * 1 * ds)) + (A3 * Mathf.Cos((((A1 - A2) / A2) * rad)));<br />
y = ((A1 - A2) * Mathf.Sin(rad * 1 * ds)) - (A3 * Mathf.Sin((((A1 - A2) / A2) * rad)));<br />
rad += 0.02f;<br />
(続 <a href="https://t.co/7H4HOi4Zyi">pic.twitter.com/7H4HOi4Zyi</a></p>
&mdash; kt. (@xxxx_kt_xxxx) <a href="https://twitter.com/xxxx_kt_xxxx/status/1606681435100020736?ref_src=twsrc%5Etfw">December 24, 2022</a></blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8" type="text/javascript"></script>
<br />

<blockquote class="twitter-tweet" data-conversation="none">
<p lang="ja" dir="ltr">外サイクロイド(A1=A2とした曲線はネフロイド)<br />
ds = 0.5f;<br />
float A1 = 3f;<br />
float A2 = 1f;<br />
x = ((A1 + A2) * Mathf.Cos(rad * 1 * ds)) - (A2 * Mathf.Cos((((A1 + A2) / A2) * rad)));<br />
y = ((A1 + A2) * Mathf.Sin(rad * 1 * ds)) - (A2 * Mathf.Sin((((A1 + A2) / A2) * rad)));<br />
rad += 0.02f;<br />
(続 <a href="https://t.co/A8qxV8wEHX">pic.twitter.com/A8qxV8wEHX</a></p>
&mdash; kt. (@xxxx_kt_xxxx) <a href="https://twitter.com/xxxx_kt_xxxx/status/1606681610287734784?ref_src=twsrc%5Etfw">December 24, 2022</a></blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8" type="text/javascript"></script>
<br />

<blockquote class="twitter-tweet" data-conversation="none">
<p lang="ja" dir="ltr">外トロコイド（A2 = A3外サイ）<br />
ds = 0.5f;<br />
float A1 = 2f;<br />
float A2 = 1f;<br />
float A3 = 2f;<br />
x = ((A1 + A2) * Mathf.Cos(rad * 1 * ds)) - (A3 * Mathf.Cos((((A1 + A2) / A2) * rad)));<br />
y = ((A1 + A2) * Mathf.Sin(rad * 1 * ds)) - (A3 * Mathf.Sin((((A1 + A2) / A2) * rad)));<br />
rad += 0.02f;<br />
(続 <a href="https://t.co/TiiobZr6YQ">pic.twitter.com/TiiobZr6YQ</a></p>
&mdash; kt. (@xxxx_kt_xxxx) <a href="https://twitter.com/xxxx_kt_xxxx/status/1606681858083028992?ref_src=twsrc%5Etfw">December 24, 2022</a></blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8" type="text/javascript"></script>
<br />

<blockquote class="twitter-tweet" data-conversation="none">
<p lang="ja" dir="ltr">レムニスケート<br />
ds = 0.5f;<br />
float A1 = 5f;<br />
x = A1 * Mathf.Cos(rad * ds) / (1 + Mathf.Pow(Mathf.Sin(rad * ds), 2));<br />
y = A1 * Mathf.Sin(rad * ds) * Mathf.Cos(rad * ds) / (1 + Mathf.Pow(Mathf.Sin(rad * ds), 2));<br />
rad += 0.05f;<br />
(続 <a href="https://t.co/QUeG0T96oQ">pic.twitter.com/QUeG0T96oQ</a></p>
&mdash; kt. (@xxxx_kt_xxxx) <a href="https://twitter.com/xxxx_kt_xxxx/status/1606681993231896580?ref_src=twsrc%5Etfw">December 24, 2022</a></blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8" type="text/javascript"></script>
<br />

<blockquote class="twitter-tweet" data-conversation="none">
<p lang="ja" dir="ltr">カーディオイド<br />
ds=0.2f;<br />
float A1 = 3.5f;<br />
x = (A1 * (1 + Mathf.Cos(rad * ds)) * Mathf.Cos(rad * ds));<br />
y = (A1 * (1 + Mathf.Cos(rad * ds)) * Mathf.Sin(rad * ds));<br />
rad += 0.1f;<br />
(続 <a href="https://t.co/9cs3s4E4SJ">pic.twitter.com/9cs3s4E4SJ</a></p>
&mdash; kt. (@xxxx_kt_xxxx) <a href="https://twitter.com/xxxx_kt_xxxx/status/1606682165059923968?ref_src=twsrc%5Etfw">December 24, 2022</a></blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8" type="text/javascript"></script>
<br />

<blockquote class="twitter-tweet" data-conversation="none">
<p lang="ja" dir="ltr">バイフォリウム<br />
ds = 0.1f;<br />
float A1 = 20f;<br />
x = A1 * Mathf.Sin(rad * ds) * Mathf.Pow(Mathf.Cos(rad * ds), 3);<br />
y = A1 * Mathf.Pow(Mathf.Sin(rad * ds), 2) * Mathf.Pow(Mathf.Cos(rad * ds), 2);<br />
rad += 0.1f;<br />
(続 <a href="https://t.co/wTV0Mlda1C">pic.twitter.com/wTV0Mlda1C</a></p>
&mdash; kt. (@xxxx_kt_xxxx) <a href="https://twitter.com/xxxx_kt_xxxx/status/1606682312087080961?ref_src=twsrc%5Etfw">December 24, 2022</a></blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8" type="text/javascript"></script>
<br />

<blockquote class="twitter-tweet" data-conversation="none">
<p lang="ja" dir="ltr">バラ曲線(A1とA2を変化させると良い)<br />
ds = 0.2f;<br />
float A1 = 2;<br />
float A2 = 1;<br />
float A3 = 6;//全体の大きさ<br />
x = A3 * (Mathf.Sin((A1 * rad * ds) / A2) * Mathf.Cos(rad * ds));<br />
y = A3 * (Mathf.Sin((A1 * rad * ds) / A2) * Mathf.Sin(rad * ds));<br />
rad += 0.1f;<br />
(続 <a href="https://t.co/R1TXULhmYJ">pic.twitter.com/R1TXULhmYJ</a></p>
&mdash; kt. (@xxxx_kt_xxxx) <a href="https://twitter.com/xxxx_kt_xxxx/status/1606682507352903682?ref_src=twsrc%5Etfw">December 24, 2022</a></blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8" type="text/javascript"></script>
<br />

<blockquote class="twitter-tweet" data-conversation="none">
<p lang="ja" dir="ltr">バラ曲線(A1とA2を変化させると良い)<br />
ds = 0.2f;<br />
float A1 = 2;<br />
float A2 = 3;<br />
float A3 = 6;//全体の大きさ<br />
x = A3 * (Mathf.Sin((A1 * rad * ds) / A2) * Mathf.Cos(rad * ds));<br />
y = A3 * (Mathf.Sin((A1 * rad * ds) / A2) * Mathf.Sin(rad * ds));<br />
rad += 0.1f;<br />
(続 <a href="https://t.co/ZuS4ZqB76c">pic.twitter.com/ZuS4ZqB76c</a></p>
&mdash; kt. (@xxxx_kt_xxxx) <a href="https://twitter.com/xxxx_kt_xxxx/status/1606682727985868801?ref_src=twsrc%5Etfw">December 24, 2022</a></blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8" type="text/javascript"></script>
<br />

<blockquote class="twitter-tweet" data-conversation="none">
<p lang="ja" dir="ltr">バラ曲線(A1とA2を変化させると良い)<br />
ds = 0.2f;<br />
float A1 = 5;<br />
float A2 = 2;<br />
float A3 = 6;//全体の大きさ<br />
x = A3 * (Mathf.Sin((A1 * rad * ds) / A2) * Mathf.Cos(rad * ds));<br />
y = A3 * (Mathf.Sin((A1 * rad * ds) / A2) * Mathf.Sin(rad * ds));<br />
rad += 0.1f;<br />
(続 <a href="https://t.co/bi3BCkzG8S">pic.twitter.com/bi3BCkzG8S</a></p>
&mdash; kt. (@xxxx_kt_xxxx) <a href="https://twitter.com/xxxx_kt_xxxx/status/1606682949159907328?ref_src=twsrc%5Etfw">December 24, 2022</a></blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8" type="text/javascript"></script>
<br />

<blockquote class="twitter-tweet" data-conversation="none">
<p lang="en" dir="ltr">螺旋<br />
ds = 0.4f;<br />
float A1 = 0.1f;<br />
x = A1 * rad * Mathf.Cos(rad * ds);<br />
y = A1 * rad * Mathf.Sin(rad * ds);<br />
rad += 0.1f;<br />
(終 <a href="https://t.co/xtQm9Fj1VC">pic.twitter.com/xtQm9Fj1VC</a></p>
&mdash; kt. (@xxxx_kt_xxxx) <a href="https://twitter.com/xxxx_kt_xxxx/status/1606683220921430016?ref_src=twsrc%5Etfw">December 24, 2022</a></blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8" type="text/javascript"></script>]]>
    </description>
    <category>Unity</category>
    <link>https://ktstg.blog.shinobi.jp/Entry/1013/</link>
    <pubDate>Sun, 25 Dec 2022 06:32:23 GMT</pubDate>
    <guid isPermaLink="false">ktstg.blog.shinobi.jp://entry/1013</guid>
  </item>
    <item>
    <title>【Unity】Steamで実績/Achievementsを実装する【Steamworks】</title>
    <description>
    <![CDATA[Steamで実績を実装してみたので忘備録として書いておきます。<br />
（書いてる筆者はド素人ですので色々間違っている可能性あります）<br />
大前提としてSteamworks.NETをUnityにインストールしておいて下さい。<br />
インストール方法は<br />
<a href="https://ktstg.blog.shinobi.jp/Entry/1011/" title="" target="_blank">https://ktstg.blog.shinobi.jp/Entry/1011/</a><br />
で書いています。<br />
<br />
当初は実績なんて無くても良いかなーと思っていたのですがゲームリリース後に実績目的で遊ぶ人もいるので実装した方が良いよとアドバス受け実装してみました。<br />
ランキングと比べると実績の実装は簡単なのでやってみても良いと思います。<br />
実装にあたり<br />
<a href="https://tsukinowa.hatenablog.jp/entry/2018/08/03/172650" title="" target="_self">Steam実績を実装する（Steamworks側設定編）</a><br />
<a href="https://kan-kikuchi.hatenablog.com/entry/Steam_Achievement" title="" target="_blank">Steamの実績をUnityで実装する【Unity】【Steam】<br />
</a>コチラのサイトさんを参考にさせて頂きました。<br />
<br />
まずはSteamworks管理画面のデータ＆実績から実績を開きます。<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/482c5908.png" title=""><img src="//ktstg.blog.shinobi.jp/Img/1668661131/" alt="" /></a> <br />
<br />
実績にはクリアで達成などのオンオフのみで実装できる実績と、100万点とったら実績といった数値データが必要な実績があると思います。<br />
これの数値データが必要な実績で何％まで達成みたいな表示を行いたい時は「データ＆実績」のデータ画面でデータを先に作る必要がありますが今回は使わないので書きません。<br />
（上記参考サイトさんで解説されています）<br />
逆にオンオフのみで達成出来る実績の場合はデータを作る必要はなく実績の方だけ作れば良いです。<br />
<br />
まずは実績アイコンを作ります。<br />
実績アイコンは256x256のjpg画像が推奨されていますが実際に表示される時は凄く小さく表示されるので最少サイズの64x64くらいで表示されると思って作った方が良いです。<br />
取得していない時のアイコンは取得している時のアイコンをモノクロにした物にします。<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/ac_icon010.jpg" title=""><img src="//ktstg.blog.shinobi.jp/Img/1668662497/" alt="" /></a><a target="_blank" href="//ktstg.blog.shinobi.jp/File/ac_icon020.jpg" title=""><img src="//ktstg.blog.shinobi.jp/Img/1668662624/" alt="" /></a><a target="_blank" href="//ktstg.blog.shinobi.jp/File/ac_icon010.jpg" title=""> <br />
</a>こんな風に作りましたが、実際の画面では全然文字が読めませんでした(笑)<br />
<br />
実績画面で実績の項目を作っていきます。<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/54de647e.png" title=""><img src="//ktstg.blog.shinobi.jp/Img/1668661133/" alt="" /><br />
</a>新しい実績ボタンをクリックすると実績作成の項目が出てきます。<br />
それぞれの意味は<br />
API名：Unityでプログラムなどから指定する時の名前<br />
<br />
進行状況：オンオフのみの実績なら「なし」最小値/最大値も0で良い。何％まで達成の表示を行うときはデータ画面で作成したAPI名を選択して最小値/最大値を入力する<br />
<br />
ディスプレイ名：実績の名前。Steamクライアントなどで表示される実績名です。<br />
<br />
説明：ディスプレイ名の下に表示させる実績の説明(「ステージ1をクリアした」みたいな感じ)<br />
<br />
設定：データを修正できる人を設定<br />
Client / ゲームアプリから更新（基本はコレを選択する）<br />
GS / 自分でサーバーを立ててソコから更新する<br />
Offical GS / Steamゲームサーバーから更新する<br />
<br />
非表示?：獲得するまで表示しない（隠し実績）<br />
<br />
達成アイコン：実績解除後のアイコン(カラー推奨)<br />
<br />
未達成アイコン：　実績解除前のアイコン（白黒推奨）<br />
<br />
以上をそれぞれ埋めていきます。アイコンは設定してもすぐに反映されません。途中で一度保存してから再度読み込むと上手くアップロード出来るようです。<br />
<br />
＠Unityへの実装<br />
まずはスクリプトの最初にusing Steamworks;を記述します。Steamクライアントも起動させておかないとエラーになります。<br />
<br />
実績解除の流れとしては<br />
1.SteamManager.Initializedで初期化<br />

<div>2.SteamUserStats.RequestCurrentStats();でtrueが返ってくるか判別</div>
<div>3.SteamUserStats.SetAchievement("作成したAPI名");で実績解除</div>
<div>4.SteamUserStats.StoreStats();で解除を反映する（ポコンする）<br />
と言った感じ<br />
<br />
実際の実績解除はこんな風に書いています。</div>
<textarea rows="20" cols="70"> if (SteamManager.Initialized)//初期化
        {
            if(jisseki_kaijyo == 1)//実績解除フラグ
            {
                bool User_data = SteamUserStats.RequestCurrentStats();//サーバーから、ユーザーの現在のデータと実績を非同期に要求します。
                if (User_data == true)
                {
                    SteamUserStats.SetAchievement("_Standard_mode_clear");//実績解除
                    SteamUserStats.StoreStats();//ポコンする
                }
            }
        }
        else
        {
            Debug.Log("Steamの初期化失敗");
        }
</textarea><br />
<br />
あと、すべての実績を解除した時の実績を作りたいなと思ったので<br />
SteamUserStats.GetAchievement("作成したAPI名", out bool);で解除した実績を調べられる（trueだと実績を解除している）ので全ての実績を調べて解除するようにしました。 <textarea rows="20" cols="70"> 
bool ret = SteamUserStats.GetAchievement("_Standard_mode_clear", out onoff01);

ret = SteamUserStats.GetAchievement("_Classic_mode_clear", out onoff02);

ret = SteamUserStats.GetAchievement("_Challenge_mode_clear", out onoff03);

ret = SteamUserStats.GetAchievement("_Standard_mode_NC_clear_A", out onoff04);

ret = SteamUserStats.GetAchievement("_Standard_mode_NC_clear_B", out onoff05);

ret = SteamUserStats.GetAchievement("_Classic_mode_NC_clear_A", out onoff06);

ret = SteamUserStats.GetAchievement("_Classic_mode_NC_clear_B", out onoff07);


if (onoff01 == true &amp;&amp; onoff02 == true &amp;&amp; onoff03 == true &amp;&amp; onoff04 == true　&amp;&amp; onoff05 == true &amp;&amp; onoff06 == true &amp;&amp; onoff07 == true)
    {
    bool User_data = SteamUserStats.RequestCurrentStats();//サーバーから、ユーザーの現在のデータと実績を非同期に要求します。
    if (User_data == true)
        {
        SteamUserStats.SetAchievement("_All_achievements_unlocked");
        SteamUserStats.StoreStats();
        }
    }
</textarea><br />
<br />
<br />
＠実績のローカリゼーション<br />
作った実績を色々な言語にローカリゼーションしたい時はSteamworks管理画面のデータ＆実績から実績のローカリゼーションを選択します。<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/9a79bf91.png" title=""><img src="//ktstg.blog.shinobi.jp/Img/1668666607/" alt="" /></a> <br />
<br />
作成したい言語にレ点を入れて保存。<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/3f950ea3.png" title=""><img src="//ktstg.blog.shinobi.jp/Img/1668666685/" alt="" /></a> <br />
<br />
ALL Languagesを選択してローカリゼーションデータをダウンロードします。<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/d6a89745.png" title=""><img src="//ktstg.blog.shinobi.jp/Img/1668666894/" alt="" /></a> <br />
<br />
ダウンロードしたデータをテキストエディタ等で開きます。<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/3708b3e8.png" title=""><img src="//ktstg.blog.shinobi.jp/Img/1668666928/" alt="" /></a> <br />
設定したい言語の所が空白になっているので埋めて上書き保存します。<br />
<br />
保存したファイルを選択してアップロードすればOK<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/31572f73.png" title=""><img src="//ktstg.blog.shinobi.jp/Img/1668666971/" alt="" /><br />
<br />
</a>実績画面に戻ると言語が選択出来るようになっています。<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/dbfd4a28.png" title=""><img src="//ktstg.blog.shinobi.jp/Img/1668667088/" alt="" /></a> <br />
<br />
これで上手く出来るはずなんですが自分の場合は日本語だったからか上手く反映出来なくて、結局実績を作成する画面のEditで一つづつ更新しないと駄目でした。]]>
    </description>
    <category>Unity</category>
    <link>https://ktstg.blog.shinobi.jp/Entry/1012/</link>
    <pubDate>Thu, 17 Nov 2022 05:25:19 GMT</pubDate>
    <guid isPermaLink="false">ktstg.blog.shinobi.jp://entry/1012</guid>
  </item>
    <item>
    <title>【Unity】Steamでオンラインランキング/リーダーボードを実装する【Steamworks】</title>
    <description>
    <![CDATA[Steamでオンラインランキングを実装してみたので忘備録として書いておきます。<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/s-FciadYLacAIrrId.jpg" title=""><img src="//ktstg.blog.shinobi.jp/Img/1665492701/" alt="" /></a> <br />
<br />
オンラインランキングを実装する流れとしては<br />
①Steamworks管理画面にランキングを作成<br />
②Steamworks.NETをUnityにインストール<br />
③UnityにてオンラインランキングをC#で実装<br />
といった感じになります。<br />
<br />
実装にあたり<br />
<a href="https://kan-kikuchi.hatenablog.com/entry/Steam_Ranking" title="" target="_blank">Steamのランキング(リーダーボード)をUnityで実装する【Unity】【Steam】</a><a href="http://ktstg.blog.shinobi.jp/Entry/1011/" title="" target="_blank"><br />
</a><a href="https://zenn.dev/studio_shimazu/scraps/c0d488975f0594" title="" target="_blank">Unity製ゲームで、Steamのランキング実装をするには</a><a href="https://zenn.dev/studio_shimazu/scraps/c0d488975f0594" title="" target="_blank"><br />
</a>コチラのサイトさんを参考にさせて頂きました。<br />
<br />
①Steamworks管理画面にランキングを作成<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/20079909.jpeg" title=""><img src="//ktstg.blog.shinobi.jp/Img/1665492710/" alt="" /></a><br />
Steamworks管理画面のテクニカルツールにあるSteamworks設定編集&rarr;データ＆実績&rarr;ランキングを選択します。<br />
ランキングを追加で任意の名前を付けて作成します。<br />

<div><br />
パラメータの内容はSteamworksの説明から抜粋</div>
<div>*********************************************************************</div>
<div>名前－ここには、内部開発用に意味のある名前を設定します。</div>
<div>コミュニティ名－ランキングをコミュニティハブに表示する場合は、ここに一般公開用の名前を設定します。 名前が入力されていない場合は、ランキングは表示されません。</div>
<div>並べ替え方法－ランキングの並べ替え順序を設定します。 順位が基準のランキングでは昇順を使用し、 ハイスコアが基準の場合は、降順を使用してください。</div>
<div>表示タイプ－ランキングで表示するデータのタイプを決定します。 数値、秒またはミリ秒から選択します。</div>
<div>書き込み－これが「信頼済み」に設定されている場合、クライアントによってランキングスコアを設定することはできず、SetLeaderboardScore WebAPIによってのみ設定できます。 デフォルトでは設定されていません。</div>
<div>読み取り－これが「フレンド」に設定されている場合、ゲームはユーザーのフレンドのランキングスコアのみを読み取ることができます。すべてのスコアはWebAPIによって常に読み取り可能です。 デフォルトでは設定されていません。</div>
*********************************************************************<br />
書き込みと読み込みは特別な事をしない限りは設定する必要なさそうです。<br />
並べ替え方法1位から順番に表示したい場合は降順にします。<br />
<br />
実施したいランキングの数だけ作成します。<br />
(例えばイージーとノーマルとハードに分けたかったら3個作る)<br />
ランキングを作成したらココでの設定は終了です。<br />
<br />
<br />
②Steamworks.NETをUnityにインストール<br />
アセットストアにもあるみたいですが公式の？Githubからダウンロードするのが良さげ<br />
<a href="https://github.com/rlabrecque/Steamworks.NET/releases" title="" target="_blank">Releases &middot; rlabrecque/Steamworks.NET<br />
</a>ちょっと下にあるSteamworks.NET_20.1.0.unitypackageをダウンロードしてAssets&rarr;Import Package&rarr;Custom Packageでインストールします。<br />
<br />
インストールしたらゲームプロジェクトフォルダの一番上の階層にsteam_appid.txtがあると思うので、それを開くのですがUnityからは見えないのでWindowsからテキストエディタで開きます。<br />
初期は480？かと思いますので、自分のゲームのID(Steamworksに表示されているゲームタイトルの横にある数字)を入力して保存します。<br />
保存したらココでの設定は終了です。<br />
<br />
<br />
③UnityにてオンラインランキングをC#で実装<br />
※オンラインランキングを使用するときはUnityと同時にSteamも立ち上げておかないとエラーが出るので注意が必要です。<br />
<br />

<div>ランキングを使用するスクリプトには一番初めに</div>
<div>using Steamworks;</div>
を記述する必要があります。<br />
<br />
ランキング送受信する時のC#スクリプトはこんな感じ<br />
<br />
リーダーボードの取得<br />
<textarea rows="20" cols="70">//===========================================================
//リーダーボードの取得
//===================================================================
    if (SteamManager.Initialized)
    {
  　Debug.Log($"Steamの初期化成功, AppID : {SteamUtils.GetAppID()}");

    //初期化が成功したらリーダーボードを探す(OnFindLeaderboardを実行する)
    CallResult&lt;LeaderboardFindResult_t&gt;.Create().Set(SteamUserStats.FindLeaderboard("作成したランキング名"), OnFindLeaderboard);

    }
        else
    {
        Debug.LogWarning("Steamの初期化失敗 / Failure Initialization");
    }


    private void OnFindLeaderboard(LeaderboardFindResult_t result, bool failure)
    {
        //リーダーボードが見つかったか判定
        if (failure || result.m_bLeaderboardFound == 0)
        {
            Debug.LogWarning("リーダーボードが見つかりませんでした  / Failure LeaderBoard");
            return;
        }
        //リーダーボードの情報表示
        var leaderboard = result.m_hSteamLeaderboard;
        
        Debug.Log($"リーダーボードの名前 : {SteamUserStats.GetLeaderboardName(leaderboard)}");
        Debug.Log($"リーダーボードに登録されている数 : {SteamUserStats.GetLeaderboardEntryCount(leaderboard)}");
        Debug.Log($"リーダーボードの並べ替え方法 : {SteamUserStats.GetLeaderboardSortMethod(leaderboard)}");
        Debug.Log($"リーダーボードの表示タイプ : {SteamUserStats.GetLeaderboardDisplayType(leaderboard)}");
    }
</textarea><br />
<br />
ランキングの取得<br />
<textarea rows="20" cols="70">//順位の取得
CallResult&lt;LeaderboardFindResult_t&gt;.Create().Set(SteamUserStats.FindLeaderboard("作成したランキング名"), DownloadEntries);

//==========================================================
//順位の取得
//===========================================================

    //順位の取得
    private void DownloadEntries(LeaderboardFindResult_t result, bool failure)
    {
        //リーダーボードが見つかったか判定
        if (failure || result.m_bLeaderboardFound == 0)
        {
            Debug.LogWarning("リーダーボードが見つかりませんでした  / Failure LeaderBoard");
            return;
        }

        //取得する情報
        CSteamID[] targetIDs = { SteamUser.GetSteamID() };//取得したい情報のIDに、自分のIDを設定
        var call = SteamUserStats.DownloadLeaderboardEntriesForUsers(
          result.m_hSteamLeaderboard, //送信するリーダーボード 
          targetIDs,       //取得したいUserのID
          targetIDs.Length //取得したい情報の個数
        );

        //順位の取得送信
        //Debug.Log("順位の取得開始");
        CallResult&lt;LeaderboardScoresDownloaded_t&gt;.Create().Set(call, OnDownloadEntriese2);

        //取得する情報
        call = SteamUserStats.DownloadLeaderboardEntries(
          result.m_hSteamLeaderboard, //送信するリーダーボード 
          ELeaderboardDataRequest.k_ELeaderboardDataRequestGlobal, //順位を取得する範囲
          ranking_tate, //取得する順位の一番上
          ranking_tate + 9 //取得する順位の一番下
        );
        
        //順位の取得送信
        Debug.Log("順位の取得開始");
        CallResult&lt;LeaderboardScoresDownloaded_t&gt;.Create().Set(call, OnDownloadEntriese);


        
    }

    //順位の取得完了
    private void OnDownloadEntriese(LeaderboardScoresDownloaded_t result, bool failure)
    {
        //順位の取得が上手くいったか判定
        if (failure)
        {
            Debug.LogWarning("順位の取得が失敗しました / Failure");
            return;
        }
        Debug.Log($"順位の取得完了");


        //登録されている順位の個数を確認
        Debug.Log($"取得した順位の個数 : {result.m_cEntryCount}");

        //各順位の情報を確認
        for (int i = 0; i &lt; result.m_cEntryCount; i++)
        {
            //各順位の情報を取得
            LeaderboardEntry_t leaderboardEntry;
            SteamUserStats.GetDownloadedLeaderboardEntry(result.m_hSteamLeaderboardEntries, i, out leaderboardEntry, new int[0], 0);

            //情報を表示
            /*
            Debug.Log($"順位 : {leaderboardEntry.m_nGlobalRank}");
            Debug.Log($"ID : {leaderboardEntry.m_steamIDUser}");
            Debug.Log($"スコア : {leaderboardEntry.m_nScore}");
            Debug.Log($"ユーザ名 : {SteamFriends.GetFriendPersonaName(leaderboardEntry.m_steamIDUser)}");
            */
        }
    }
</textarea><br />
<br />
スコアの送信<br />
<textarea rows="20" cols="70">//スコアの送信
    if (SteamManager.Initialized)//初期化して成功したらリーダーボードを探してスコアアップロード
    {
        Debug.Log($"Steamの初期化成功, AppID : {SteamUtils.GetAppID()}");
        //初期化が成功したらリーダーボードを探す
        CallResult&lt;LeaderboardFindResult_t&gt;.Create().Set(SteamUserStats.FindLeaderboard("作成したランキング名"), UploadScore);
    }
    else
    {
        Debug.LogWarning("Steamの初期化失敗");
    }

//=================================================
//スコアの送信
//=================================================

    //スコア送信
    private void UploadScore(LeaderboardFindResult_t result, bool failure)
    {
        //リーダーボードが見つかったか判定
        if (failure || result.m_bLeaderboardFound == 0)
        {
            Debug.LogWarning("リーダーボードが見つかりませんでした");
            return;
        }

        //送信する情報
        var call = SteamUserStats.UploadLeaderboardScore(
          result.m_hSteamLeaderboard, //送信するリーダーボード 
          ELeaderboardUploadScoreMethod.k_ELeaderboardUploadScoreMethodKeepBest,//送信するスコアがベストを超えていれば更新する
          0000000000, //送信するスコアを記入する
          new int[0], //ユーザがスコアを獲得した方法に関する追加情報？
          0       //ユーザがスコアを獲得した方法に関する追加情報？
        );

        //スコア送信
        Debug.Log($"スコア送信開始");
        CallResult&lt;LeaderboardScoreUploaded_t&gt;.Create().Set(call, OnUploadScore);
    }

    //スコア送信完了
    private void OnUploadScore(LeaderboardScoreUploaded_t result, bool failure)
    {
        //スコア送信が上手くいったか判定
        if (failure || result.m_bSuccess != 1)
        {
            Debug.LogWarning("スコア送信が失敗しました");
            return;
        }
        Debug.Log($"スコア送信完了");

        //更新結果を確認
        Debug.Log($"現在のスコア : {result.m_nScore}");
        Debug.Log($"スコアが更新されたか : {result.m_bScoreChanged}");
        Debug.Log($"スコア送信前の順位 : {result.m_nGlobalRankPrevious}");
        Debug.Log($"スコア送信後の順位 : {result.m_nGlobalRankNew}");
    }
</textarea><br />
<br />
流れとしてはリーダーボードを取得してランキング取得して表示もしくは送信を行うだけなので、ランキングの取得とスコアの送信が出来れば何とかなる感じです。<br />
取得した順位はテキストなどに入れて表示すればランキング表が出来ます。<br />
<br />
ただ、あまり頻繁に取得すると表示制限？が掛かるみたいで取得出来なくなるので、あまり更新頻度は上げない方が良さそうです。]]>
    </description>
    <category>Unity</category>
    <link>https://ktstg.blog.shinobi.jp/Entry/1011/</link>
    <pubDate>Tue, 11 Oct 2022 13:24:15 GMT</pubDate>
    <guid isPermaLink="false">ktstg.blog.shinobi.jp://entry/1011</guid>
  </item>
    <item>
    <title>【Unity】沙羅曼蛇のテトランのアルゴリズムを再現してみる</title>
    <description>
    <![CDATA[沙羅曼蛇やグラディウスシリーズに出てくるテトランっぽい敵が作ってみたいと思い実装してみました。<br />
<br />

<blockquote class="twitter-tweet">
<p lang="ja" dir="ltr">テトランっぽい敵を作ってみてる。とりあえず腕を増やしまくるのはお約束ｗ<a href="https://twitter.com/hashtag/Unity?src=hash&amp;ref_src=twsrc%5Etfw">#Unity</a> <a href="https://twitter.com/hashtag/gamedev?src=hash&amp;ref_src=twsrc%5Etfw">#gamedev</a> <a href="https://t.co/PGah4rCxqx">pic.twitter.com/PGah4rCxqx</a></p>
&mdash; kt. (@xxxx_kt_xxxx) <a href="https://twitter.com/xxxx_kt_xxxx/status/1490297976136163329?ref_src=twsrc%5Etfw">February 6, 2022</a></blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8" type="text/javascript"></script>
アルゴリズムを検索してみてもあまり出てこなかったので忘備録として書いておきます。<br />
考え方としては<br />
１本目、腕の中心から決めた角度の腕の長さの円を描ける座標計算をします。その計算した座標を2本目の中心座標とします。<br />
<br />
2本目、1本目で計算した中心座標から決めた角度の腕の長さの円を描ける座標計算をします。その計算した座標を3本目の中心座標とします。<br />
<br />
3本目、2本目で計算した中心座標から決めた角度の腕の長さの円を描ける座標計算をします。その計算した座標を4本目の中心座標とします。<br />
以下腕の長さだけ繰り返し。<br />
要は普通に多関節の腕を作る感じです。<br />
このまま回転させてもファンタジーゾーンのウインクロンみたいな感じで腕は真っすぐのままなのですが、ここで各腕に回転させる角度を一定の間隔で少しづつずらしてプラスするとテトランのようにウネウネする感じで回転してくれます。<br />
<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/teto001.png" title=""><img src="//ktstg.blog.shinobi.jp/Img/1644202183/" alt="" /><br />
</a>ソースだとこんな感じ。<br />
中心の腕が親、続く腕が子というイメージです。<br />
**************************************************************<br />
&nbsp; &nbsp; &nbsp; &nbsp; Vector3 pos1 = transform.position;<br />
//1本目の計算<br />

<div>&nbsp; &nbsp; &nbsp; &nbsp; pos[0] = transform.GetChild(0).position;</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; pos[0].x = pos1.x;//腕の中心座標</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; pos[0].y = pos1.y;//腕の中心座標</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; pos[0].z = -0.1f;</div>
<div></div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; rad[0] += 0.05f;</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; ds[0] = 0.4f;</div>
<div></div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; ux[0] = Mathf.Cos(rad[0]) * ds[0] + pos[0].x;//次の腕の中心座標</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; uy[0] = Mathf.Sin(rad[0]) * ds[0] + pos[0].y;//次の腕の中心座標</div>
<div></div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; transform.GetChild(0).rotation = Quaternion.Euler(0, 0, (rad[0] * Mathf.Rad2Deg));//回転表示</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; transform.GetChild(0).position = pos[0];</div>
<div></div>
<div>//2本目の計算</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; pos[1] = transform.GetChild(1).position;</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; pos[1].x = ux[0];//腕の中心座標</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; pos[1].y = uy[0];//腕の中心座標</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; pos[1].z = -0.2f;</div>
<div></div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; rad[1] += 0.05f;</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; ds[1] = 0.4f;</div>
<div></div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; ux[1] = Mathf.Cos(rad[1]) * ds[1] + pos[1].x;</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; uy[1] = Mathf.Sin(rad[1]) * ds[1] + pos[1].y;</div>
<div></div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; transform.GetChild(1).rotation = Quaternion.Euler(0, 0, (rad[1] * Mathf.Rad2Deg));//回転表示</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; transform.GetChild(1).position = pos[1];</div>
<div></div>
<div>//3本目の計算</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; pos[2] = transform.GetChild(2).position;</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; pos[2].x = ux[1];//腕の中心座標</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; pos[2].y = uy[1];//腕の中心座標</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; pos[2].z = -0.3f;</div>
<div></div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; rad[2] += 0.05f;</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; ds[2] = 0.4f;</div>
<div></div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; ux[2] = Mathf.Cos(rad[2]) * ds[2] + pos[2].x;//次の腕の中心座標</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; uy[2] = Mathf.Sin(rad[2]) * ds[2] + pos[2].y;//次の腕の中心座標</div>
<div></div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; transform.GetChild(2).rotation = Quaternion.Euler(0, 0, (rad[2] * Mathf.Rad2Deg));//回転表示</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; transform.GetChild(2).position = pos[2];</div>
<div>以下腕の数だけ繰り返し・・・<br />
<br />
キーボードQボタンを押すと腕がウネウネする。</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; if (Input.GetKey(KeyCode.Q))</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; {</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rad[0] += 0.06f;</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rad[1] += 0.04f;</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rad[2] += 0.02f;</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rad[3] += 0.0f;</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; }<br />
**************************************************************<br />
初期設定時にradの値を0～6.28の間で設定すれば好きな向きに腕を伸ばす事が出来ます。<br />
<br />
上記を纏めるとこんな感じ。<br />
**************************************************************<br />
&nbsp; &nbsp; &nbsp; &nbsp; float rad_plus = 0.05f<br />
&nbsp; &nbsp; &nbsp; &nbsp; Vector3 pos1 = transform.position;<br />

<div>&nbsp; &nbsp; &nbsp; &nbsp; for (int i = 0; i &lt; emax; i++)</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; {</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pos[i] = transform.GetChild(0).position;</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (i == 0)//腕の中心</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pos[i].x = pos1.x;//腕の中心座標</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pos[i].y = pos1.y;//腕の中心座標</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (i != 0)//中心以外～先端まで</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pos[i].x = ux[i - 1];</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pos[i].y = uy[i - 1];</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div>
<div></div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pos[i].z = -i;</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rad[i] += rad_plus;</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ds[i] = 0.4f;</div>
<div></div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ux[i] = Mathf.Cos(rad[i]) * ds[i] + pos[i].x;//次の腕のx座標</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; uy[i] = Mathf.Sin(rad[i]) * ds[i] + pos[i].y;//次の腕のy座標</div>
<div></div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; transform.GetChild(i).rotation = Quaternion.Euler(0, 0, (rad[i] * Mathf.Rad2Deg));</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; transform.GetChild(i).position = pos[i];</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; }</div>
<div></div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; if (Input.GetKey(KeyCode.Q))</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; {</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (int i = 0; i &lt; emax; i++)</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; float j;</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; j = i;</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rad[i] += rad_plus - (j / 100);//腕を回転させる</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; }</div>
</div>
**************************************************************<br />
腕の画像は下記画像のような中心から外側に向かうような画像にしておかないと上手く腕が繋がりません。<br />
<img src="//ktstg.blog.shinobi.jp/File/7d145f00.png" alt="" />]]>
    </description>
    <category>Unity</category>
    <link>https://ktstg.blog.shinobi.jp/Entry/1010/</link>
    <pubDate>Mon, 07 Feb 2022 03:04:53 GMT</pubDate>
    <guid isPermaLink="false">ktstg.blog.shinobi.jp://entry/1010</guid>
  </item>
    <item>
    <title>GIMP2で細胞のようなアニメーションを作成する</title>
    <description>
    <![CDATA[グラディウスの細胞面に出てくるようなアメーバみたいなウネウネしたグラフィックアニメーションを作成したいと思ったのですが書いたりするのは自分には無理なので何か良い方法がないかと試していたら<a href="https://www.gimp.org/downloads/" title="" target="_blank">GIMP2</a>の波紋フィルターで上手く出来ました(GIMP2.10使用)<br />
<br />
まずは泡のブラシで泡を描画します。<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/fc10c7f9.png" title=""><img src="//ktstg.blog.shinobi.jp/Img/1643087551/" alt="" /></a> <br />
今回は<br />
<a href="https://www.brusheezy.com/brushes/61130-bubble-bulb-photoshop-brushes" title="" target="_blank">https://www.brusheezy.com/brushes/61130-bubble-bulb-photoshop-brushes<br />
</a>コチラのブラシを使用させて頂きました。<br />
ブラシの追加はC&gt;ユーザー&gt;使用しているユーザー名&gt;AppData&gt;Roaming&gt;GIMP&gt;2.10&gt;brushesにダウンロードしたブラシファイルをコピーして再起動すれば追加されます。<br />
<br />
次にファイルメニューのフィルター&gt;変形&gt;波紋を選択。<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/65cc2dac.png" title=""><img src="//ktstg.blog.shinobi.jp/Img/1643087856/" alt="" /></a> <br />
<br />
波紋ダイアログが開くのでAmplitudeとPeroidを弄って良い感じにします。<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/6eec95bc.png" title=""><img src="//ktstg.blog.shinobi.jp/Img/1643087960/" alt="" /></a> <br />
良い感じになったらPhase shiftで変形させていきます。<br />
パラメータの-1と0と1は同じ変形率になるので0.1刻みとかで0～1までの画像を作成すればウネウネするアニメーション画像が作成出来ます。<br />
<br />
出来た画像はこんな感じで使ってます&darr;<br />

<blockquote class="twitter-tweet">
<p lang="ja" dir="ltr">せっかく触手のプログラム作ったので触手な敵を作ってみてる。中型機のイメージで作ってたけど結構よい感じに出来たのでステージクリアと絡めてブロック扱いでも良いかもしれん<a href="https://twitter.com/hashtag/Unity?src=hash&amp;ref_src=twsrc%5Etfw">#Unity</a> <a href="https://twitter.com/hashtag/gamedev?src=hash&amp;ref_src=twsrc%5Etfw">#gamedev</a> <a href="https://t.co/WIqr6xVk5E">pic.twitter.com/WIqr6xVk5E</a></p>
&mdash; kt. (@xxxx_kt_xxxx) <a href="https://twitter.com/xxxx_kt_xxxx/status/1485848700458995714?ref_src=twsrc%5Etfw">January 25, 2022</a></blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8" type="text/javascript"></script>]]>
    </description>
    <category>3DCG/グラフィック作成</category>
    <link>https://ktstg.blog.shinobi.jp/Entry/1009/</link>
    <pubDate>Tue, 25 Jan 2022 05:24:15 GMT</pubDate>
    <guid isPermaLink="false">ktstg.blog.shinobi.jp://entry/1009</guid>
  </item>
    <item>
    <title>【Unity】スプライトを使ってラスタースクロールさせてみる</title>
    <description>
    <![CDATA[Unityのスプライト機能を使ってラスタースクロールを実装してみました。<br />

<blockquote class="twitter-tweet">
<p lang="ja" dir="ltr">Unityでスプライト使ってのラスタースクロールを実装してみた。1ラインづつ分けて動かしてるので疑似ラスタースクロールだけどねー<a href="https://twitter.com/hashtag/Unity?src=hash&amp;ref_src=twsrc%5Etfw">#Unity</a> <a href="https://twitter.com/hashtag/gamedev?src=hash&amp;ref_src=twsrc%5Etfw">#gamedev</a> <a href="https://t.co/OoKyCNLgpz">pic.twitter.com/OoKyCNLgpz</a></p>
&mdash; kt. (@xxxx_kt_xxxx) <a href="https://twitter.com/xxxx_kt_xxxx/status/1452994254305964045?ref_src=twsrc%5Etfw">October 26, 2021<br />
</a></blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8" type="text/javascript"></script>
考え方としては画像を1ドットづつのスプライトに分割してサインカーブに合わせて動かす感じ。<br />
<br />
まずはラスタースクロールさせたい画像を用意します。<br />
今回は768x128ドットの画像を使いました。<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/d5d413b7.png" title=""><img src="//ktstg.blog.shinobi.jp/Img/1635257868/" alt="" /></a> <br />
画像を選択したらInspectorのSprite ModeをMultipleに変更してからSprite Editorをクリックします。<br />

<div>Sprite Editorが開いたらSliceを押してTypeをGrid By Cell Sizeに変更しXを768、Yを1にに変更してSliceボタンを押すと768x1ドットで画像が分割されます。<br />
<br />
追加した画像の再生マークを押すと<br />
round01_0<br />
round01_1<br />
round01_2<br />
round01_3<br />
round01_4<br />
round01_5...<br />
みたいな感じで画像が追加されていると思います。<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/a5dcacc3.png" title=""><img src="//ktstg.blog.shinobi.jp/Img/1635258141/" alt="" /></a> <br />
<br />
Hierarchyタブで右クリックから空のゲームオブジェクトを作成します。Round01と言う名前にしました。<br />
追加された画像を全て選択して、作成したゲームオブジェクトにドラッグします。この時そのままドラッグするとアニメ作成画面になるのでAltを押しながら追加すると子として登録されます。<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/12f2f8cb.png" title=""><img src="//ktstg.blog.shinobi.jp/Img/1635258346/" alt="" /></a> <br />
<br />
これでRound01という親オブジェクトに1ドット毎に128個の分割された子オブジェクトが追加されました。これを親オブジェクトから操作して行きます。<br />
まずC#スクリプトを作成してRound01のアタッチします。<br />
<br />
Round01のスクリプトはこんな感じ<br />
*******************************************<br />

<div>using System.Collections;</div>
<div>using System.Collections.Generic;</div>
<div>using UnityEngine;</div>
<div></div>
<div>public class Round01 : MonoBehaviour</div>
<div>{</div>
<div>&nbsp; &nbsp; private Vector2[] pos = new Vector2[128];</div>
<div>&nbsp; &nbsp; private float[] zure = new float[128];</div>
<div></div>
<div>&nbsp; &nbsp; private float speed&nbsp; = 0f;</div>
<div>&nbsp; &nbsp; private float sindou = 0.10f;</div>
<div>&nbsp; &nbsp; private float haba&nbsp; &nbsp;= 0.8f;</div>
<div>&nbsp; &nbsp; private float sp = 0.1f;</div>
<div></div>
<div>&nbsp; &nbsp; void Start()</div>
<div>&nbsp; &nbsp; {</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div>
<div>&nbsp; &nbsp; }</div>
<div></div>
<div>&nbsp; &nbsp; void Update()</div>
<div>&nbsp; &nbsp; {</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; for (int i = 0; i &lt;= 127; i++)</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; {</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pos[i] = transform.GetChild(i).position;</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pos[i].x = zure[i];</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pos[i].y = (i * -0.01f);</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; transform.GetChild(i).position = pos[i];</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; zure[i] = haba * Mathf.Sin(sindou * i + speed);</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; }</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; speed += sp;//スピード&nbsp;</div>
<div>&nbsp; &nbsp; }</div>
<div></div>
<div>}<br />
*******************************************</div>
</div>
<div>親オブジェクトから子オブジェクトを操作する時はGetChild()を使うと出来るようなのでGetChild(i)を使って親オブジェクトから子オブジェクトを移動させています。<br />
<br />
</div>
<div>zure[i] = haba * Mathf.Sin(sindou * i + speed);でサインカーブの計算をしてラスターっぽく動かしています。<br />
sp,sindou,habaの数値を色々変更すると動きが変わります。</div>]]>
    </description>
    <category>Unity</category>
    <link>https://ktstg.blog.shinobi.jp/Entry/1008/</link>
    <pubDate>Tue, 26 Oct 2021 14:37:22 GMT</pubDate>
    <guid isPermaLink="false">ktstg.blog.shinobi.jp://entry/1008</guid>
  </item>
    <item>
    <title>【Unity】GitHubとSourcetreeでバージョン管理と複数台開発を行う方法</title>
    <description>
    <![CDATA[Unityでバージョン管理と複数台のパソコンで開発したいなと思い調べてみるとGitHubとSourcetreeを使うと良いよ！みたいな記事が沢山出てきたので試してみたのですが尽く上手く出来なかったので忘備録として記載しておきます。<br />
(私はGitHubやSourcetreeなどは一切使ったこともなくバージョン管理についても全く知識がない状態ですので誤りなどもあるかもしれません）<br />
<br />
まず前提として<br />
パソコンにGitをインストール済み<br />
Gitのインストールはコチラを参考にしました。<br />
<a href="https://www.curict.com/item/60/60bfe0e.html" title="" target="_blank">https://www.curict.com/item/60/60bfe0e.html</a><br />
<br />
GitHubのアカウントを取得済み<br />
GitHubアカウントの取得はコチラを参考にしました。<br />
<a href="https://qiita.com/ayatokura/items/9eabb7ae20752e6dc79d" title="" target="_blank">https://qiita.com/ayatokura/items/9eabb7ae20752e6dc79d<br />
</a><br />
Sourcetreeのアカウントを取得済み<br />
Sourcetreeアカウントの取得はコチラを参考にしました。<br />
<a href="https://yttm-work.jp/git/git_0002.html" title="" target="_blank">https://yttm-work.jp/git/git_0002.html</a><br />
としてください。<br />
<br />
まずはUnityでプロジェクトを作成します。<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/093654d9.png" title=""><img src="//ktstg.blog.shinobi.jp/Img/1635168557/" alt="" /></a> <br />
今回はTest_Projectという名前で作成。<br />
<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/2085eed0.png" title=""><img src="//ktstg.blog.shinobi.jp/Img/1635168684/" alt="" /></a> <br />
プロジェクトが作成出来たら一旦終了させます。<br />
<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/e0a102ea.png" title=""><img src="//ktstg.blog.shinobi.jp/Img/1635168771/" alt="" /></a> <br />
作成したフォルダの中身はこんな感じ。<br />
<br />
つぎにGitHubの方を設定していきます。<br />
GitHubの自分のページにアクセスして右上のプラスボタンを押しNew repositoryをクリックします。<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/20b95b30.png" title=""><img src="//ktstg.blog.shinobi.jp/Img/1635169250/" alt="" /></a> <br />
<br />
下記のような新しいrepository作成画面になるので<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/6834f56b.png" title=""><img src="//ktstg.blog.shinobi.jp/Img/1635169270/" alt="" /></a> <br />
①今回のプロジェクトネームを入力します。<br />
②Privateを選択。Publicだと誰でも見れるようになってしまう。<br />
③Add.gitignoreをクリックして選択メニューからUnityを選びます。<br />
この時④の部分がmainになっていると思います(masterになっていれば問題なし)<br />
⑤のsettingsをクリックしてRepository default branchの画面にします。<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/c9076694.png" title=""><img src="//ktstg.blog.shinobi.jp/Img/1635169585/" alt="" /></a> <br />
ここがmainになっている思いますのでmasterと入力してUpdateをクリック。<br />
もう一度repository作成画面に戻って④の部分がmasterになっていたらCreate repositoryを押して新しいrepositoryを作成します。<br />
<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/af4b859e.png" title=""><img src="//ktstg.blog.shinobi.jp/Img/1635169853/" alt="" /></a> <br />
出来た画面はこんな感じ。まだ.gitignoreしかファイルがありません。<br />
とりあえずコレでリモートリポジトリは作成出来たので、つぎにアクセス用のアクセストークンを作成します。<br />
作成の仕方はGitHubの方に日本語で丁寧にやり方が書いてあるので参照して下さい。<br />
<a href="https://docs.github.com/ja/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token" title="" target="_blank">https://docs.github.com/ja/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token<br />
</a>作成したトークンは後で使いますのでテキストとして保存しておきます。<br />
<br />
次にSourcetreeの設定を行います。<br />
まずファイルメニューのツール&rarr;オプションを選択します。<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/d9810b00.png" title=""><img src="//ktstg.blog.shinobi.jp/Img/1635174371/" alt="" /></a> <br />
認証タグをクリックして追加を押します。<br />
するとホスティングアカウントを設定という画面が出てきますのでホスティングサービスにはGitHubを、優先するプロコトルはHTTPSを、認証はOAuthを選択してOAuthトークンを読み込みをクリックするとブラウザが立ち上がって承認されると思います。追加されたアカウントをクリックしてデフォルトに設定しておきます。<br />
<br />
最初の画面に戻ってCreateをクリックします。<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/8d66f245.png" title=""><img src="//ktstg.blog.shinobi.jp/Img/1635170629/" alt="" /><br />
</a> <br />
Unityで作成したTest_Projectフォルダを指定して作成をクリック。<br />
<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/fa9d9717.png" title=""><img src="//ktstg.blog.shinobi.jp/Img/1635170790/" alt="" /></a> <br />
フォルダは存在しています。続行しますか？みたいに聞かれるので「はい」を選択<br />
<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/bdc876cd.png" title=""><img src="//ktstg.blog.shinobi.jp/Img/1635173132/" alt="" /></a> <br />
これでローカルリポジトリがTest_Project内に作成されました。<br />
フォルダの中身はこんな感じ<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/4fab9020.png" title=""><img src="//ktstg.blog.shinobi.jp/Img/1635170927/" alt="" /></a> <br />
.gitというフォルダが増えています。（隠しファイル）<br />
<br />
現状ではローカルリポジトリとリモートリポジトリが繋がっていないので繋ぐ設定をします。<br />
まずGitHubのTest_Projectのページに行きます。<br />
緑色のCodeをクリックするとCloneメニューが出てきますのでHTTPSを選択してURLをコピーします。<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/b3061594.png" title=""><img src="//ktstg.blog.shinobi.jp/Img/1635171468/" alt="" /><br />
<br />
</a>次にSourcetreeに戻って・・・<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/bdc876cd.png" title=""><img src="//ktstg.blog.shinobi.jp/Img/1635173132/" alt="" /></a> <br />
画面右上のビックリマークの部分のリモートをクリック。<br />
<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/72c7dd95.png" title=""><img src="//ktstg.blog.shinobi.jp/Img/1635171406/" alt="" /></a> <br />
追加を押します。<br />
<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/dc05175f.png" title=""><img src="//ktstg.blog.shinobi.jp/Img/1635171433/" alt="" /><br />
</a>リモート名は何でも良いみたいですがoriginとするのが普通なようです。<br />
URL/パスですが、先程GitHubのページでコピーしたURLを貼り付けます。<br />
https://github.com/[ユーザー名]/Test_Project.gitとなっていると思います。<br />
でもこれでは駄目で、先程作成しておいたアクセストークンを使います。<br />
https://[アクセストークン]@github.com/[ユーザー名]/Test_Project.git<br />
となるように入力します。<br />
<br />
ここで一旦ローカルリポジトリの状態を見てみると<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/795a19f8.png" title=""><img src="//ktstg.blog.shinobi.jp/Img/1635171870/" alt="" /><br />
</a>プロジェクト名のあとに11391みたいに大きな数字があると思います。<br />
この数字を減らすために・・・<br />
<br />
操作画面のプルをクリックします。<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/5729d87a.png" title=""><img src="//ktstg.blog.shinobi.jp/Img/1635173087/" alt="" /></a> <br />
プルするリモートブランチの部分にmasterを選択してプルボタンをクリック。<br />
masterの表示がない場合は更新を押せば出てくると思います。出てこない場合は何か設定を間違っていると思います。（アクセストークンが正しくないとか、OAuth認証がうまく行ってないとか）<br />
<br />
上手くプル出来るとプロジェクトフォルダに.gitignoreファイルが増えていると思います。<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/b04411d5.png" title=""><img src="//ktstg.blog.shinobi.jp/Img/1635172490/" alt="" /></a> <br />
これでリモートリポジトリからローカルリポジトリにファイルを持ってくる事が出来るようになりました。<br />
<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/9685fde1.png" title=""><img src="//ktstg.blog.shinobi.jp/Img/1635172574/" alt="" /></a> <br />
ローカルリポジトリの状態を見てみると大幅にファイルが減っていると思います。<br />
<br />
実際にコミットして行きます。<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/b14fbaff.png" title=""><img src="//ktstg.blog.shinobi.jp/Img/1635173062/" alt="" /></a> <br />
まず全てをインデックスに追加します。<br />
<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/d0e8a308.png" title=""><img src="//ktstg.blog.shinobi.jp/Img/1635173072/" alt="" /></a> <br />
何でも良いのでわかりやすいコメントを入れて変更をすぐにプッシュにレ点を入れてコミットをクリック。<br />
<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/0da59ffc.png" title=""><img src="//ktstg.blog.shinobi.jp/Img/1635173304/" alt="" /></a> <br />
ファイルが全部なくなったと思います。<br />
<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/50d1a0db.png" title=""><img src="//ktstg.blog.shinobi.jp/Img/1635174524/" alt="" /></a> <br />
GitHubのページにファイルがアップロードされていれば成功です！<br />
<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/49f74925.png" title=""><img src="//ktstg.blog.shinobi.jp/Img/1635173390/" alt="" /></a> <br />
左のHistoryをクリックすると変更遍歴が見れます。<br />
<br />
後はUnityで開発&rarr;変更部分がファイルステータスに追加されていく&rarr;キリの良い所で全てをインデックスに追加してコメント入れてコミットを繰り返すとHistoryが更新されていきます。<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/a456a229.png" title=""><img src="//ktstg.blog.shinobi.jp/Img/1635173737/" alt="" /></a> <br />
前のバージョンに戻したいなーって時は右クリックから、現在のブランチをこのコミットまでリセット（Hard)で元に戻せます。<br />
<br />
別のパソコンで開発したい！って時はクローンを作成すれば簡単です。<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/8198d9ca.png" title=""><img src="//ktstg.blog.shinobi.jp/Img/1635174060/" alt="" /></a> <br />
<br />
URLは先程のhttps://[アクセストークン]@github.com/[ユーザー名]/Test_Project.gitを入力します。<br />
フォルダは任意の場所を指定してクローンをクリックすればOK<br />
<a target="_blank" href="//ktstg.blog.shinobi.jp/File/7eba0ea8.png" title=""><img src="//ktstg.blog.shinobi.jp/Img/1635174204/" alt="" /></a> <br />
同じプロジェクトが別のパソコンでも使えるようになりました。<br />
出来上がったフォルダからUnityを起動させれば同じプロジェクトが開発出来るようになります。]]>
    </description>
    <category>Unity</category>
    <link>https://ktstg.blog.shinobi.jp/Entry/1007/</link>
    <pubDate>Mon, 25 Oct 2021 13:39:36 GMT</pubDate>
    <guid isPermaLink="false">ktstg.blog.shinobi.jp://entry/1007</guid>
  </item>
    <item>
    <title>【プチコン4】CyberBlocker公開しました。Switch用ブロック崩し</title>
    <description>
    <![CDATA[Nintendo Switch用ソフト、プチコン4用ブロック崩し CyberBlocker公開しました。<br />

<blockquote class="twitter-tweet">
<p lang="ja" dir="ltr">プチコン4用 ブロック崩し CyberBlocker公開しました！プチコン体験版で無料で遊べます。面白かったらプチコン4本体も買ってね！<br />
パワーアップを駆使して全13ラウンドを制覇しよう！<br />
最終&beta;版って感じなのでバグ報告大歓迎です！(続<a href="https://twitter.com/hashtag/sbkey?src=hash&amp;ref_src=twsrc%5Etfw">#sbkey</a> 42KX3K394<a href="https://twitter.com/hashtag/smilebasic?src=hash&amp;ref_src=twsrc%5Etfw">#smilebasic</a> <a href="https://twitter.com/hashtag/petitcom?src=hash&amp;ref_src=twsrc%5Etfw">#petitcom</a> <a href="https://twitter.com/hashtag/%E3%83%97%E3%83%81%E3%82%B3%E3%83%B34?src=hash&amp;ref_src=twsrc%5Etfw">#プチコン4</a> <a href="https://twitter.com/hashtag/NintendoSwitch?src=hash&amp;ref_src=twsrc%5Etfw">#NintendoSwitch</a> <a href="https://t.co/sbgdqQKiTY">pic.twitter.com/sbgdqQKiTY</a></p>
&mdash; kt. (@xxxx_kt_xxxx) <a href="https://twitter.com/xxxx_kt_xxxx/status/1439946295850930177?ref_src=twsrc%5Etfw">September 20, 2021</a></blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8" type="text/javascript"></script>
そもそもは<a href="http://ktstg.blog.shinobi.jp/Entry/1004/" title="" target="_blank">反射ベクトルを使って弾を反射させたい</a>なーと思って色々試していたら、これブロック崩し作れそうじゃね？と思って作ってみたら良い感じだったのが始まりです。<br />
元々ブロック崩しが得意じゃなかったのでプレイヤー側を強くしてパワーアップ方式をグラディウスタイプ(クラシックモードはアルカノイド方式)にして10分程度でクリア出来ようにデザインしてみました。<br />
<br />

<div>ダウンロードキー 42KX3K394</div>
<div>Switchをお持ちなら無料体験版で遊ぶことが出来ます。(体験版だと動作が重いです)</div>
<div>1.ニンテンドーeショップでプチコン4で検索。体験版はサーバー利用券無しの方です。</div>
<div>2.プチコン4起動後のトップメニューから作品を見るを選択</div>
<div>3.Rボタンを3回押して公開キー42KX3K394を入力</div>
<div>4.ローカルからゲームを起動すれば遊べます。</div>
<div>体験版は8時間に1回しかダウンロード出来ないのでご注意下さい。<br />
<br />
6月下旬から作り始めたのですが、当初は一ヶ月くらいで簡単に作って公開してしまおうと思って作り始めたら、作っているうちにアレもコレもと追加して結局三ヶ月くらいかかってしまいましたが、なかなか良く出来たのではないかと自分では思っています。</div>]]>
    </description>
    <category>プチコン</category>
    <link>https://ktstg.blog.shinobi.jp/Entry/1006/</link>
    <pubDate>Wed, 29 Sep 2021 03:45:34 GMT</pubDate>
    <guid isPermaLink="false">ktstg.blog.shinobi.jp://entry/1006</guid>
  </item>

    </channel>
</rss>