[覚書]Unityで使用するactionとevent具体例

只今誠意制作中のゲームで、仕様に躓いて知識を覚えるまで時間を要した箇所のメモを残します。
event機能を忘れないため、少し具体的なコードを載せた覚書メモになります。
まだ理解の途中ですが、自分が忘れないようにする為に記述します。

※この記事では、Unity上でのdelegateやeventについては詳しく書きません。

使用例
「プレイヤー」オブジェクトの点数が変化するたびに、「テキスト」オブジェクトがデバッグlogコメントを出す。

2つのオブジェクト間のデータ更新を、上記の仕様をUnityの点数変化の参照に対して「update」メソッドを使わずに、コードを書こうと構築したものが下記になります。

「HogeEventPoint」、「HogePointUp」をアタッチしたオブジェクトと「HogeLog」をアタッチしたオブジェクトを用意します。
最後に「HogeEventPoint.cs」をシリアライズフィールドされている「HogeEventPoint」、「HogeLog」に参照させたら完成です。

始めに、ZorXキー押すとポイントを入力されてログが出力されます。
次に、最初に押されたキー以外を押すと、ポイントが変わりログが出力されます。
以前のキーと同じキーを押した場合、ポイントも変わらずログも出力されません。

今回記述したコードは、ゲーム内で採用されたモノの最小構成になります。
別オブジェクトの値が変化したら、変化した値を取得して動作したい時に便利です。


プレイヤーオブジェクトの取得点数が変わった変化を受け取り、UIオブジェクトのテキストを変更する。

こういった具体的な動作の足掛かりになればと思い記事を書きました。

タイトルにある、「action」、「event」、そして元になっている「delegate」については、今後自分が学んだ範囲で記事を書いていこうと思っています。

コミックマーケット96当選しました

2019/08/09~12に開催される、コミックマーケット96に参加します。
参加日は4日目の8/12

南地区“ム”ブロック-14b
PHTR-CNZにて、新作育成STGを頒布予定です。

よろしくお願いします。

OpenCVforUnity仕様メモ1

忘れないように

UnityアセットのOpenCVforUnity購入から1ヵ月ほど経ち、やっとの事でウェブカメラ映像をグレースケールに処理することに成功。
基本的な操作であるグレースケール出力まで、時間をかけすぎたという反省の意味も込めて、ブログに残します。
練習も兼ねてGitHubでのメモ用コード公開は今後も行っていきます。
最後の行にソースコードも貼り付けています。

GitHub公開はこちら

公開用のコードは単純な画像処理を記述になっています。これは後で見直した時に最低限の動作を思い出すためです。
実制作中のコードやゲームオブジェクトはもう少し機能が多いです。

バーチャル体を動かす為に購入と勉強を始めましたが、想像以上に苦戦しました。
自由にバーチャル体を動かせるまでもう少し時間がかかりそうです。

以下ソースコード

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using OpenCVForUnity.CoreModule;
using OpenCVForUnity.ImgprocModule;
using OpenCVForUnity.UnityUtils;

public class HogeWebCamOpenCvUnity : MonoBehaviour
{

//画像処理後の映像出力先
public RawImage HogeOutputRaw;

//各々のウェブカメラの設定用項目
[SerializeField] private int width = 1920;
[SerializeField] private int height = 1080;
[SerializeField] private int fps = 30;

//ウェブカメラテクスチャ
private WebCamTexture hogeWebCamTexture;

void Start()
{
//ウェブカメラの初期設定と起動
hogeWebCamTexture = new WebCamTexture(width, height, fps);
HogeOutputRaw.texture = hogeWebCamTexture;
hogeWebCamTexture.Play();
}

void Update()
{
//ウェブカメラのフレームが変更されたら処理
if (hogeWebCamTexture.didUpdateThisFrame)
{
//ウェブカメラの画像をMatに変換
Mat originMat = new Mat(hogeWebCamTexture.height, hogeWebCamTexture.width, CvType.CV_8UC4);
Utils.webCamTextureToMat(hogeWebCamTexture, originMat);

//画像処理先Mat
Mat changeMat = new Mat(originMat.cols(), originMat.rows(), CvType.CV_8UC4);

//グレースケール処理
Imgproc.cvtColor(originMat, changeMat, Imgproc.COLOR_RGB2GRAY);
//二値化(数値は各々で変更)
Imgproc.threshold(changeMat, changeMat, 100, 255, Imgproc.THRESH_BINARY);
//輪郭抽出
Imgproc.Sobel(changeMat, changeMat, -1, 1, 0);

//Matをテクスチャに変換
Texture2D endTexture = new Texture2D(changeMat.cols(), changeMat.rows(), TextureFormat.RGBA32, false);
Utils.matToTexture2D(changeMat, endTexture);

//映像出力先にテクスチャ貼付け
HogeOutputRaw.texture = endTexture;
}
}

}

平成最後のブログ更新

さて平成もあと数十分で終わるタイミングで、とある事に挑戦します!
令和からバーチャル体を持って活動していくことを決めました。
これからの活躍に期待してください!

そして、新作ゲーム今年に完成予定です。

https://prehistoriccenozoic.com/
詳しくは上記ホームページで

3Dモデル作成からUnity動作過程1

個人用メモとして、blenderで作成した3Dモデルを、Unityに持ち込む流れを、記事にしていきます。
BlenderやUnityの細かい操作はあまり説明しませんが、ポイントごとに説明を入れます。

1:全身の下書きイラストを用意する

自分で描いた全身のラフ画像です。
ポイントとしては、腕、足の関節を判りやすく描きました。
その画像をBlenderに読み込ませます。

2:イラストの配置を修正する

Z軸の線と顔の顎が重なるように移動
3Dポインター原点(0,0,0)に足元が来るように配置

3:平面メッシュを追加

「SHIFT+A」を入力後、メッシュ→平面を選択
「Num3」入力して視点変更
「R」→「CTRL」押しながら平面メッシュを-90度に立てる。

メッシュが真正面に向いている事を確認して、「CTRL」+「A」入力後、「回転」を適用

編集モードに入り、「CTRL」+「R」で平面メッシュの中央に設定
左端の頂点2個削除

オブジェクトモードで、追加選択→ミラー設置(適用しない)

4:下絵を参考にメッシュ変更

編集モードで、2頂点選択→「W」→細分化→頂点追加
下絵を参考に頂点を「G」キーで移動して形を作る

5:目と口の形成

「K」キー入力でナイフツールで、下絵に合わせて、目の形と口の形に頂点を追加
目の面だけを削除する

「CTRL」+「B」を押して口周りの辺を分ける

6:頂点、辺の追加や削除で格子状の形を作る

変更前

「J」キーで辺追加、「K」キーでナイフツールで頂点追加、「CTRL」+「J」で連続頂点
「X」キーで頂点、辺、面の削除を行い形を整える。

変更後

7:まつげの追加

オブジェクトモードに戻してから、平面メッシュを追加する
顔のメッシュ調整と同様に、回転と適用を行う
面を半分にしてから、ミラーを追加

まつげのマテリアル編集でまつげのモデル色を黒色に変える
顔のマテリアルは肌色にする
その後まつ毛の編集

8:顔とまつげのモデルを1つにまとめる

オブジェクトモードで顔とまつげを複数選択
「CTRL」+「J」キーで一つにまとめる

平面状態での顔とまつ毛のモデリングまで出来ました。
次回は、頭部のモデリング完成まで行います。

新年の制作状況と動画

あけましておめでとうございます!

と遅れた挨拶になりましたが、新年1回目のブログ更新では、予定通り現在制作中のゲームの仕様変更を動画で発表します。

この仕様変更は、変わる可能性大きいですが、更新と進捗報告頻度を上げる目的でもあります。

次回の動画では、新規3Dモデル発表します!

今年も本サークルをよろしくお願いします。

編集技術がんばります

2018年の振返りと2019年に向けて

タイトル通り、2018年の自分の活動を振返って、来年の活動に生かしていこう思い、今メモとして残します。

今年は、冬こみトレ、夏コミ、夏こみトレ、デジゲー博と参加しました。
イベントの参加回数を増やして、制作ゲームの完成と更新速度を上げていこうと思って、参加イベントを増やしました。

しかし、思っていたほど進捗速度は上がっていません!

2019年は、制作ゲームの開発速度を上げていく施策をする必要があると、常に考えていました。
そこで、ブログ更新を毎週、Twitter上での進捗報告、そして動画による制作ゲーム内容発表を行います。

そこで、2019/1/20開催の「こみっくトレジャー33」で試作品を発表しますが、プレビュー版として、1/6、1/13、1/20に動画公開します。
短いPVになりますが、「開発←→告知」を一定に保つ活動を来年から行います!

そして、自作ゲームを少しでも遊んでもらえたらと思いながら、ゲーム開発を続けていきます。

今年もありがとうございました、来年も楽しみにしてください。

ゲーム制作進捗報告9

ゲーム制作を開発するためのタスク管理を、これまでより強化しようと考え昨日から見直していました。

定期的な情報発信を行えたらと思います。

ゲーム制作進捗報告8

今回は、ゲーム制作に直接関わる訳では無いですが、Gitについて勘違いしていた箇所を、訂正を込めたメモ書きになります。

今まで勘違いしていたGitリポジトリ制作先

Unityのプロジェクトフォルダ階層1つ上に作っていた

上記のリポジトリ作成していたため、これまで参考にしていた、不要なデータをコミットから外すgitgnoreの設定が、上手くいかない為困っていました。しかし、フォルダ設定を見直していたら間違いに気づきました。

Unityプロジェクトフォルダ内にリポジトリ作成

Unityのプロジェクト内に、リポジトリを作らないと意味がなかったと、ようやく気付けました。これにより、無駄なデータをコミットする必要が無くなり、少しは快適になると思います。

単純なミスに早く気付けるようになりたいです。