Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ゲーム開発研修(chapter2.Unity基礎編)【MIXI 23新卒技術研修】

ゲーム開発研修(chapter2.Unity基礎編)【MIXI 23新卒技術研修】

23新卒技術研修で実施したゲーム開発研修の講義資料(chapter2.Unity基礎編)です。
後ほど動画も公開します。

ハンズオン用リポジトリ:https://github.com/mixigroup/2023BeginnerTrainingUnityPublic

<< ゲーム開発研修資料一覧 >>
chapter0.ゲームUX編
https://speakerdeck.com/mixi_engineers/2023-game-development-training-chapter0-ux

chapter1.C#講座編
https://speakerdeck.com/mixi_engineers/2023-game-development-training-chapter1-csharp

chapter2.Unity基礎編
https://speakerdeck.com/mixi_engineers/2023-game-development-training-chapter2-unity

chapter3.課題ゲーム紹介編
https://speakerdeck.com/mixi_engineers/2023-game-development-training-chapter3-problem

chapter3.ハンズオン1編
https://speakerdeck.com/mixi_engineers/2023-game-development-training-chapter3-handson1

chapter4.ハンズオン2編
https://speakerdeck.com/mixi_engineers/2023-game-development-training-chapter4-handson2

出題と解答編
https://speakerdeck.com/mixi_engineers/2023-game-development-training-problem-and-answer

資料の利用について
公開している資料は勉強会や企業の研修などで自由にご利用頂いて大丈夫ですが、以下の形での利用だけご遠慮ください。
・受講者から参加費や授業料などを集める形での利用(会場費や飲食費など勉強会運営に必要な実費を集めるのは問題ありません)
・出典を削除または改変しての利用

MIXI ENGINEERS

May 08, 2023
Tweet

More Decks by MIXI ENGINEERS

Other Decks in Technology

Transcript

  1. 自己紹介 ・野﨑 裕也 (yuya.nozaki) ・21新卒 ・デジタルエンターテインメント事業本部 モンストゲーム運営部 クライアント2G クライアント2T ・アウトゲームUI担当

    ・新規機能開発、既存機能改善、不具合修正etc… ・たまにコラボ系の実装もやったり ・Cocos2d-x / C++ ・Unity Engine Challengeのお手伝いなどもしてたり
  2. 簡単な移動操作 ・Projectウィンドウから、Scripts -> Scene_1 で右クリック  Create -> C#Scripts でスクリプトを作成する(Cannon.cs として進めていきます)

    ・先にスクリプトをアタッチする  HierarchyからCannonを選択→InspectorのAddComponentから作成したファイル名を検索して設定。
  3. 簡単な移動操作 ・Projectウィンドウから、Scripts -> Scene_1 で右クリック  Create -> C#Scripts でスクリプトを作成する(Cannon.cs として進めていきます)

    ・先にスクリプトをアタッチする  HierarchyからCannonを選択→InspectorのAddComponentから作成したファイル名を検索して設定。 ・デフォルトで用意されている関数について   // オブジェクトが生まれたタイミングでUpdateより前に呼ばれる void Start() // 毎フレーム呼ばれる void Update()
  4. 簡単な移動操作 ・まずは前後の移動から作っていきましょう。 ・前移動から作っていきます。 // 移動 if (Input.GetKey(KeyCode.W)) {// 前 }

    if (Input.GetKey(KeyCode.S)) {// 後 } // 移動 if (Input.GetKey(KeyCode.W)) {// 前 transform.position += transform.foward * 10.0f * Time.deltaTime; }
  5. 簡単な移動操作 ・コード整理するとこんな感じ // 移動 float moveSpeed = 10.0f; Vector3 vec

    = Vector3.zero; if (Input.GetKey(KeyCode.W)) {// 前 vec += transform.forward; } if (Input.GetKey(KeyCode.S)) {// 後 vec -= transform.forward; } if(vec != Vector3.zero) { transform.position += vec * moveSpeed * Time.deltaTime; }
  6. 簡単な移動操作 ・回転のキー入力も作りましょう。 「 ・Unityで簡単な回転を行うには以下の関数を使用する // 回転 if (Input.GetKey(KeyCode.A)) {// 左

    } if (Input.GetKey(KeyCode.D)) {// 右 } // 現在の回転角に引数の回転角を加算する(オイラー角) transform.Rotate(Vector3 euler)
  7. 簡単な移動操作 ・左回転から作っていきます。 ・先程の移動と似たようなコードになるかと思います。 ・同じように右回転も作る。 // 移動 if (Input.GetKey(KeyCode.A)) {// 左

    transform.Rotate(new Vector3(0, -1, 0) * 100.0f* Time.deltaTime); } // 移動 if (Input.GetKey(KeyCode.A)) {// 右 transform.Rotate(new Vector3(0, 1, 0) * 100.0f* Time.deltaTime); }
  8. 簡単な移動操作 ・コード整理するとこんな感じ // 回転 float rotateSpeed = 100.0f; Vector3 rot

    = Vector3.zero; if (Input.GetKey(KeyCode.A)) {// 左 rot += new Vector3(0, -1, 0); } if (Input.GetKey(KeyCode.D)) {// 右 rot += new Vector3(0, 1, 0); } if(rot != Vector3.zero) { transform.Rotate(rot * rotateSpeed * Time.deltaTime); }
  9. Unityで学ぶ回転 クォータニオン ・まずは今の実装を見ていきましょう。 ・Projectウィンドウから、Scripts -> Scene_2 -> Cursor.cs を開く ・input には

    キー入力の結果が格納されている。 ・transform.rotationからオイラー角として値を取り出して入力と合成し、  クォータニオンとしてrotationに代入している。 // 現在の回転に入力を加算 Vector3 newAngle = transform.rotation.eulerAngles + (input); // rotationに代入 transform.rotation = Quaternion.Euler(newAngle);
  10. Unityで学ぶ回転 クォータニオン ・UnityでQuaternionの回転を表現する主な関数は4つ ・今回使うのは Quaternion.AngleAxis // オイラー角からクォータニオンを作成する Quaternion.Euler // 任意の回転軸からクォータニオンを作成する Quaternion.AngleAxis

    // ある方向からある方向へ向かせるクォータニオンを作成する Quaternion.FromToRotation // 向きたい方向に向かせるクォータニオンを作成する Quaternion.LookRotation
  11. 弾を撃つ ・このチャプターでは弾を発射できるようにしていただきます。 ・Spaceキーを押したときに砲塔の先から弾が出るようにします。 ・まずは弾のオブジェクトを作成します。 ・Hierarchy上で 右クリック -> 3D Object ->

    Sphere で球を作成。  名前はBulletにしておきます。 ・RigidBodyをアタッチしてUse Gravityをオフにしてください。 ・Bulletという名前のスクリプトを作ってアタッチしてください。 ・アタッチが出来たら、Hierarchy上のBulletをProjectウィンドウのPrefab -> Scene1の中に  ドラッグ&ドロップでPrefabを作成してください。 ・Prefabが出来たらHierarchyのBulletは削除してください。
  12. 敵を撃破する ・衝突する判定、すり抜ける判定それぞれに関数が用意してあります。 ・今回は弾が敵に当たったとき、になるので  OnCollisionEnter を使います。 // 衝突する判定 OnCollisionEnter (衝突した瞬間) OnCollisionStay

    (衝突して触れ続けている間) OnCollisionExit (離れる瞬間) // すり抜ける判定 OnTriggerEnter (すり抜ける瞬間) OnTriggerStay (すり抜けている間) OnTriggerExit (離れる瞬間)
  13. SphereCastで作る予測線 ・origin … 球を飛ばす原点 ・radius … 球の半径 ・direction … 飛ばす方向

    ・hitInfo … あたった場合の情報が入った構造体 ・maxDistance … 最大飛距離 ・他にも引数はあるが基本的なのはこんな感じ。 bool SphereCast(Vector3 origin, float radius, Vector3 direction, out RaycastHit hitInfo, float maxDistance)
  14. SphereCastで作る予測線 ・Unityのヒエラルキー上で右クリック -> Create Empty  名前は予測線なので「Pred Line」とか適当につけておく。  ”cannon”の子供にして、Line Rendererをアタッチする。 ・次はマテリアルを作る

     Projectウィンドウ -> Materials -> Scene_1 の中で  右クリック -> Material を選択  Rendering ModeをTransparentにし、それっぽい緑にしておく  アルファ値を設定するのを忘れずに。
  15. SphereCastで作る予測線 ・SphereCastを飛ばした先に何もないときに線が出続けてしまうと困るので  あたっていないときはLineRendererを出ないようにする   if(Physics.SphereCast(shotPoint.transform.position, Bullet.transform.localScale.x * 0.5f, turret.transform.forward, out

    hit, 30)) { predLine.SetPosition(0, shotPoint.transform.position); predLine.SetPosition(1, shotPoint.transform.position + (turret.transform.forward * hit.distance)); predLine.gameObject.SetActive(true); } else { predLine.gameObject.SetActive(false); }