LookAt(), RaycastHitを使って、ちょっとした落ち物ゲーを作ってみた。
動作確認
Unity 5.1.2 on MacOS X
準備
- Planeを作る
- Position Y: -0.75 にする
- Cubeを作る
- Position Y: 20 にする
- Rigidbodyを追加する (Drag:2.77, Use Gravity:チェック)
Main Cameraスクリプト
Main Cameraのスクリプトは以下 (Followと命名)。
using UnityEngine;
using System.Collections;
public class Follow : MonoBehaviour {
public Transform myTransform;
void Start () {
}
void Update () {
transform.LookAt (myTransform);
}
}
Main Camera のインスペクタに出てくる My TransformにCubeを関連付ける。
Cubeのスクリプト
Cubeのスクリプトは以下 (CubeHitと命名)。
using UnityEngine;
using System.Collections;
public class CubeHit : MonoBehaviour {
private int score = 0;
private float init_y;
private bool bfStop = false;
void Start () {
init_y = transform.position.y;
}
void OnGUI() {
Rect rect1 = new Rect (10, 10, 100, 30);
GUI.TextField (rect1, score.ToString ());
}
void OnCollisionEnter(Collision collision) {
bfStop = true;
}
void Update () {
if (bfStop) {
return;
}
Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
RaycastHit hit;
Physics.Raycast (ray, out hit);
if (hit.collider.gameObject == gameObject) {
Vector3 vec = transform.position;
vec.y += 0.5f;
transform.position = vec;
score += (int)(init_y - vec.y);
}
}
}
遊び方
開始すると上部からCubeが落ちてくるので、適当なタイミングでマウスカーソルをCubeに当てる。そうすると、その地点のスコアが得られ、Cubeが上に押し上げられる。
PlaneすれすれにCubeがある時がスコアが高くなるので、ぎりぎりまで待ってからマウスカーソルをあわせる方が高得点が狙える。
CubeがPlaneに接触するとゲーム終了。
あとは、hitした時にdragを減らしてcubeの落下速度を速めるなり、制限時間を設けるなりするとゲーム性が高まるかもしれない。