Unity初心者のための演習課題です。
作成
1.新規3Dプロジェクトをプロジェクト名HoleGameで作成する。
2.CreateEmptyして名前をHoleとする。この際、Transformがリセットされていることを確認する。
![](https://joytas.net/wp-content/uploads/2021/02/img1-1024x281.png)
3.Holeを右クリックして子要素としてCubeを作成する。トランスフォームは以下
![](https://joytas.net/wp-content/uploads/2021/02/img2-1024x266.png)
4.今作成したCubeを複製して、Transformを以下のように変更する
![](https://joytas.net/wp-content/uploads/2021/02/img3-1024x238.png)
5.同様にあと2回複製する。Transformは以下
![](https://joytas.net/wp-content/uploads/2021/02/img4-1024x244.png)
![](https://joytas.net/wp-content/uploads/2021/02/img5-1024x262.png)
6.ここまでで以下のように穴の空いた板ができれば成功だ。
![](https://joytas.net/wp-content/uploads/2021/02/img6-1024x638.png)
7.着色していこう。プロジェクトビュー新規マテリアルからHoleという名前でマテリアルを作成する。Albedoで好きな色を設定しよう。
![](https://joytas.net/wp-content/uploads/2021/02/img7-1024x937.png)
8.マテリアルができたので4枚のCubeを選択したあと、マテリアルをドラッグして設定する。
![](https://joytas.net/wp-content/uploads/2021/02/img8-1024x806.png)
プレファブ化
1.今作成したHoleをドラッグしてプロジェクトビューに持っていってプレファブ化をする。こうすることによってこのHoleを繰り返し利用することが出来るようになる。
![](https://joytas.net/wp-content/uploads/2021/02/img9-709x1024.png)
2.プレファブからドラッグすることを2回繰り返して2つ複製し、1つ目のTransformを以下のように設定する。
![](https://joytas.net/wp-content/uploads/2021/02/img10-1024x759.png)
3.もう一つのTransformは以下
![](https://joytas.net/wp-content/uploads/2021/02/img11-1024x507.png)
4.以下のように配置されれば成功だ。
![](https://joytas.net/wp-content/uploads/2021/02/img12-1024x743.png)
カメラの設定
1.画面にいい感じに収まるようにカメラを設定する。MainCameraを選択し、Transformを以下のように設定する
![](https://joytas.net/wp-content/uploads/2021/02/img13-1024x222.png)
ボールの作成
1.ヒエラルキーのクリエイトからSphereを作成する。Transformは以下
![](https://joytas.net/wp-content/uploads/2021/02/img14-1024x343.png)
2.Sphereを選択し、AddComponentからrigidbodyを付与する
![](https://joytas.net/wp-content/uploads/2021/02/img15-1000x1024.png)
3.実行してみよう。Rigidbodyを付与することで重力が働くようになる。
下に落下するようになった。
スクリプトの作成
ではボールを左右上下の矢印キーで操作できるようにしてみよう。ボールの動かし方は色々あるが、今回は場の重力を操作することで動かすことにする。
1.プロジェクトビュー新規c#スクリプトからGravityScriptを以下のように作成する。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GravityScript : MonoBehaviour
{
public float gravityScale = 9.8f;
void Update()
{
Vector3 vec = new Vector3(0, -1.0f, 0);
vec.x = Input.GetAxis("Horizontal");
vec.z = Input.GetAxis("Vertical");
Physics.gravity = vec.normalized * gravityScale;
}
}
解説)
Updateの中で毎回、場の重力を設定している。y軸方向は常に下方向に向け上下左右キーの入力でx,z方向への重力を付与している。x,y,z成分が合成されたベクトルをPhysics.gravityに設定することでその場の重力が設定される。gravityScaleを9.8に設定しているのは地球の重力に合わせた設定だが、publicにしているのでインスペクターから調整できる。ゲームバランスを見ながら調整するとよいだろう。
2.作成したGravityScriptをMainCameraにドラッグしてアタッチする。
スクリプトは何かにアタッチしてゲーム画面に登場しないと機能しないので注意。
![](https://joytas.net/wp-content/uploads/2021/02/img16-437x1024.png)
実行してみよう。上下左右キーによってボールが動くようになったはずだ。
影の調整
影が強すぎてボールが見えづらくなっている。影の調整をしよう。directional LightのStrengthを0.3にする。
![](https://joytas.net/wp-content/uploads/2021/02/img17-1024x637.png)
Goalの設定
では一番下の穴に落ちたらGoalという設定にしてみよう。
1.一番下のHoleを右クリックしそこからCreateEmptyをするとその子要素して作成できる。
![](https://joytas.net/wp-content/uploads/2021/02/img18.png)
2.今作成したGameObjectを選択して、AddComponentからBoxColliderを付与する。
その際にisTriggerのチェックを入れる。
![](https://joytas.net/wp-content/uploads/2021/02/img19-1024x549.png)
こうすることでこのコライダーは実際に衝突を起こすのでなくセンサーとして働くようになる。
![](https://joytas.net/wp-content/uploads/2021/02/img20.png)
3.作成したgameObjectをGoalとリネームしておこう。
![](https://joytas.net/wp-content/uploads/2021/02/img21.png)
GoalScriptの作成
では実際にこのセンサーを通過したらゴールの判定を出そう。
1.新規スクリプトからGoalScriptを以下のように作成する。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GoalScript : MonoBehaviour
{
bool isGoal;
public GUIStyle style;
private void OnTriggerEnter(Collider other) {
isGoal = true;
}
void OnGUI() {
if (isGoal) {
GUI.Label(new Rect(50, 50, 100, 30), "Goal!!",style);
}
}
}
解説)
OnTriggerEnterはisTriggerなコライダーを持つオブジェクトがそのセンサー内にほかのコライダーが侵入したときに処理を走らせることが出来る。今回はボールが入ってきたらbool変数にtrueを入れている。
OnGUIは簡易的な出力を実現する仕組みでGUIStyleを設定しておくことでインスペクターから詳細なスタイルを当てることができるようになる。
2.作成が終わったらGoalにアタッチし、フォントサイズを調節する(実行端末によって大きさが違うので適宜調節する)
![](https://joytas.net/wp-content/uploads/2021/02/img22-1024x987.png)
実行してみよう。Goalを通過すると「Goal!」と表示されれば成功だ。
![](https://joytas.net/wp-content/uploads/2021/02/img23-1024x698.png)
完成
今回は簡単な作例を通して3Dオブジェクトの作成や配置、スクリプトによる重力の制御。ゴール判定などを学んだ。どれも基本的なことばかりなのでスムーズにおこなるよう練習しておこう。
コメント