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

ゲーム開発研修(Unity基礎編)【ミクシィ22新卒技術研修】

 ゲーム開発研修(Unity基礎編)【ミクシィ22新卒技術研修】

MIXI ENGINEERS

April 25, 2022
Tweet

More Decks by MIXI ENGINEERS

Other Decks in Programming

Transcript

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

    ・新規機能開発、既存機能改善、不具合修正etc… ・Cocos2d-x / C++ ・Unity Engine Challengeのお手伝いなどもしてたり
  2. Unityで学ぶ回転 クォータニオン ・まずは今の実装を見ていきましょう。 ・Projectウィンドウから、Scripts -> Scene_01 -> Cursor.cs を開く ・input には

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

    // ある方向からある方向へ向かせるクォータニオンを作成する Quaternion.FromToRotation // 向きたい方向に向かせるクォータニオンを作成する Quaternion.LookRotation
  4. SphereCastで作る予測線 ・origin … 球を飛ばす原点 ・radius … 球の半径 ・direction … 飛ばす方向

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

     Projectウィンドウ -> Materials -> Scene_02 の中で  右クリック -> Material を選択  Rendering ModeをTransparentにし、それっぽい緑にしておく  アルファ値を設定するのを忘れずに。
  6. SphereCastで作る予測線 ・次はスクリプトを書いていく。  Projectウィンドウ -> Scripts -> Scene_02 -> cannon.cs を開く

    ・一番上にシリアライズフィールドを追加する。   [SerializeField] LineRenderer predLine;
  7. SphereCastで作る予測線 ・次はスクリプトを書いていく。  Projectウィンドウ -> Scripts -> Scene_02 -> cannon.cs を開く

    ・一番上にシリアライズフィールドを追加する。 ・シリアライズフィールドを追加したら忘れずにcannonのインスペクタからpredLineを設定しておく。   [SerializeField] LineRenderer predLine;
  8. 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); }