簡単なブロック壊しの作成
unityにまったく触れた事がなくても、取り掛かりやすそうなブロック壊しのゲームを作成した。
備忘録も兼ねて投稿する事にした。
参考サイト
オブジェクトの配置
上のタブにあるGameObject/3D Object/Cubeを選択する
オブジェクトの形を変える
オブジェクトを配置し、配置したオブジェクトを選択する
選択すると右にコンソールが出てくる。
オブジェクトを直接操作して形を変えることもできるが、今回はコンソールから形を変える。
右のコンソールのTransfom/scaleのx,yの値を変えて大きさを変える。
今回はx = 10,y = 1,z = 15とする
カメラの調整
オブジェクトが設置出来たら、次はカメラの調整を行う
まず、カメラを選択する。
右下にある、カメラからの視点を参考にカメラを動かしていく。
壁の設置
床を設置したときと同じように、cubeを追加する。
zの値を15にし、床と合わせる。
左のオブジェクトコンソールから、壁をコピーしスライドさせる。
上下の辺も同じ工程を繰り返す。
plyer、ballの設置
今までと同じようにオブジェクトを追加、変形させる。
球は3DオブジェクトのSphereから追加する。
マテリアルの設定
いまのままだと色が何もついていないので、色をつける作業をしていく。
下にあるプロジェクトの部分を右クリックし、create/materialを選択。
オブジェクトのmaterialの欄に、作成したmaterialをドラッグする。
ボールも同じように色を付ける。
物理演算
ボールが落下する動作
物理演算をするオブジェクトを選択し、component/physics/Rigidbodyをクリック。
ボールを上に上げて、再生するとボールが落ちる
物理マテリアル(跳ね返り)を設定
create/physics/materialを選択。
それぞれの数値を変える。
項目の意味
-
Dynamic Friction
移動している物体に対する摩擦。通常は、0 から 1 の間の値を使用します。0 の場合、氷のような感じになります。1 の場合、強い力や重力がオブジェクトを押さない限り、すぐに止まります。 -
Static Friction
面上で静止しているオブジェクトに使用される摩擦。通常は、0 から 1 の間の値を使用します。0 の場合、氷のような感じになります。1 の場合、強い力を加えないとオブジェクトは動きません。 -
Bounciness
表面にどれだけ弾性があるか。0 の場合は弾性がありません。1 の場合はエネルギーが減ることなく跳ねます。シミュレーションには少量のエネルギーを加えるかもしれませんが、ある程度の近似が予想されます。 -
Friction Combine
衝突するオブジェクト間の摩擦をどう処理するか。- Average 2 つの摩擦力が平均化されます。
- Minimum 2 つの摩擦力のうち小さい方の値が使用されます。
- Maximum 2 つの摩擦力のうち大きい方の値が使用されます。
- Multiply 2 つの摩擦力が互いに乗算されます。
-
Bounce Combine
衝突するオブジェクト間の跳ね返し度合いをどう処理するか。Friction Combineと同じです。
物理マテリアルの実装
Sphere Colliderのmaterialに、作ったmaterialをドラッグする。
動かない軸を決める。
今回は、Y軸に動いてほしくないから、
Freeze PositionのYにcheckをつける。
また、回転はいらないのでFreeze Rotationは全てにチェックを付ける。
コードを書く
playerの動き
キーボードを押すとブロックが左右に移動するようにしたい。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class player : MonoBehaviour
{
public float speed = 1f;//スピード
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.GetKey(KeyCode.D))
{
if (this.transform.position.x > -5.5)
{
this.transform.position += Vector3.left * speed * Time.deltaTime;
}
}
if (Input.GetKey(KeyCode.A))
if (this.transform.position.x < -0.75)
{
this.transform.position += Vector3.right * speed * Time.deltaTime;
}
{
}
}
}