企業実習(Unity)〜システム開発〜
企業実習の始まり
教室での授業は終わり、2週間弱の企業実習が始まった時の話です。
実際の案件のような課題をチームに分かれて、依頼書で求められている機能を実装するということをやりました。(※詳しくは口外できないのでざっくりとした説明になります。ご了承ください)
データが配布されるまでの間にチーム開発実習の時と同じチームで話を詰めます。
4日ぐらいは個人開発で各々必要な機能を実装して、良かったひとのものをベースに追加機能を実装していこうという話になり、
その後チームで作ったものをひとつにし、
次の週に発表用の資料作成や可能なら機能の追加やアレンジをしよう
というのが初日に出た一案でした。
担当したこと
配布されたデータにまず当たり判定をつける必要がある、ということで当たり判定をつけるひとと基本のカメラワークを書くひとが必要だという話に。
それならユニティちゃんを動かせるようにするスクリプトも並行してやれそうだということで、それは私が担当することに。
資料作成も申し出たので併せて進捗管理も立候補しました。
最終的に私がしたことは、
・自由移動機能追加、カメラ調整
・スクショ機能追加
・資料作成
・進捗管理
こんな感じのことでした。
バージョン管理
チームで開発する条件として、バージョン管理を使って作っていくというものだったのでBitbucketとSourcetreeの設定が必要でした。私はそれなりにすんなりできたのですが、チームメンバーが使っているWindowsの備え付けのデスクトップではうまく行かず難儀しました。それに関してはGoogleで検索して見つけたやり方をやってあげると上手く行きました。
このバージョン管理がやろうとしていることはわかるのですが、やり方と仕組みがいまいちわからずどちらのチームも辛酸を嘗めました。
当初からの話と変わり、各機能をそれぞれが担当して制作していき、バージョン管理を使ってひとつに合わせていくという作成の流れになりました。
マスターをいじるのは常に誰か一人というルールを決めて、上書きなどを誤ってしてしまわないように徹底しました。マスターのデータでは特に目立った問題はなく済みました。個々のブランチでは競合などが厄介でブランチを切り直すことも度々あり、今後の課題と感じています。これは実践していくことで身に着ける部分なのではないかと考えています。
資料について
Googleスライドで2つ資料(発表用資料と取扱説明書)を作りました。
システム概要と提供機能予定のものと取扱説明書が書かれているスライド資料の見本(スクショ)があったので、そういう風に指定や書かれたりはしてないかったのですが、システム概要と提供機能予定については依頼を受けてものを作り始める前に相手の会社に見せるものだと思いそれらは発表用資料として対外用に作成しました。少し硬い語調で専門的な用語を使っています。どんな仕上がりかのイメージも載せ、工程表なども記載しました。
取扱説明書は少し簡単な語調にし、専門用語はなるべく控え、どなたが見てもわかりやすいものを心がけました。文字量も少なく要点と画像のスライドにし、あとは口語説明で補足するようにしました。
上記スライドの発表をするための説明用資料も軽くテキストで用意し、最終日に説明をしました。
作ったものの中にも説明書があるといいかもしれないとのチームメンバーのアイデアにより、簡単な説明画像も用意しました。
反省点や問題点
ゲームをチーム開発実習で作っていた時よりもチーム感があって安堵しながら始まりましたが、個人プレイが目立つチームとなったように思います。
コミュニケーションは大事、と再度心に刻みました。自分から働きかけたりはしていましたが、もっとできれば良かったかもしれないと気づけたので次からは更に優先度を上げて取り組もうと思います。
ユニティちゃんの移動用スクリプトのコード
キャラクター コントローラーを使いその上でスクリプトをアタッチし動かせるようにしていました。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CharaController : MonoBehaviour
{
Animator animator;
CharacterController cc;
Vector3 dir = Vector3.zero;
public float gravity = 20.0f;
public float speed = 4.0f;
public float rotSpeed = 300.0f;
//int move = 0;
public GameObject unityChan;
void Start()
{
animator = GetComponent<Animator>();
cc = GetComponent<CharacterController>();
}
void Update()
{
animator.SetInteger("number", 0);
if(Input.GetKey(KeyCode.UpArrow) || Input.GetKey(KeyCode.W)){
//move = 1;
float acc = Mathf.Max(Input.GetAxis("Vertical"), 0f);
animator.SetFloat("speed", acc);
//animator.SetBool("isMove", false);
animator.SetInteger("number", 1);
//animator.SetBool("isMove", true);
//CharacterControllerはMoveでキャラを移動させる
//cc.Move((transform.forward * acc * speed + dir) * Time.deltaTime);
cc.SimpleMove(transform.forward * Input.GetAxis("Vertical") * Time.deltaTime * 40.0f*speed);
}
if(Input.GetKey(KeyCode.LeftArrow) || Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.RightArrow) || Input.GetKey(KeyCode.D)){
//接地していたら
//if (cc.isGrounded)
//{
animator.SetInteger("number", 1);
//move = 1;
//animator.SetInteger("number", move);
//animator.SetBool("isMove", true);
float acc = Mathf.Max(Input.GetAxis("Vertical"), 0f);
//左右キーで回転
float rot = Input.GetAxis("Horizontal");
//前進、回転が入力されていた場合大きい方の値をspeedにセットする(転回のみをするときも動くモーションをする)
animator.SetFloat("speed", Mathf.Max(acc, Mathf.Abs(rot)));
//回転は直接トランスフォームをいじる
transform.Rotate(0, rot * rotSpeed * Time.deltaTime, 0);
//}
//下方向の重力成分
dir.y -= gravity * Time.deltaTime;
}
if(Input.GetKey(KeyCode.DownArrow) || Input.GetKey(KeyCode.S)){
float bcc = Input.GetAxis("Vertical");
animator.SetFloat("speed", bcc);
animator.SetInteger("number", 2);
//move = 1;
//animator.SetInteger("number", move);
//animator.SetBool("isMove", true);
//CharacterControllerはMoveでキャラを移動させる
//cc.Move((transform.forward * bcc * speed + dir) * Time.deltaTime);
cc.SimpleMove(transform.forward * Input.GetAxis("Vertical") * Time.deltaTime * 30.0f*speed);
}
}
}
終わりに
企業実習が終わり、あとは修了式だけとなりました。
修了式では修了証と成績表が渡され、私は自分の評価よりも甘く優しい評価を頂き概ね良好な成績を修められました。
やっとこれで準備運動が終わり、ここから始まります。得たプログラミングの知識を使える仕事探しが。