Gladness 3D 公式マニュアル

3Dゲーム制作ソフト「Gladness 3D」の使い方

3Dゲーム制作ソフト Gladness 3D

f:id:slew3d:20190814234307j:plain

f:id:slew3d:20201015142500j:plain:w280f:id:slew3d:20201006170352j:plain:w280
サンプルゲーム 『不思議な人形』
プレイ時間 : 約15分
道に捨てられていた可愛らしい人形を、拾ってしまったばかりに、家族が次々と不幸に見舞われてしまう。


www.youtube.com
●動作環境

Windows 7 / 8 / 8.1 / 10
32bit / 64bit どちらでも動作します

*Gladness3Dで制作できるのはWindows用ゲームのみです。
Androidなどのスマホゲームやブラウザゲームには対応していません。

Gladness3Dは 32bit アプリケーションです

●その他

Gladness3Dには、Luaと言うスクリプト言語が使用されています。
使用しているバージョンは Lua version 5.3.5 です。

3Dモデルのモデリングとエクスポートには Blender 2.70 を推奨します。

●もしソフトが起動しない場合は、こちらをダウンロードしてインストールしてください

DirectX エンド ユーザー ランタイム Web インストーラ
https://www.microsoft.com/ja-jp/download/details.aspx?id=35

●こちらからGladness3Dの最新バージョンがダウンロードできます

1drv.ms

ミラー
https://ux.getuploader.com/slew/

メニュー

3Dゲーム制作ソフト Gladness 3D

Gladness3D超入門 簡単な脱出ゲームを作ろう!(始めに読んでください)

 

●エディタ

初期シーン、プレイヤーの初期位置、テストプレイ

オブジェクトの配置方法

オブジェクトの選択、移動、回転、削除、カメラ操作

スクリプトの取り付け方

 

スクリプト

Gladness3DにおけるLuaの概要

テキストの表示

選択肢

選択肢の表示位置

分岐(if文)

グローバル変数

並列処理(回転、移動、クリック待機、待機)非並列待機

削除、有効、無効

シーン間の移動

ライト (光の表現)

カメラワーク

トランジション 

ゲームデータの保存と読込み

 

●データベース

テキストエディタの変更方法

モデルデータベースの設定

アニメデータベースの設定

フォントデータベースの設定と文字の表示方法

画像データベースの設定と画像の表示

効果音とBGMの設定方法

 

●エクスポート、取り込み

3Dモデルのエクスポート方法 (スタティックオブジェクト)

3Dモデルの取り込み方 (スタティックオブジェクト)

3Dモデルのエクスポート方法 (モーションオブジェクト)

3Dモデルの取り込み方 (モーションオブジェクト) 

MakeHumanの設定とエクスポート方法

 

●その他

Gladness3Dのご利用規約(ライセンス)

タイル床、タイル壁、天井付きタイル床のサイズ

更新情報

 

更新情報

2020/10/06 ver0.97

◆サンプルゲームに『不思議な人形』を追加

スクリプトの関数名の変更

c_drawFont -> c_drawText
c_setFontColor -> c_setTextColor
c_setFontAlpha -> c_setTextAlpha

c_save -> c_saveGameData
c_load -> c_loadGameData

スクリプトに追加した関数

トランジション(画面遷移)のスピード調節に対応
スピードは 1 ~ 255 で指定
c_setTransiSpeed(20)
c_transiIn(20)
c_transiOut(20)

・update関数でのコルーチン使用に対応した

・効果音のループと停止に対応
c_playSound("効果音のID", true)
c_stopSound("効果音のID")

・モデルデータベースに透過の項目を追加
1を設定すると、透過テクスチャを持ったオブジェクト(例えば木など)が、きれいに描画されます。

・グローバル文字列変数を追加
c_setGStr("変数名", "テキスト")
c_getGStr("変数名")

スクリプトで廃止した関数
c_loadMap
c_rot
text
txt
msg

2020/09/15 ver0.96
フォントをデータベースで設定して、文字を表示出来るようにした。
c_draw 関数の名前を c_drawImage 関数に変更した。
グローバル変数の初期化関数 c_clearGVar() を追加した。

2020/09/14 ver0.95
画像を読み込んで表示出来るようにした。

2020/09/12 ver0.94
セーブ、ロード機能の追加。
セーブデータは1つのみです。
保存されるデータは、グローバル変数(フラグ)、現在のシーンファイル名、
プレイヤーの位置、の3つです。

ジャンプ機能廃止。
これは迷路のようなゲームの場合、簡単に壁を越えてしまうと
ゲーム性に影響が出てしまう為、そのようにしました。

2019/09/06 ver0.93
エディタで初期アニメーションを選択できるようにした。
それにともないシーンファイルのバージョンが2から3に変更された。
3D素材にスライドドアを追加。
その他微修正。

2019/08/23 ver0.921
カメラの補間方法を線形から非線形(曲線)に変更。
その他微修正。

2019/08/14 ver0.92
UIを大幅に変更。
デバッガを追加。

2019/08/11
カメラワークの記事を追加しました。

2019/08/08 ver0.91
LuaスクリプトからC言語を呼び出す関数に c_ キーワードをつける仕様に変更しました。
これはユーザー関数等と間違えやすいためです。
しかし、テキスト系の関数[t(), tsc()等]は今まで通りの仕様で使用出来ます。

簡易マニュアルを作成。

2019/08/06 ver0.901
一部暗号化されてないファイルがあったので修正。

2019/08/06 ver0.90
カメラワークを導入。

2019/07/31 ver0.89
ゲームデータの自動作成と暗号化を導入。

2019/07/18 ver0.88
ソフトウェアの名称を変更。

2019/07/09 ver0.87
ポリゴンが縮退して法線が消滅し、
球体とポリゴンの衝突判定がおかしくなっていたのを修正。
1平方cm以下の面積の衝突用ポリゴンを登録しない事で対応。

2019/07/02 ver0.86
MakeHumanの3Dモデルを取り込めるようになった。

2019/06/28 ver0.85
3Dファイルの読込みをFBXSDKからColladaに変更。
モーションに対応。
NPCの配置が出来るようになった。

2019/06/21 ver0.83
描画を DrawPrimitiveUp から DrawPrimitive に変更。
前より描画速度が速くなったような気がする。

2019/06/18 ver0.82
3Dモデルに血痕を追加した。

2019/06/13 ver0.81
音楽ファイルの m4a を mp3 に変更した。


●訂正
2019/08/08
ver0.91以降の「Gladness3D簡易マニュアル」と「サンプルゲーム」に間違いがありました。

(誤) getGVar("鍵")
(正) c_getGVar("鍵")

しばらくはどちらでも動作するようにしていますが、大変お手数をおかけしますが、
なるべく早く c_ キーワードの付いた方に移行してください。

Gladness3D超入門 簡単な脱出ゲームを作ろう!(始めに読んでください)

Gladness3Dでどんな事が出来るか知るために簡単な脱出ゲームを作ってみよう。


f:id:slew3d:20190721191024j:plain
まずeditor.exeを起動してください。

マウス右ドラッグでカメラ回転。
マウス中央ボタン(またはMキー)を押しながらドラッグで平行移動。
マウスホイールでズーム。
Shiftキーを押しながらオブジェクトを左クリックするとカメラの注視点を移動できます。


f:id:slew3d:20190721191027j:plain
バージョンは0.91を使用します。


f:id:slew3d:20190721191030j:plain
まず一番基本の地面を作りたいと思います。
ツールバーから「オブジェクト配置」を選択します。


f:id:slew3d:20190721191034j:plain
オブジェクトリストから地面を選択します。


f:id:slew3d:20190721191037j:plain
画面の中心近くを左クリックすると地面が配置されます。


f:id:slew3d:20190721191041j:plain
次に空を作りたいと思います。
オブジェクトリストから空を選択します。


f:id:slew3d:20190721191043j:plain
画面の中心近くを左クリックすると空が配置されます。
マウスホイールを回してズームアウトすると空があるのが確認できます。


f:id:slew3d:20190721191047j:plain
メニューから
「ファイル > シーンを名前を付けて保存」
でシーンに名前を付けて保存します。
今回は「test_scene01.txt」というファイル名にしました。


f:id:slew3d:20190721191050j:plain
プレイヤーの初期位置を決めたいと思います。
ツールバーから「プレイヤーの初期位置」を選択します。


f:id:slew3d:20190721191053j:plain
プレイヤーの初期位置にしたい場所を左クリックします。
そのままドラッグするとプレイヤーの方向も決められます。


f:id:slew3d:20190721191057j:plain
プレイヤー情報ウインドウの「初期位置保存ボタン」を押します。
これでプレイヤーの初期位置が決定されました。


f:id:slew3d:20190721191059j:plain
ツールバーのテストプレイボタンを押すと、
テストプレイが実行されます。


f:id:slew3d:20190721191102j:plain
無事に実行されましたでしょうか?

●テストプレイの操作方法
左クリック 調べる
右クリック マウスの中央固定を解除
マウス   カメラ回転
WASDキー 平行移動
Vキー   ジャンプ
Escキー   終了


f:id:slew3d:20190721191105j:plain
次は床と天井を作っていきたいと思います。
オブジェクトリストから「床と天井」を選択します。


f:id:slew3d:20190721191107j:plain
ツールバーから「オブジェクト配置」を選択。
画面の適当な場所を左ドラッグすると床と天井を
配置することができます。


f:id:slew3d:20190721191111j:plain
下から見ると天井を確認出来ます。


f:id:slew3d:20190721191114j:plain
オブジェクトリストから「壁」を選択します。


f:id:slew3d:20190721191116j:plain
図のように壁を作っていきます。


f:id:slew3d:20190721191119j:plain
ツールバーから「投影方法切り替え」を選択して
真上から見ると配置がやりやすくなります。


f:id:slew3d:20190721191121j:plain
部屋が出来ました。


f:id:slew3d:20190721191125j:plain
オブジェクトリストから「ドア枠」を選択します。


f:id:slew3d:20190721191127j:plain
図の矢印の付近を左クリックするときれいに配置されます。


f:id:slew3d:20190721191129j:plain
ツールバーの「上書き保存」を押してシーンを上書き保存します。
上書き保存はこまめにしましょう。


f:id:slew3d:20190721191132j:plain
オブジェクトリストから「机」を選択します。


f:id:slew3d:20190721191134j:plain
部屋の適当な場所に配置します。


f:id:slew3d:20190721191137j:plain
ツールバーから「選択」を選択します。
机を左クリックすると机が選択されます。
選択されると図のように赤い枠が付きます。
削除したい時はDeleteキーで削除できます。


f:id:slew3d:20190721191141j:plain
ツールバーから「移動」を選択します。
移動用のマニュピレータが出現します。


f:id:slew3d:20190721191144j:plain
マニュピレータを左ドラッグするとオブジェクトを移動できます。


f:id:slew3d:20190721191147j:plain
ツールバーから「回転」を選択します。
回転用のマニュピレータが出現します。


f:id:slew3d:20190721191149j:plain
マニュピレータを左ドラッグするとオブジェクトを回転できます。
Rキーで90度回転できます。


f:id:slew3d:20190721191153j:plain
ツールバーから「投影方法切り替え」を選択して
真上から見ると「移動、回転」がやりやすくなります。
Shiftキーを押しながら「移動、回転」すると、ゆっくり移動、回転します。


f:id:slew3d:20190721191155j:plain
オブジェクトリストから「鍵」を選択します。


f:id:slew3d:20190721191157j:plain
机の上に配置します。


f:id:slew3d:20190721191200j:plain
移動、回転を使って図のような位置にします。


f:id:slew3d:20190721191203j:plain
シーンを上書き保存して、
テストプレイを実行しましょう。


f:id:slew3d:20190721191206j:plain
オブジェクトリストから「ドア」を選択します。


f:id:slew3d:20190721191208j:plain
画面の矢印付近を左クリックしてドアを配置します。


f:id:slew3d:20190721191211j:plain
ドアを移動して閉めます。


f:id:slew3d:20190721191215j:plain
鍵をクリックした時なにかメッセージ(テキスト)を
表示するようにしましょう。
そのためには鍵にスクリプトを取り付ける必要があります。
ツールバーから「選択」を選択します。
鍵を左クリックして選択状態にします。


f:id:slew3d:20190721191217j:plain
スクリプトの基本情報ウインドウの新規ボタンを押します。


f:id:slew3d:20190721191221j:plain
図のような画面に変化します。
編集するボタンを押します。


f:id:slew3d:20190721191223j:plain
メモ帳が起動します。
すでに図のようなスクリプトが書き込まれています。
これはLuaというスクリプト言語です。
使用しているバージョンは Lua version 5.3.5 の32ビットです。


f:id:slew3d:20190721191226j:plain
では図のように書いてください。
メモ帳を上書き保存します。
search()関数はプレイヤーがオブジェクトを左クリックした時に
実行されます。
t()関数はテキストを表示する関数です。
t("文字列")
文字列は必ずダブルクォーテーションで囲む必要があります。
tはtextの略です。
tsc()関数はテキストを停止、クリック後にテキストを消去する関数です。
tscはtext stop and clearの略です。

function search()
t("鍵がある")
t("取ってみよう!")
tsc()
end


f:id:slew3d:20190721191228j:plain
テストプレイを実行します。


f:id:slew3d:20190721191231j:plain
鍵をクリックした後、消えるようにしたいと思います。
図のようにc_delete()関数を書き足します。
メモ帳の上書き保存を忘れないようにしましょう。

function search()
t("鍵がある")
t("取ってみよう!")
tsc()
c_delete()
end


f:id:slew3d:20190721191234j:plain
テストプレイを実行して確認します。


f:id:slew3d:20190721191237j:plain
鍵を取った時に効果音を鳴らしたいと思います。
図のようにc_playSound()関数を書き足します。

function search()
t("鍵がある")
t("取ってみよう!")
tsc()
c_playSound("アイテム取得")
c_delete()
end


f:id:slew3d:20190721191240j:plain
シーンが読み込まれた時にBGMを鳴らしたいと思います。
図のようにc_playBGM()関数を書き足します。
c_stopBGM()でBGMを停止することができます。
init()関数はシーンが読み込まれた時に1回だけ実行されます。
テストプレイを実行して確認します。

function init()
c_playBGM("フィールド")
end


f:id:slew3d:20190721191243j:plain
ドアにもスクリプトを取り付けましょう。
ツールバーから「選択」を選択します。
ドアをクリックして選択状態にします。
鍵の時と同じやり方でスクリプトを取り付けます。


f:id:slew3d:20190721191245j:plain
ドアを回転させたいと思います。
90度回転させます。
c_rotY(最大回転角度, 回転速度)
rotはrotation【回転】の略です。
coroutine.yield()関数は今はおまじないだと思って書いてください。

function search()
c_rotY(90, 3.0)
coroutine.yield(1)
end

テストプレイを実行して確認します。
クリックすると90度回転しましたが、
もう一度クリックすると同じ方向にまた90度回転してしまいます。
思ったのとなんか違いますね。


f:id:slew3d:20190721191248j:plain

function search()
c_rotY(90, 3.0)
coroutine.yield(1)
c_rotY(90, -3.0)
coroutine.yield(1)
end

では図のように書き足しましょう。
一か所だけ違います。
速度にマイナスが付いています。
マイナスが付くとドアは逆回転します。
テストプレイを実行します。
すこし思った感じに近付きましたが、なにか
世話しないような気がします。
開いた時に止まってほしいですね。


f:id:slew3d:20190721191250j:plain

function search()
c_rotY(90, 3.0)
coroutine.yield(1)
c_clickWait()
coroutine.yield(1)
c_rotY(90, -3.0)
coroutine.yield(1)
end

図の位置にc_clickWait()関数を書き足します。
こうするとドアはクリックされるまで停止して、
クリックされるのを待ちます。
テストプレイを実行します。
イメージ通りになりました。


f:id:slew3d:20190721191253j:plain
でもドアには鍵が掛かっていないのですんなり開いて
しまいました。これでは脱出ゲームとは呼べませんね。
ドアに鍵をかけたいと思います。
図のように書き足します。
c_getGVar(変数名)
変数名は文字列で指定してください。
戻り値は整数。
c_getGVar()関数はグローバル変数の値を取得します。
デフォルトでは0が代入されています。
図では変数の内容が0なのでメッセージの方が実行されます。
ドアは開きません。
if文は他の記事の内容をご覧ください。
テストプレイを実行します。
ドアは開きません。

function search()

if c_getGVar("鍵") == 0 then
  t("鍵が掛かっていて開かない")
  tsc()
else
  c_rotY(90, 3.0)
  coroutine.yield(1)
  c_clickWait()
  coroutine.yield(1)
  c_rotY(90, -3.0)
  coroutine.yield(1)
end

end


f:id:slew3d:20190721191256j:plain
それでは鍵を取得したことにしたいと思います。
先程の鍵のスクリプトを開きます。
図の位置にc_setGVar()関数を書き足します。
グローバル変数に値をセットします。
c_setGVar(変数名, 値)
変数名は文字列で指定してください。
値は整数。
鍵という名前の変数に1をセットします。

function search()
t("鍵がある")
t("取ってみよう!")
tsc()
c_setGVar("鍵", 1)
c_playSound("アイテム取得")
c_delete()
end


f:id:slew3d:20190721191259j:plain
テストプレイを実行します。
鍵を取得した後にドアをクリックすると、
ドアが開きます。


f:id:slew3d:20190721191302j:plain
ドアに効果音を付けます。
図のように書き加えます。

function search()

if c_getGVar("鍵") == 0 then
  c_playSound("ドア開かない")
  t("鍵が掛かっていて開かない")
  tsc()
else
  c_playSound("ドア開ける")
  c_rotY(90, 3.0)
  coroutine.yield(1)
  c_clickWait()
  coroutine.yield(1)
  c_rotY(90, -3.0)
  coroutine.yield(1)
  c_playSound("ドア閉める")
end

end


f:id:slew3d:20190721191305j:plain
テストプレイを実行します。
脱出できました。


f:id:slew3d:20190721191308j:plain
それではゲームタイトルを変更します。
data > basic_data > config.txt
を開きます。


f:id:slew3d:20190721191310j:plain
図にあるタイトルを変更しましょう。


f:id:slew3d:20190721191313j:plain
変更しました。


f:id:slew3d:20190721191315j:plain
テストプレイを実行して確認します。
ミニ脱出ゲームが完成しました。
===================================================
*2019/08/03 追記
バージョン0.89からゲームデータの作成が自動で出来るようになりました。

ファイル > ゲームデータを作成
から行ってください。
暗号化にチェックを入れるとデータは全て暗号化されます。

アニメデータベースの設定

アニメデータベースの設定について説明します。
Blenderを起動します。


f:id:slew3d:20200721121910j:plain
Blenderでボーンを選択するとキーフレームが現れます。
この時、直立が 1~40、歩行が 40~120、だったとします。
その数字を覚えておきます。


f:id:slew3d:20200721121914j:plain
data > basic_data > animation.csv
アニメデータベースを開きます。
適当な行にデータを書き込んで行きます。
モデルIDに先程、モデルデータベースで設定した「人間」というIDを書きました。
IDにアニメーションの名前を付けます。「直立」としました。
最小フレームに先程覚えた数字を書きます。
直立アニメのキーフレームは1~40だったので、小さい方の数字1を書きます。
最大フレームにも先程覚えた数字を書きます。大きい方の数字、40を書きます。
速度はアニメーションの速度です。数字が大きいほど速くなります。0.6にしました。
歩行アニメも同様に書き込んで行きます。
上書き保存します。


f:id:slew3d:20200721121916j:plain
エディタを起動します。
ツールバーから選択を選択します。
人間を選択します。
すると右にあるドロップダウンリストに先程設定したアニメのIDが出現します。
歩行を選択すると歩くアニメになります。


f:id:slew3d:20200721121919j:plain
テストプレイで確認します。
ゲーム実行時はスクリプトでアニメを変更出来ます。


●アニメーションの変更
アニメーションを変更する場合は、
オブジェクトにスクリプトを取り付けて変更します。

c_setAnim("アニメーションID")
先程アニメデータベースで設定したアニメーションIDを指定します。
(例)

function init()
c_setAnim("歩行")
end

トランジション(画面遷移、暗転)

●c_transiIn()

このようにすると画面が段々と暗くなります。
c_transiIn()

スピードは1~255で指定できます。
数字が大きいほど速くなります。
c_transiIn(スピード)

(例)
c_transiIn(20)

引数に何も設定しないと最後に設定した値が使用されます。
c_transiIn()

●c_transiOut()

このようにすると画面が段々と明るくなります。
c_transiOut()

スピードは1~255で指定できます。
数字が大きいほど速くなります。
c_transiOut(スピード)

(例)
c_transiOut(20)

引数に何も設定しないと最後に設定した値が使用されます。
c_transiOut()

●c_setTransiSpeed(数値)

トランジションのスピードを設定できます。
スピードは1~255で指定できます。
数字が大きいほど速くなります。
c_setTransiSpeed(数値)

(例)
c_setTransiSpeed(20)

MakeHumanの設定とエクスポート方法

MakeHumanの設定とエクスポート方法を説明します。

ポリゴン数はなるべく少ない方がいいでしょう。
ポリゴン数はBlenderで減らすことが出来ます。
3000以下が理想ですが、実際は髪形や服装によっては3000~6000位に
なってしまうでしょう。

f:id:slew3d:20200923084927j:plain
バージョンは v1.1.1 を使用します。


f:id:slew3d:20200923084929j:plain
ジオメトリー > 目 タブを選択します。
目はLow-polyを選択します


f:id:slew3d:20200923084932j:plain
ジオメトリー > トポロジー タブを選択します。

・タグフィルター
Lowpoly

トポロジー
Male1591

女性の場合は Female1605 を選択します。
歯と舌は見えないので付けない方がいいでしょう。


f:id:slew3d:20200923084936j:plain
ポーズ/アニメーション > スケルトン タブを選択します。

・リグプリセット
Game engine


f:id:slew3d:20200923084940j:plain
ファイル > エクスポート タブを選択します。

・メッシュフォーマット
Collada (dae)

・オプション
足を地面につける

・Orientation
Z up, face -Y

・Bone orientation
Along local Y

・単位
メートル

ファイル名を付け、エクスポート先を設定してエクスポートボタンを
押せば daeファイル が書き出されます。
後は、エクスポートされた daeファイル をBlenderでインポートして編集します。

Blenderではどの設定でも読み込まれましたが、Gladness3Dではこの設定にしないと上手く読み込まれませんでした。
Blenderではfbxファイルは上手く読み込まれませんでした。