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

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

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

Avatar for MIXI ENGINEERS

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); }