- 1二次元好きの匿名さん22/01/28(金) 19:18:52
- 2二次元好きの匿名さん22/01/28(金) 19:20:07
スレ主この前別スレで作りたいって言ってた人かな?
- 3二次元好きの匿名さん22/01/28(金) 19:20:25
やあ、モルモット君。
不躾だが質問だ。
ウマ娘でたまに、プレイ機器が熱くなったり、動作がのろくなったりすることはないかい?
これは私でも直せない。
なぜならこれはunityの持病とも言える『メモリリーク』だからさ。
unityとは、メモリリークとは何かって?
簡単な話unityはウマ娘を作るためのゲームエンジンさ。RPGツクールのもっと難しく自由度が高いバージョンだと思ってもらうと楽かもしれない。
そしてメモリリークは、不要なメモリが溜まっていく状態。メモリの部屋が圧迫されて機器が熱くなったりするわけさ。
ウマ娘もunity側も努力はしているのだろうが、なかなか直すのは難しそうだね。
さて、ここまで聞いて少し、unityについて気にならないかい?
まあ、気にならなくても聞いてもらおうじゃないか、モルモット君。
とは言っても、今日はゲーム作りも学ぶわけじゃないさ。そもそも1スレで語り切れるものではないのだから。
だから今回は、unity製の『ウマ娘プリティダービー』と絡めた話をしていこうと思うよ。 - 4二次元好きの匿名さん22/01/28(金) 19:22:06
- 5二次元好きの匿名さん22/01/28(金) 19:23:51
【その2・unityで作れるジャンル】
unityはなんでも作れるのか?
そういう疑問も出てくるだろうね。
ということで、それに答えてみよう。
ズバリ、unityが得意なのは物理演算を使ったアクションゲーム系だ。
物理演算は簡単に言えば、摩擦や速度などの物理的な力を計算しシミュレーションすることさ。
とは言っても、物理演算を使われていれば、アクションでなくとも便利には違いない。そう、ウマ娘プリティダービーがそうだ。
ノベルゲーム系はunityには向かないだろうし、育成ゲームの部分を作るのは比較的難しいかも知れない。他のエンジンでもっといいのがあるかもしれない。けれど3Dを見せることに拘った結果、unityはいいエンジンだったと思うよ。
ウマ娘同士が近づいた時にすり抜けず、いい感じの挙動をする。ライトの明かりでいい感じにライブをしてくれる。これもunityの機能が多く使われているのさ。
前者はCollider コンポーネントという、ゲーム画面では目に見えない当たり判定のようなものがつかわれているのだろうね。
後者も、unityに3Dモデルを読み込みアニメーションをさせている場面を、unityのライトで照らしているのだろう。
育成部分やストーリー部分はunityには向かないかもしれないが、それ以外を持って有り余る便利さがunityにはある、ということさ。 - 6二次元好きの匿名さん22/01/28(金) 19:25:05
【その3・ウマ娘たちを走って動かす1】
レースの醍醐味、ウマ娘の醍醐味、それはレースだろうね。
臨場感のあるカメラワーク、モデルとアニメーション。今回はそこに迫っていこうか。
まず、オブジェクト。ここでいうオブジェクトとは、GUI画面に配置されている物体だ。
ヒエラルキービューと言われる場所に、配置されているオブジェクトの名前が並ぶのさ。この際画像に他の場所の名称を載せておこうか。
まず、走らせるにはウマ娘たちの3Dモデルを、レース場を再現した3D空間に人数分出現させなければいけないね。
最初から出現しているじゃないか、と思うかもしれないが、レース場とウマ娘の組み合わせをたくさん作っていたら身がもたない。出走者に合わせてランダムでカメラに映る前にオブジェクト(ウマ娘)を生成しているのだろうさ。
このウマ娘が育成対象に選ばれていたら、などでもしものif文を作っていき、もしもごとにオブジェクトを出現させる。
そして、スタートと同時に走り出す、のはーー何秒後に『走る』を実行する、というスクリプトを書いているのだろうさ。
もちろん、ランダムな確率で、出遅れで実行処理が遅れるウマ娘を出すのも忘れない。
『走る』の実行は、簡単に言えば走るアニメーションを再生しかつ、ウマ娘というオブジェクトをスクリプトで動かしているのだろうね。 - 7二次元好きの匿名さん22/01/28(金) 19:26:40
【その3・ウマ娘たちを走って動かす2】
もちろん、ただ走らせて動かすだけじゃダメだろうね。
それぞれに速度、加速度が存在することはスキルなどからも分かるだろう。
計算式は正直わからないが……Rigidbody(物理的挙動を使うためのメインコンポーネント)のAddforceを使うことで、加速し続けること、一定の速度で加速を止めること、加速度や速度を変えることができる。移動方法はたくさんあるが、おそらくこれを使っているんだろうさ。
とはいっても、一定の距離に加速を加えるだけではーーそう、コースからはみ出る。
近づいたら曲がる処理も恐らくされているだろう。これもウマ娘オブジェクト中心のウマ娘オブジェクトより大きな、サーチエリア型のcolliderで実現できる。
それと、レーンを作っておいて、レーンごとに走らせているらしいというじゃないか。
おそらくレーンごとに当たり判定が無いとそんなことはできない。普段はレーン同士移動できないような当たり判定を施しているのだろう。
前が塞がったら(前の当たり判定が前のウマ娘にぶつかったら)ランダムで判定してレーンを移るようにしている。とかだろうか。レーンの魔術師などがあったらそのランダムがゆるくなってレーン映りが発動しやすい、とかもあるのだろう。
あ、レーンは公表されているから知っているかもしれないが、簡単に言えばウマ娘の横移動は縦に列があってそれを移動して行われているということさ。 - 8二次元好きの匿名さん22/01/28(金) 19:27:39
【その3・ウマ娘たちを走って動かす3】
お次は臨場感に大事なカメラワーク。
自分たちのウマ娘の顔を追ってくれる理由は…まあ簡単に言えば、親オブジェクトのウマ娘の下にそのカメラがあるんだろうさ。
前も言った通り、親が動けば子も動く。カメラを良い感じの位置で子に置けばその良い感じの位置のまま追従できるのさ。
レース全体を追ってくれるカメラの方も、同じ原理の可能性もある。
もしかすると進み具合によってカメラの位置を変えている可能性もあるにはあるけれど、ね。
カメラを何個も設置して、どれで写すか切り替える、ということだろうか。使用しないカメラを無効にする方法が1番メジャーだろうね。
一個のカメラの位置自体はスクリプトで変えられる。レース前の会場のズームインやズームアウトもこれで可能だよ。 - 9二次元好きの匿名さん22/01/28(金) 19:27:52
えっもしかして自分でタキオンの立ち絵描いたの…?
超かわいいんだけど - 10二次元好きの匿名さん22/01/28(金) 19:28:53
勉強になります
- 11二次元好きの匿名さん22/01/28(金) 19:29:19
【その4・ライブ】
さて、レースの話はほどほどにして次はライブ。
といってもこれもこの前と変わらない。カメラワークに凝っている、という意味ではね。
他にも光の当たり具合は…unityのlightを使えば細かく表現できる。
長方形範囲を光らせるエリアライト、一点を光らせるポイントライト、太陽光のようなディレクショナルライト、マテリアル(物質の材質を表現する概念、模様みたいなものさ)の表面を発光させる発光マテリアルなどがあるね。
これは他のゲームの話なんだが…ライブ別視点を見せてくれる裏話番組があったらしいね。
それを見ても思うのだが、舞台裏は見せるもんじゃ無い精神で作られていることが多い。
ライトの当たり方は元のカメラワーク準拠だろうし、舞台裏でウマ娘オブジェクトが次の場面に合わせようと全力疾走したり……とかするかもしれない。
最高のものが見たい、ではなく舞台裏が見たい、なら別視点もいいかもしれないけれどもね。 - 12二次元好きの匿名さん22/01/28(金) 19:30:50
- 13二次元好きの匿名さん22/01/28(金) 19:32:35
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Umaplayer : MonoBehaviour
{
private Rigidbody rb;
void Start()
{
//Risidbodyを取得
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
rb.AddForce(0, 0, 10f);
}
}
まずはこれ、AddForce。
前にも言った加速さ。このスクリプトだと、(0, 0, 10f);でZ方向にだけ1以上の数字が書かれている。
つまりZ方向にこの力で加速し続けるのさ。これだとただ加速し続けるだけ、だね。
ちなみにngワードに抵触しないように改造しているため、そのままコピペしても動かない。
- 14二次元好きの匿名さん22/01/28(金) 19:34:19
using UnityEngine;
using System.Collections;
using UnityEngine;
public class UmaTest : MonoBehaviour {
//生成するゲームオブジェクトウマ娘
public GameObject umamusume;
void Update(){
{
//Instantiate( 生成するオブジェクトウマ娘, 場所, 回転 ); 回転をそのまま
Instantiate (umamusume, new Vector3 (1.0f, 2.0f, 0.0f), Quaternion.identity);
}
}
}
次はこれ、スクリプト通りのウマ娘の生成だ。本来なら生成前にif分でもしもの分岐を作っているんだろうけど、生成はこんなものさ。
ウマ娘の場所、向きを事前に指定して生成する。 - 15二次元好きの匿名さん22/01/28(金) 19:37:16
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class UmaCameraManager : MonoBehaviour
{
public GameObject mainCamera;
public GameObject subCamera;
void Start()
{
// 各カメラオブジェクトを取得
mainCamera = GameObject.Find("Main Camera");
subCamera = GameObject.Find("Sub Camera");
// サブカメラはデフォルトで無効にしておく
subCamera.SetActive(false);
}
// もし切り替えボタンが押されたならば
public void OnClick()
〔
{
// 各カメラオブジェクトの有効フラグを逆転(true→false,false→true)させる
mainCamera.SetActive(!mainCamera.activeSelf);
subCamera.SetActive(!subCamera.activeSelf);
}
}
}
そしてこれ。ボタンが押されたらカメラ切り替え処理が実行される仕組みさ。レース中の顔アップと全体像の切り替えに使えそうだね。 - 16二次元好きの匿名さん22/01/28(金) 19:40:28
- 17二次元好きの匿名さん22/01/28(金) 19:42:48
友達がやっててunity気になってたからありがたい
- 18二次元好きの匿名さん22/01/28(金) 19:43:32
ためになる
また頼む - 19二次元好きの匿名さん22/01/28(金) 20:19:37
- 20二次元好きの匿名さん22/01/28(金) 22:21:59
unityシンザンなのでこういったものはとても助かります
次回も楽しみにしてます - 21二次元好きの匿名さん22/01/28(金) 22:44:05
とっかかりとしてわかりやすくて助かりますわ