【Unity / プログラミング】partial classでクラスを整理しよう!

クラスを分割してソースコードを整理する! プログラミング
スポンサーリンク

今回はC#で使える「partcial class」という機能をお伝えしたいと思います。
ゲームでは1つのクラスに様々な機能が内包されがちなのでそういったコードを読みやすくする方法として活用してみてくださいね。

はじめに

例えばゲームの開発をしていると「プレイヤー」クラスがあって
そこに様々な機能や変数、関数などをたくさん含まれることがあると思います。

何千行にもなってしまって
どこにどの関数や変数がわからなかったりしますよね…

そういったときに「class」ではなく「partial class」を用いることで
ソースコードの読み辛さを改善することができます。

 

「partial class」とは

partialという単語には「部分的」という意味があり
文字通り、部分的にクラスを定義することができます。

これを使うことで一つのクラスを複数のソースコードファイル(.cs)に分けることができるようになります。

別のファイルに同名クラスの変数や関数などを
分けて書けるということです!

 

「プレイヤー」クラスでの例

例えば「プレイヤー」というクラスでは
下記のようなある程度まとまった機能があるとします。

  • 攻撃
  • 当たり判定
  • 移動

これらの機能を機能を持った「Player」クラスを三つのソースコードに分割すると

  • PlayerAttack.cs(攻撃)
  • PlayerHit.cs(当たり判定)
  • PlayerMove.cs(移動)

このように別のソースコードとして分割することができます。

もちろん、他のソースコードに記述された変数や関数なども
どのソースコードからでも呼び出し可能です!

 

「partial class」の使い方

では具体的な使い方をお伝えしていきます。

まずは全機能をそのまま実装した
ごちゃついた「プレイヤー」クラスを作成します

 

プレイヤークラスを作成

ここでは「Player」というクラスがある前提として
さきほどの3つの機能を持った「Player」クラスを作成します。

Player.cs

public class Player : MonoBehaviour 
{
    // 攻撃
    public void Attack()
    {
        // 処理
    }

    // 当たり判定
    public void Hit()
    {
        // 処理
    }

    // 移動
    public void Move()
    {
        // 処理
    }
}

 

ソースコードを分ける

ではこれを下記の3つソースコードに分けます。

  • PlayerAttack.cs(攻撃)
  • PlayerHit.cs(当たり判定)
  • PlayerMove.cs(移動)

そして処理別に分けると下記のようになります

 

 

PlayerAttack.cs

public partial class Player : MonoBehaviour 
{
    // 攻撃
    public void Attack()
    {
        // 処理
    }
} 

PlayerHit.cs

public partial class Player : MonoBehaviour 
{
    // 当たり判定
    public void Hit()
    {
        // 処理
    }
} 

PlayerMove.cs

public partial class Player : MonoBehaviour 
{
    // 移動
    public void Move()
    {
        // 処理
    }
} 

 

全てのソースコードから全処理が呼べる

これはあくまでソースコードを見やすく整理するためにクラスを分割しているだけなのでどこからでも全ての関数や変数が呼べます。

またファイルは3つありますが、プロジェクトには
「Player」クラスしかないことに注意しましょう!

 

理想的なクラスの形…ではない

ただ一つ注意しておきたいのは
これが「ベストなソースコード」というわけではないと個人的には思っています。

本来であれば攻撃処理が多すぎるのであれば攻撃処理自体をクラス化して
「プレイヤークラス」が「攻撃クラス」保持して操作する形の方がよりわかりやすくなります。

当たり判定、移動処理も同様ですね!

 

「クラスの分割」は状況によっては効果的

ただ別クラスで分けるのは大規模なプロジェクトだと影響が多すぎて対応しきれないケースもあるのであくまで状況を見て実装した方が良かったりします。

そういう意味では状況にとらわれず簡単にクラスを分割できる「partial class」の機能は
「どこでも使えるソースコード整理術」と言えなくもなさそうです。

ひとまず見にくいなら「partial class化」するのもありかもです!

 

活動内容のPR

下記が本サイトでの活動内容となります。

ゲーム開発技術ついて YouTubeで発信中!

妖怪剣劇アクション 妖言 公式サイト

妖怪剣劇アクション妖言 鋭意開発中!

 

最後に

いかがでしたでしょうか。
今回はC#のクラスを分割する機能「partial class」について紹介してみました。

ゲーム開発でのクラスは多機能になり過ぎることも多く、ごちゃごちゃしがちなので
自分の場合はごちゃついてきたら「ひとまずpartial class作戦」で進めようかと思います。

クラスが分割できたら
そこからクラス化していくのも良さそうです

では今回の記事はここで終わりたいと思います。
この度はここまでお読みいただきありがとうございました。

 

また本サイトではゲーム開発についての情報を発信しております。
もし興味がございましたら画面左下のベルマークからサイトを購読いただけますと幸いです。

コメント

スポンサーリンク
タイトルとURLをコピーしました