Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Unity/CSharp 3

232 views

Published on

長崎大学マルチメディア研究会「Unity/C#講座」のスライドです。

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

Unity/CSharp 3

  1. 1. Unity(C#)講座3 Version1.1 (2019.06.26)
  2. 2. 自己紹介 名前: Boltz 所属: 長崎経済大学3年 好きな性: 多態性(Polymorphism) UnityC#講座のスライドを クラウドとブロックチェーンとIoTで インタラクティブに生成する超高性能AI たまにスライド生成に失敗する, 助けてくれ!!!
  3. 3. 目次 •オブジェクト指向(初級) •2Dシューティング
  4. 4. 到達地点と概要
  5. 5. 前提条件 •環境: Unity 2018.4.0.f1 • Unityはバージョンで挙動がかなり異なることも • 間違えずにダウンロードしてください • また、必須ではないがUnityHub経由の利用が便利 •エディタ: VisualStudio2017 • VimでC#を書いている人は我慢してくれ • 2019とかでも大して動作は変わらない(はず)
  6. 6. 前提条件 •C言語について理解がある • 構造化プログラミングの説明は速を上げます • C言語との差分を埋める説明の仕方をします •基本的な情報科学の知識がある • 基本情報技術者が体系的に学べていい感じ • ネットワーク, データベース(SQL), アルゴリズム, データ構造, ハードウェアの分野(大雑把)
  7. 7. 到達地点 •自分の思い描くゲームを作れるように なる • そのために、必要な処理を他から持ってくることが できる or 自分で実装できるようになる) • たとえ他から持ってきた処理でも、ある程度までは 中身が解読できる
  8. 8. 到達地点 •Unityチュートリアルをやっていく • ただしコードの写経はしないように • Unityの操作方法を学ぶためだけの教材ではない ので!!! •その前にC#のコードの意味を学習す る
  9. 9. オブジェクト指向
  10. 10. オブジェクト指向 • 変更に対して柔軟に対応するための仕組み • 頻繁に変更されそうな箇所をクラスに抽出 • それでは具体的にどう(C#で)プログラミン グしたらいいの? • 「オブジェクト指向三原則」が存在する!! • ちなみにJavaやC++では実現方法や用語が異なり ます(プロパティとか)
  11. 11. オブジェクト指向三原則 • 継承 • 上位クラスのもとに下位クラスを定義するとき、下位クラスに上位クラ スの属性が受け継がれる • 規格(インターフェース)を定義して、クラスに規格をもたせられる • カプセル化(実装の隠蔽) • オブジェクトの内部をブラックボックス化することで、使用者が内部構 造を知らなくてもよいようにすること • Getter / Setter (後述のプロパティ)はカプセル化を実現するための手段 なことに注意!! • ポリモーフィズム(多態性) • 同じメッセージを送っても受け手によって行われる操作が異なる
  12. 12. 継承(再掲) 年齢 わらう 真顔になる Person 細長さ RedLongPerson : Person 年齢(変数), わらう(関数), 真 顔になる(関数)も利用でき る! 赤くなる
  13. 13. MonoBehaviorクラスの継承(再掲) •Start, UpdateなどはMonoBehaviorで定義さ れている •Unityで使用できる便利な機能を使うため に引き継いでいる • StartやUpdateなど
  14. 14. カプセル化 • 内部構造を知らないでも、適切なメッセー ジを送ることでそのクラスが使用できる • 以下にカプセル化を実現する要素を示す • アクセス修飾子 • プロパティとフィールド
  15. 15. アクセス修飾子 • その変数に外部のアセンブリ(クラスな ど)からアクセスできるかを規定する • public, privateなどがある • 簡単にまとめたものを次のページに貼って いる
  16. 16. アクセス修飾子(再掲) privateprotectedinternal public MethodM M MアセンブリA public アセンブリB M 別のクラス 派生クラス M
  17. 17. プロパティ • 外からはメンバ変数のように見え、中では メソッドのように振る舞う • まず変数を小文字先頭で定義して (例: int variable;) プロパティを同じ型で定義する (例: int Variable {get; set; })
  18. 18. プロパティ • プロパティ(getter, setter)の実装例 • 基本的にデータを保持する変数を小文字先頭 (hitPoint)で、同じ型のプロパティを大文字先頭で 定義(HitPoint) • 自分に都合の悪い値が与えられたら、加工するプ ロパティを作ってみる • 最大HPを超えたHPが与えられると最大HPに直す • 0より低いHPが与えられると0に直す
  19. 19. プロパティ
  20. 20. プロパティ(参考動画) • https://twitter.com/MinoDriven/status/1142926621583 663104?s=20 • すべてにgetter / setter をつければいいものではない • データへアクセスできるかどうかも含め考えていこう public プロパティ名 { get{ ~~ } private set{ ~~ } }
  21. 21. ポリモーフィズム(多態性) • 継承やインターフェース実装をしたクラスに同名 の関数を定義(上書き)できる • 引数の型によって関数のふるまいを変化させられ る(オーバーロード) • クラスによって演算子(+とか-とか)の意味まで変 えられる • Unityでは<GetComponent>()でインターフェース を捕まえる方法をよく使う
  22. 22. Dog / DogScript (Class) + Bark() Cat / CatScript (Class) + Bark() Owner (Class) 動物たちに鳴いてほしいな!!
  23. 23. Dog / DogScript (Class) + Bark() Cat / CatScript (Class) + Bark() Owner (Class) Dog.Gameobject. GetComponent<DogScript>(). Bark() Cat.Gameobject. GetComponent<CatScript Bark()
  24. 24. Dog / DogScript (Class) + Bark() Cat / CatScript (Class) + Bark() Owner (Class) Dog.Gameobject. GetComponent<DogScript>(). Bark() Cat.Gameobject. GetComponent<CatScript Bark() 同じような関数をまとめられないかな...
  25. 25. IAnimal (Interface) +Bark() Dog (Class) Cat (Class) Owner (Class) 実装 実装
  26. 26. IAnimal (Interface) +Bark() Dog (Class) Cat (Class) Owner (Class) 同じ関数はIAnimal (Interface)に まとめました!! 実装 実装
  27. 27. IAnimal (Interface) +Bark() Dog / DogScript (Class) Cat / CatScript (Class) Owner (Class) 実装 実装 Dog.Gameobject. GetComponent<IAnimal>(). Bark() Cat.Gameobject. GetComponent<IAnima Bark()
  28. 28. IAnimal (Interface) +Bark() Dog / DogScript (Class) Cat / CatScript (Class) Owner (Class) 実装 実装 場にあるAnimalインタフェースを実装した オブジェクトをすべて鳴かせる: Bark()させる ことも可能!!
  29. 29. ポリモーフィズム(多態性) • IPAの試験とか一般的な教本とかでは「抽象クラ ス」「親クラス」を継承した「子クラス」の関数 呼び出しなどが例に出されることも • ただ、is aの関係にない継承や、多重継承が嫌われ ている観点からインタフェースで多態性を実現す ることが多い気がする
  30. 30. オブジェクト指向(まとめ) • 最初はわからんかも!! • ただ、3要素「継承」「カプセル化」「ポ リモーフィズム」は頭の片隅に置くように • classやオブジェクト同士をベタベタに結合 させると、後からの修正が大変になる • 基本情報技術者などで出てくる概念「モジュー ル結合度」について学習してみては
  31. 31. 余談(読み物): 軽いやつ • お前は絶望的にプログラミングに向いてないから諦め て刺身にタンポポ乗せる仕事でもやってろ / 古都こと : https://megalodon.jp/2019-0102-2318- 11/https://note.mu:443/kotofurumiya/n/n31d401fce78 2 • 一時期Twitterで話題になった, 現在は削除された • 色々なことが学べる良記事(変数名の付け方, エラーの読 み方, 学習の進め方など) • 多分本題はタイトルの通りではないと思われるが...
  32. 32. 余談(読み物): 重いやつ • オブジェクト指向デザインパターン • 頭のいい人の「問題」の解決策をパターン化した もの(大雑把な説明) • 「オブジェクト指向における再利用のためのデザ インパターン」が元となっている(文教図書館に ある) • 他のプログラミングの教本でもしばしば言及され るのでいくつか覚えておけばよさそう
  33. 33. それではUnityをやる • https://unity3d.com/jp/learn/tutorials/projects/2 d-shooting-game-jp • 注意: イントロダクションを読んで、素材を ダウンロードすること!! • https://unity3d.com/jp/learn/tutorials/projects/2d-shooting-game/getting- started?playlist=46524
  34. 34. 参考文献 マイケル・ディックハイザー, 三宅陽一郎ほか「ゲー ムプログラマーのためのC++」2011, SBクリエイティ ブ 五十嵐 祐貴, 岩永 信之「スラスラわかるC# 第2版」 2018, 翔泳社

×