ボクステ公式ブログ

2026年
2025年
2024年
カテゴリ
3D

Ad SHOOt(アドシュー)通常バナー

Pay-easy(ペイジー)対応ATMなのに通帳で支払えないケース
Pay-easy(ペイジー)は、税金や公共料金を支払うためのシステムですが、Pay-easy対応済みのATMでも払込みできないことがあるのでご紹介します。

当社の場合、青森みちのく銀行のATMを利用しています。

Pay-easyメニューでは 通帳 または キャッシュカード を入れるように指示されるのですが、当社名義の通帳を入れたのち必要な番号、金額等を全て入力した最後で 「お取り扱いできません」と表示されて支払いに失敗します。

一方、キャッシュカードを入れた場合は正常に操作することが可能です。

なぜ、通帳の場合のみ失敗したのかと申しますと、通帳の種類 が「法人向け」であったためです。

青森みちのく銀行の 公式サイト によりますと、 「個人向け」では 通帳とキャッシュカードの両方に対応しているが、「法人向け」は キャッシュカード にのみ対応しているとのことです。

他の金融機関をご利用の方も、Pay-easy対応ATMに通帳を入れてエラーメッセージが出た場合、キャッシュカードでの支払いを試してください。


カテゴリ  会社運営
[Unity]string(文字列)の中に複数の変数を代入する方法[$"{}"][Replace]
Unity6.2(Ver.6000.2.7f2)でのスクリプトを想定しているため、以下の記述例は
C# です。

<用語>

変数 … 値を入れる箱のようなもの。
変数の型 … 変数に入れることができる値の種類。
string型 … 値が文字列の変数。
int型 … 値が整数の変数。
bool型 … 値がtrue(真)かfalse(偽)の変数。

<変数の例>
Sample.cs(C#)
string name = "Alice";
この場合、name(名前)というstring型の変数に Alice という文字列が入っています。
文字列はダブルクォーテーションで囲みます。
name="Takashi"; にすると、nameの中身が Alice から Takashi に変わります。 すでにnameの型はstringであると宣言しているので、以降は先頭にstringはつけず name="Ken"; と書いて良いです。
Sample.cs(C#)
int age=18;
この場合、age(年齢)というint型の変数に18という整数が入っています。
age=25; にすると、ageの中身が18から25に変わります。

<変数の代入>
次の文章テンプレートがあるとします。
「私の名前は〇〇で、年齢は△△歳です。」

〇〇にname、△△にageを入れる場合には次のような方法があります。

+ で繋ぐ方式
Sample.cs(C#)
string template = "My name is "+ name + " and I am "+ age + " years old.";

これは、"固定の文字列"+変数+"固定の文字列". のようにstring型の文章を繋ぐ形式で、変数が多くなると読みにくくなります。

実際に、Unity上でデバッグログとして表示する際には、以下のC#スクリプトを作ってヒエラルキーの空いたところにドラッグ&ドロップするか、空のオブジェクトを作ってそのインスペクターにドラッグ&ドロップしてからゲームを再生してください。

Sample.cs(C#)
using UnityEngine;

public class Sample : MonoBehaviour
{
string name = "Alice";
int age = 18;

void Start()
 {
    string template = "My name is "+ name + " and I am "+ age + " years old.";
  Debug.Log(template);
 }

}
デバッグログに+で変数を繋ぐ方式の文字列を表示

代入後に表示される文章例は「My name is Alice and I am 18 years old.」となります。

なお、これはstring型全般の特徴ですが、変数名として代入する時は、ダブルクォーテーションが不要です。


$"{  }" 方式
Sample.cs(C#)
string template= $"My name is {name} and I am {age} years old.";
この方法は、変数が多くなっても見やすいのが特徴です。

先頭に$をつけ、変数を{ }で囲むことにより、変数を文字列の中に直接代入できます。

+方式の時は、 " and I am "、" years old." のように" "で括った文字列の前後に変数が入った完成形を考慮して半角スペースを入れなくてはなりません。

一方、 $"{  }" 方式では、見かけ通りスペースを取れるため簡単です。

もし変数名の周りに{}をつけなかった場合、そのまま「name」という文字列として表示され、変数として働きません。

コンソールのデバッグログでキャラクターの名前を表示したい場合などは、
Sample.cs(C#)
Debug.Log($"name: {name}");
と記述すれば、「name:Alice」というように、 {}で囲んだ方のnameだけ、変数の中身が表示されるので見出しラベルとの使い分けができます。

bool型でも同様に
Sample.cs(C#)
bool isPlayer=ture;//プレイヤーかどうか
Debug.Log($"isPlayer: {isPlayer}");
と記述することにより、「isPlayer:true」と、{}で囲んだ方だけ変数の中身が表示されます。


Replace方式

上記の方法でも困るのがゲーム内での翻訳時です。

ゲーム内には、player_nameやnpc_name、enemy_nameなど複数の名前用変数が混在しがちです。

翻訳テンプレート内に{player_name}と書いた場合、呼び出し側のスクリプト内に string player_name;という変数があれば、その中身(例:"Alice","Takashi"など)が代入されます。
しかし、 npc_nameを入れたい時でもplayer_nameしか呼び出せません。

共通のテンプレートを使いまわして、異なる変数を代入する時に使えるのがRepcalce(置き換え)です。

Sample.cs(C#)
using UnityEngine;

public class Sample : MonoBehaviour
{
string player_name="Alice";
string npc_name="Tom";
int player_age=18;
int npc_age=30;
bool isPlayer=false;//プレイヤーならtrue,それ以外ならfalse
string template = "";
string language = "en";//言語選択は他でしているものとします

private void Start()
 {
  switch (language)
  {
   case "en"://英語の時
    template = "My name is {name} and I am {age} years old.";
    //$を付けず、変数ではなくStringの一部として扱います
    break;

    case "ja"://日本語の時
    template = "私の名前は、{name} です。年齢は {age} 歳です。";
     //同じく$を付けず、単なるStringとして扱います
   break;
    default:
     template = "My name is {name} and I am {age} years old.";
    break;
   }

  if (isPlayer) //if (isPlayer==true)と同じ意味:プレイヤーの時は
  {
   string result = template.Replace("{name}", player_name).Replace("{age}", player_age.ToString());
   Debug.Log(result);
   }
  else //上記以外の全ての場合(つまりプレイヤーではない時)
  {
   string result = template.Replace("{name}", npc_name).Replace("{age}", npc_age.ToString());
   Debug.Log(result);
  }

  //player_age.ToString() では、int型であるplayer_age = 18 を string型の"18"に変換しています。

 }
}
Replaceの中で、{name} をさらにダブルクォーテーションで囲み "{name}" としているのは、テンプレート内の {name} の部分を一つの文字列とみなし、変数 player_name の中身 Alice と置き換えるためです。

bool型のisPlayerがtrue(プレイヤーである)時は、{name}にplayer_name、{age}にplayer_ageを代入し、それ以外の場合は、{name}にnpc_name、{age}にnpc_ageを代入しています。

このように、代入する変数が異なっても同じテンプレートで対応できます。

isPlayerがfalseだった時の表示
isPlayerがfalseの時の表示。プレイヤーのAliceではなくNPCのTom情報になっている。

Replaceと$"{}"の併用

文字列の一部に特定の色を付けるなど装飾したい時も文章テンプレート内にコードを書くのは煩雑ですし、後で文字色を変更したい時にテンプレート内のカラーコードを全て書き換えることになります。

Unityの文字は、TextMeshProを使うと、<color=#FF0000>赤文字</color>のように、特定の部分だけ色を変えることができます。

Unityプロジェクトのヒエラルキー(デフォルトでは画面左端)の領域で右クリックし、UI>Text TextMeshPro を選択するとCanvasとその子としてのText用オブジェクトが作成されます。

ヒエラルキー欄
YourProject
 |_Canvas
  |_Text(TMP)

Sample.cs(C#)
using UnityEngine;
using TMPro; //TextMeshProを使うための宣言

public class Sample : MonoBehaviour
{
 public TextMeshProUGUI text_Dialogue;
//↑TextMeshPro要素を持つオブジェクトをインスペクターにアタッチ(ドラッグ&ドロップ)
string player_name="Alice";
int player_age =18;
string template = "";
string language = "en"; //現在の言語

void Start()
 {
  string coloredName = ColorWrap(player_name,"#FF0000"); //赤
  string coloredAge = ColorWrap(player_age.ToString(),"#00FF00");//緑

  string ColorWrap(string text, string hex)
  => $"<color={hex}>{text}</color>";

//[悪い例] color = {hex} のように=の前後にスペースが空いているとTextMeshProのフィールドでタグと見なされないので隙間を作らない

  switch (language)
  {
   case "en": //英語の時
     template = "My name is {name} and I am {age} years old.";
    //$を付けず、変数ではなくStringの一部として扱います
    break;

   case "ja": //日本語の時
     template = "私の名前は、{name} です。年齢は {age} 歳です。";
     //同じく$を付けず、単なるStringとして扱います
    break;

   default:
    template = "My name is {name} and I am {age} years old.";

    break;
   }

    string result = template.Replace("{name}",coloredName).Replace("{age}", coloredAge);

    text_Dialogue.text=result;
  //TextMeshPro要素を持つオブジェクトのテキストに、作った結果を入れます
 }
}
上記コードをUnityのヒエラルキーに置き、インスペクター(通常画面右端パネル)内のText_Dialogue欄に先ほど作成したTextMeshPro要素を持つゲームオブジェクトをドラッグ&ドロップしてアタッチすることにより、結果(result)の文字列がゲーム内にテキスト表示されます。

TextMeshProのウィンドウにカラーコードタグ付きの変数代入文字列を入力


部分解説
string ColorWrap(string text, string hex)
  => $"<color={hex}>{text}</color>";
ColorWrap に、text(文字列)と hex(16進数のカラーコード)を渡すと、TextMeshPro用のカラータグでstring型を囲みます。
このマークアップ言語方式は、Webサイトを作る時のHTMLとよく似ています。

string coloredName = ColorWrap(player_name,"#FF0000"); //赤
"#FF0000" とダブルクォーテーションで囲っているのは、単なる文字列としてタグの内部へ代入するためです。

player_name つまり現在だと Alice の前後にカラータグを入れた次の文字列を作っています。

<color=#FF0000>Alice</color>

これをTextMeshProのテキストウィンドウに入れると、Aliceと色付きで表示されます。

TextMeshProのウィンドウにカラーコードタグ付きの変数代入文字列を入力
Unity内でゲームを実行時、TextMeshProのTextウィンドウにカラータグ付き文字列が生成されている。

結果(result)部分を抜粋すると次の通りです。
string result = template.Replace("{name}",coloredName)
テンプレート内の文字列 {name} を、coloerName つまり、赤い色 かつ 変数 player_name の中身に置き換える という命令となります。

同様に、
string result = template. /*中略*/.Replace("{age}", coloredAge);
では {age}部分を、coloredName つまり、カラーコード #00FF00(緑)かつ 変数 player_age の中身 に置き換えています。

繋げると、以下の表示となります。

英語  My name is Alice and I am 18 years old.
日本語 私の名前は、Alice です。年齢は 18 歳です。

※緑文字は白が背景だと視認性が悪いため黒背景にしていますがC#のコードには背景色変更コードが含まれません。

以上のように、Replace方式の中に$"{}"方式を含み2重代入することで、変数内の変化と文字色の変化を同時に編集できます。

これは、ゲームログやシステムメッセージに利用できで、npcやplayerの名前、獲得したアイテム名個数などを色分けして見やすくできます。

当ブログに掲載されたコードはコピーペースト自由です。権利表記も要りません。無料の趣味でも有料の仕事用コードでも、お好きなようにお使いください。

※上記のままでは同じテキスト内容と文字色しか表示されませんので、変数名や型、値を改造しておつかい下さい。


カテゴリ  ゲーム開発
Unity6.2でマウスの左クリックと右クリックを判定する方法
Unity6.2(Ver.6000.2.7f2)でImageをマウスでクリックした際、それが左クリックだったのか、右クリックだったのか判断する方法を紹介します。

Unity6では、case -1:などボタン割当による判別ができません。新しいInput Systemでは、どのボタンをクリックしても全て-2になるという報告例があります。
そのため、新しいInput Systemに対応した判別法を述べます。

前提

  1. シーン内のどこかに「EventSystem」がある。
     存在しない場合は、Hierarchy>右クリック>UI>EventSystemで作成してください。

  2. UI用Canvas>Image要素を持ったオブジェクトがある。
     存在しない場合は、Hierarchy>右クリック>UI>CanvasでUICanvasを作成し、その子要素としてImageを作成してください。
Hierarchy
YourProjectScene
 |_Canvas
 | |_Image
 |_EventSystem

※EventSystemは、HierarchyのScene直下にあるとは限りません。オブジェクトやPlayerInputの中に生成されている場合もあります。その場合でも役割を果たすため、新規に追加しないでください。

スクリプトコード

クリックの左右を判定するために以下のスクリプトを作成します。

<新規スクリプトの作成>
Assets内にScripts等のフォルダがあればその中で右クリック>Create>MonoBehabior Scriptを左クリックし、新しくできたファイルにお好きな名前(例)「ClickDetection」を入力します。

なお、後からファイル名を変更した場合は、ファイル内の「public class 〇〇〇〇〇」部分も同じ名前に変更してください。両者が異なるとエラーとなります。

<コードの中身>
ClickDetection.cs
using UnityEngine;
using UnityEngine.EventSystems;//追加

public class ClickDetection :MonoBehaviour, IPointerClickHandler//追加
{
 public void OnPointerClick(PointerEventData pointerEventData)
 {
  switch(pointerEventData.button)
  {
   case PointerEventData.InputButton.Left:
    //左クリックした時の処理
    Debug.Log("Left Click");
    break;
   case PointerEventData.InputButton.Right:
    //右クリックした時の処理
    Debug.Log("Right Click");
    break;
   case PointerEventData.InputButton.Middle:
    //ホイールクリックした時の処理
    Debug.Log("Middle Click");
     break;
  }
 }
}

上記のスクリプトを、先ほど作成したImage要素を持つオブジェクトへドラッグ&ドロップしてください。

シーンビュー上部の▷をクリックしてゲームを実行(Play)します。
Image要素をクリックすると、UnityのConsoleに「Left Click」や「Right Click」と表示されるはずです。

クリックボタン左右中識別テスト
クリックボタン判定中のコンソール

コードは自由にコピーペースト、改造してお使いください。

【クリックの左右を判定すると何ができるのか?】

例えば、ある一つの敵対オブジェクトに対して左クリックで攻撃、右クリックで防御するなど、複数の機能を割り当てることができます。

当社で開発中のシミュレーションゲームでは、アイテム欄整理時にアイコンを左クリックした時は1個移動、右クリックした時は10個移動するようにしています。

カテゴリ  ゲーム開発
銀行・金融機関にSteam(Valve社)との取引情報を提出する方法
昨今、資金洗浄(マネロン)防止のため銀行・金融機関(以下、「銀行等」とします)から取引情報の確認を受けることが増えました。

当社では、Steamでゲームをダウンロード販売し、売上からレベニューシェアを受け取っています。

Steamを運営するValve社からの売上はUSドル、つまり外貨で送金されてきます。
そのため、銀行等からは特に「外貨取引に関する取引情報」を求められることが多いでしょう。
以下、機密抵触を避けるため、詳細と画像は省いて説明します。

取引について次の情報・添付資料を要する可能性が高いです。

  1. 取引相手の名称
  2. 取引相手の業種
  3. 取引理由
  4. 取引の根拠になる契約書
  5. 取引相手からの送金額≒着金額が確認ができる書類

取引相手の名称は、Steamではなくその運営会社の「Valve Corporation」となります。
業種は、長文を避け、取引に関わりのある事業のみ一文で表現した方が審査に向いています。

取引理由がカテゴリー選択式の場合、「無形商材」>「著作権/ライセンス」に入るそうです。

取引の根拠になる契約書は「STEAM配信契約」です。

契約した覚えがない、どこにやったか分からないという方もおられるでしょうが、この契約書には、SteamWorksでアカウントを作成した際に署名しており、 SteamWorks管理画面>ユーザーと権限>署名済みの契約>「ソフトウェア配信」>右端の「Click to view」から確認できます。

取引相手からの送金額≒着金額が確認できる書類は、SteamWorks管理画面>「財務」>「Reports」>(最新月)>「Payment History」(支払履歴)のスクリーンショットです。

「Net Payment」はその月ごとに受け取れたはずのレベニューシェアです。しかし、支払最低しきい値(Min Payment Threshold)を超えなかった場合は翌月に繰り越されます。
今回分の送金額=繰越合計金額はどこにも記載されていません。
よって、当社の場合はスクリーンショットに画像編集ソフトで次のことを書き入れて提出しました。

  • 今回の支払いに掛かるすべての「Net Payment」額を枠で囲って強調
  • 枠内の合計金額を明記
  • 合計額と着金額の差額は、中継銀行の手数料であること推測される点

これで審査を通りました。他の銀行等ではまた事情が大きく異なるでしょうがご参考までに。

なお、通常の企業間取引ですと、請求書・領収書・支払明細書のいずれかを提出すれば明確な送金額の根拠となります。


【関連記事】ボクステブログ|Steamから売上を受け取る方法


カテゴリ  Steam関連
VRChatアバター骨盤と大腿骨180°エラーの原因と直し方
VRChat向け壮年~老年男性アバター『ハビ -Habi-』を BOOTH にて販売中です。

ハビ開発中に起きた問題ですが、VRCへアップロードする際、「The angle between pelvis and thigh bones should be close to 180 degree.」というエラーが出ていました。

このエラーは、VRCアバターが正しく動作するために、骨盤と大腿骨の間の角度が180度に近いことが必要であることを示しています。フルトラッキングの際に問題になるそうで、アップロード自体は可能です。

エラー原因は、ボーンの大腿骨upper_leg.Rおよびupper_leg.Lの角度が床に対して垂直ではなかったことでした。これにより大腿骨(upper_leg)と骨盤(hips)が並行でなくなります。

骨盤と大腿骨の角度エラー

これを垂直に修正したところエラーが出なくなったところを見るに、骨盤(hips)、両大腿骨(upper_leg.R/upper_leg.L)の3点それぞれから伸ばした垂線*同士が全て平行になっている必要があるようです。

*垂線…90°直角に交差する線

骨盤と大腿骨の角度が正しく平行である図

hipsは上向き、upper_legは下向きのボーンです。よって、上下反転で平行=180°エラーなし、上下反転で平行でない=180°エラーあり、ということになるものと思われます。

骨盤と大腿骨の骨は八面体にすると逆さまの関係であることが分かる


カテゴリ  3D
ゲームの次回作「縄文シミュ」を制作中
「市立カクレザ図書館」「Ad SHOOt(アドシュー)」に続く第三作目を制作中です。

ジャンルは縄文生活シミュレーションです。

縄文ゲームの画像
縄文ライフ(仮称)

シミュレーションには大別して二つの視点があります。一つは操作可能なプレイヤーキャラを中心にしたもの、もう一つはプレイヤーキャラが不在の神の目視点です。

制作中のゲームでは二つの視点を併せ持ったものになります。

プレイヤーは主人公を操作して釣りや採取、伐採、クラフトや土器のデザイン、狩りができます。

縄文ゲームの釣り
釣り

縄文の伐採
植物自動生成・成長・伐採・ツール耐久値減少

縄文土器デザイン
プレイヤーが土器をデザインできる

縄文土器クラフト
粘土を消費して土器クラフト

村人NPC達は、自律的に行動し1日の生活を朝から晩まで行います。

NPCの移動
NPCは性格・職業・生活スタイルを持ち自動的に行動

NPC同士の会話
近くにいるNPC同士で会話

プレイヤーは村人に指示を出して建築を行わせることができます。
未実装ですが、プレイヤーのデザインした土器をNPCに増産させたり、一部の村人を交易のために数人選択して任意の地域へ送り出したり、転職をさせたり、一時的に違う作業を行わせることが可能になる予定です。

NPCの建築
NPCに建築指示

以上のように【プレイヤー視点】サバイバル・クラフト・スローライフ × 【神の目視点】村作り・技術進歩・労働者配置を両方楽しみながら縄文生活をシミュレートして、村を発展させていくことが目的のゲームです。
難易度は低くカジュアルに広く遊んでいただきたいので、飢えや寒さ、乾きによってNPCが次々に死んでいくというシビアな作りにはしないつもりです。

いくつかのゲームシステムを作成済みです。

持ち物がいっぱい
詰め放題式インベントリの満杯判定

インベントリリンク 魚画像は仮置き
インベントリ連結とアイテム移動

天気と明るさの変化
天気と時間帯による明るさの変化

貝や枝、石などの拾い物自動生成も作成済みです。

小さな文字が多くなりがちであるためPC専用ゲームになる可能性が高いです。(モバイル・携帯ゲーム機移植なし)
まだまだ制作序盤と言ったところですが目標としては来年中に形にしたいです。


カテゴリ  ゲーム開発
TuneCore配信からTikTok反映まで何日?|自作曲がミュートされる
7月3日にTuneCore Japan様(以下、「TuneCore」とします)経由で弊社開発のシューティングゲーム 「アドシュー 」のオリジナルサウンドトラック(以下、「サントラ」とします)を配信しました。

その配信先一覧にTikTokも含まれているのですが、弊社のTikTokアカウント からサントラ楽曲を含むショート動画をアップロードした直後、「著作権侵害の恐れがある楽曲を使用している」という理由でミュートされてしまいました。

TikTokでは、多数の著作権保護済み楽曲をBGMとして選択できるのですが、そこにサントラ曲が追加されたことで、ようやくミュートされることなくショート動画を上げることができました。
※動画に含まれる楽曲の音量は0にしてTikTokに登録されているサントラ楽曲のみ使用。

配信開始日時:7月3日(木)午前0時
TikTok反映日時:7月9日(水)日没~夜10時頃

日数:6日と20時間ほど
営業日のみカウント:4日と20時間ほど

楽曲や審査の条件によって異なるようですが「1週間が経過する少し前」という感覚です。

他の音楽ダウンロード・ストリーミングサイトでは配信と同時反映が多かったのですがTikTokでは即時ということがなさそうでした。

「いつになったらTikTokに自作曲が反映されるんだ?」「オリジナル曲をアップしたのに消される!著作者は自分なのに!」とやきもきしている方のご参考になれば幸いです。

ちなみにサントラに収録されていない合成音声によるオリジナル曲は、ミュートされませんでした
ミュートされたサントラ収録曲使用のショート動画が30秒に満たなかったのに対し、合成音声動画は3分以上あったのも良かったのかもしれません。


カテゴリ  広報
Switch版アドシュー7/17発売リリース掲載情報
7月17日発売の Nintendo Switch版「アドシュー」 について、プレスリリースを公開しました。

【外部リンク】
PR TIMES様 | Nintendo Switch™版「アドシュー」の発売日が7月17日(木)に決定|本日7月10日から予約受付開始|予約&発売記念セールで10%OFF|オリジナルサウンドトラックも配信中
https://prtimes.jp/main/html/rd/p/000000007.000137856.html


7月31日まで10%OFFのセールで、予約受付は7月10日から始まっております。

予約&ダウンロード購入 は こちら

リリースを多数の媒体で取り上げていただきました!ありがとうございます。
(以下、ショップ新着情報を直接紹介して下さったものを含みます)

記事一覧(順不同)

いちごあん様

イケメン×STG!Nintendo Switch™版「アドシュー」2025年7月17日発売決定!予約開始&記念セール実施中!!
https://ichigo-an.com/archives/93711

MONOLAB様

【Switch版 アドシュー】あの広告イライラを撃破!? 異色すぎる快感STG!
https://monolab.tokyo/articles/3487

GAMERS ZONE様

広告を撃ち落とせ!フルボイス弾幕STG『アドシュー』がSwitchに登場
hhttps://gamerszone.jp/post/27764

GAMER様

「広告×イケメン×STG「Ad SHOOt」のSwitch版が7月17日にリリース!サントラも配信中
https://www.gamer.ne.jp/news/202507100063/

Nintendo Switch 2 情報ブログ<非公式>様

Switch版『アドシュー』の発売日が2025年7月17日に決定!
https://ninten-switch.com/adshooot-for-switch-release-deta

ベストカレンダー様

7月17日発売!Nintendo Switch版『アドシュー』予約開始と10%割引セール
https://bestcalendar.jp/articles/press/63471

GamePress AI (ゲームプレス)様

広告撃墜STG「アドシュー」Switch版7/17発売!予約受付中
https://gamepress.jp/archives/158799

げーまと様

Nintendo Switchで楽しめる新感覚STG「アドシュー」の予約開始と特別セール情報
https://news.game.matomame.jp/article/74c1c47a-5d2c-11f0-a660-9ca3ba08d54b#gsc.tab=0

弘前経済新聞(from PR TIMES)様

Nintendo Switch(TM)版「アドシュー」の発売日が7月17日(木)に決定|本日7月10日から予約受付開始|予約&発売記念セールで10%OFF|オリジナルサウンドトラックも配信中
https://hirosaki.keizai.biz/release.php?id=434537

Infoseek News(from PR TIMES)

Nintendo Switch(TM)版「アドシュー」の発売日が7月17日(木)に決定|本日7月10日から予約受付開始|予約&発売記念セールで10%OFF|オリジナルサウンドトラックも配信中
https://news.infoseek.co.jp/article/prtimes_000000007_000137856/

日経COMPASS(from PR TIMES)様

Nintendo Switch(TM)版「アドシュー」の発売日が7月17日(木)に決定|本日7月10日から予約受付開始|予約&発売記念セールで10%OFF|オリジナルサウンドトラックも配信中[ボクステ]
https://www.nikkei.com/compass/content/PRTKDB000000007_000137856/preview

Web東奥(from PR TIMES)様

Nintendo Switch(TM)版「アドシュー」の発売日が7月17日(木)に決定|本日7月10日から予約受付開始|予約&発売記念セールで10%OFF|オリジナルサウンドトラックも配信中
https://www.toonippo.co.jp/articles/-/2062427

秋田魁新報電子版(from PR TIMES)様

Nintendo Switch(TM)版「アドシュー」の発売日が7月17日(木)に決定|本日7月10日から予約受付開始|予約&発売記念セールで10%OFF|オリジナルサウンドトラックも配信中
https://www.sakigake.jp/news/article/20250710PT0001/

サードイノベーション|HokkaidoDays様

Nintendo Switch版『アドシュー』が7月17日に登場!予約受付開始と特別セール情報
https://hokkaido.publishing.3rd-in.co.jp/article/51b9b29e-5d2c-11f0-8a6c-9ca3ba0a67df#gsc.tab=0

newStage(誰でも編集できるSTG系ニュースサイト)様

2025-07-10 【同人・インディ】 [NSW] Nintendo Switch™版「アドシュー」の発売日が7月17日(木)に決定
http://stg.liarsoft.org/c20250710-111015

チバテレ+(from Gamer)様

広告×イケメン×STG「Ad SHOOt」のSwitch版が7月17日にリリース!サントラも配信中
https://www.chiba-tv.com/plus/detail/202507511634

サードニュース様

Nintendo Switch向けシューティングゲーム「アドシュー」登場!予約特典も見逃せない
https://news.3rd-in.co.jp/article/0a5565a8-5d2a-11f0-bc81-9ca3ba083d71#google_vignette

Final Weapon様

Ad SHOOt is Coming to Nintendo Switch on July 16
https://finalweapon.net/2025/07/09/ad-shoot-is-coming-to-nintendo-switch-on-july-16/

Crazy game community.it様

Ad SHOOt arriva su Switch il 16 Luglio
https://www.crazygamecommunity.it/ad-shoot-arriva-su-switch-il-16-luglio/

Go Nintendo様

Ad SHOOt set to release July 16th on Switch
https://gonintendo.com/contents/50589-ad-shoot-set-to-release-july-16th-on-switch"

Nintendo BOY様

Ad SHOOt está a caminho do Switch — Um SHMUP bullet hell onde você atira em propagandas fictícias
https://nintendoboy.com.br/2025/07/ad-shoot-esta-a-caminho-do-switch-um-shmup-bullet-hell-onde-voce-atira-em-propagandas-ficticias/

Universo Nintendo様

Ad SHOOt ganhará versão para o Switch na próxima semana
https://universonintendo.com/ad-shoot-ganhara-versao-para-o-switch-na-proxima-semana/

GEMATSU様

Ad SHOOt coming to Switch on July 16
https://www.gematsu.com/2025/07/ad-shoot-coming-to-switch-on-july-16

GAMESENSE(from GEMATSU)様

Ad SHOOt coming to Switch on July
https://gamesense.co/game/ad-shoot/news/discuss/ad-shoot-coming-to-switch-on-july/

GAME SURF様

Ad SHOOt, lo shmup anti-pubblicità dal 16 luglio su Switch.
https://www.gamesurf.it/news/ad-shoot-shmup-anti-pubblicita-16-luglio-switch

RUTAB.NET様

Bullet-hell шутер Ad SHOOt выйдет на Nintendo Switch 16 июля
https://rutab.net/b/video-games/2025/07/10/bullet-hell-shuter-ad-shoot-vyydet-na-nintendo-switch-16-iyulya.html#cut

玩一玩様

射击游戏《Ad SHOOt》Switch版将于7月16日发布
https://www.wywyx.com/news/202507/510621.html

Nintenderos様

Ad SHOOt – 16 de julio de 2025
https://www.nintenderos.com/2025/07/and-roger-we-were-here-y-mas-juegos-se-aproximan-a-nintendo-switch/


反省点:PR TIMES様のエディタ・タイトル欄にて™(トレードマーク)のような環境依存文字を使うと、メールの件名として配信された際に(TM)表記になるなど正しく反映されないことが判明


カテゴリ  広報 ゲーム開発
phpで<head>を共通化して<title>だけページ別にする方法
当ブログは、元々すべてhtmlで作成していましたが、先日phpに変更しました。

それによりページの共通パーツ(ヘッダー等)が一括変更できるようになりましたが、ページタイトルがすべて 「ボクステ株式会社 | 公式ブログ」に統一されてしまいました。

そこで、「ボクステブログ |【個別の記事タイトル】」と異なるものになるよう変更しました。

phpファイルの作成方法、ブラウザでphpを開く方法については、こちらの記事もどうぞ。

ヘッダーの共通化

ボクステ公式ブログのページ構成
ボクステ公式ブログのページ構成

現在のページ構成は以下の通りです。

blog-entry-50.php 記事ページ全体
  |_header.php htmlの<head>部と上部メニュー
  |_blogmenu.php 記事年月やカテゴリ、バナー
  |_entry50.php ブログ記事部分

一つの記事ページに共通ヘッダーを記述したphpファイルを丸ごと読み込んでいます。

header.php
<!DOCTYPE html>
<html lang="ja" >
   <head >
     <meta charaset =" UTF-8 ">
     <title>
ボクステブログ<?php if (!empty($page_title )) { echo"|" .$page_title ; } ?></title>
  </head >

「header.php」の中には、htmlの<head>~</head>部分をすべて含んでいます。

この「header.php」を各ブログ記事のphpファイルで引用する方法は以下の通りです。
blog-entry-50.php
<?php
$page_title = "phpで<head>を共通化して<title>だけページ別にする方法";

include ( 'header.php' );
?>

このphp形式での記述は、ブログ記事ファイル「blog-entry-50.php」の一番上、先頭に書いてあります。
その後は何の宣言もなしでhtml用の記述<div class="blog_entry">を続けています。

上記二つのコード例を解説します。

includeについて

「blog-entry-50.php」の中で include ('header.php'); と記述することで、「header.php」の内容をすべてページ内に引用しています。

$page_titleについて

「blog-entry-50.php」の中に

$page_title = "phpで<head>を共通化して<title>だけページ別にする方法";

と記入したものが、「header.php」内の

<title>ボクステブログ<?php if (!empty($page_title)) {echo<"|" .$page_title ; } ?></title>

部分に引用されます。

「if (!empty($page_title))」は、「$page_titleがempty(空)ではない時に」という意味の条件式です。
その後に続く「{echo<"" .$page_title; } ?>」は、 「ボクステブログ」という必須パーツの後に  という区切り用の縦線を入れてから $page_titleの中身を入れ、 ページタイトルを作りなさい、という命令です。

つまり、$page_title が空ではなかったため、

「ボクステブログ|phpで<head>を共通化して<title>だけページ別にする方法」

というタイトルが<head>内の<title>要素となったのです。

もしも$page_titleが空だった場合、「ボクステブログ」だけがタイトルとして表示されます。ブログのトップページなどはそれで足りるので個別の$page_titleはつけていません。

ページタイトルを付けると何が良いの?

ページタイトルは、ブラウザの上部タブやブックマークのタイトル、Google等の検索結果として表示されます。


ブラウザのタブに表示されるタイトル
ブラウザのタブに表示されるタイトル

ブラウザでは長いと全て表示しきれませんが、検索の際には優先的に取得される文字情報であるため入れておいた方がよさそうです。
また外部からリンクする際にもタイトルとして取得・表示されることがあります。

今回の修正前に、全てのブログ記事でタイトルが共通だったのは、header.phpの記述が
<title>ボクステ株式会社|公式ブログ</title>と静的であったため、動的に変更できなかったからです。
なお、固定部が長すぎるため、省略して「ボクステブログ」としました。

blogmenu.phpの解説は省略

可変ページタイトルには直接関わらないため省略しましたが、「header.php」同様、includeで丸ごと読み込んでいます。

以前は、月が替わる度全てのページにそのカテゴリー 例えば 「2025年 5月」を手動でコピペするという恐ろしく原始的なサイト作りをしていました。

また、上部の自社ゲームバナーを、体験版や製品版、プラットフォームの変更ごとに差し替えたい時も、全ページ手動コピペをしておりました。

それが現在は「blogmenu.php」内の一か所を変更するだけで50ページ超を一括更新できるのでブログの更新がとても気楽になりました。

【関連記事】
ボクステブログ | ブラウザにおけるphpファイルの開き方


カテゴリ  Web開発