LoginSignup
0
1

More than 5 years have passed since last update.

unity > cube落ちゲー > LookAt() / RaycastHit / Gravity

Last updated at Posted at 2015-07-31

LookAt(), RaycastHitを使って、ちょっとした落ち物ゲーを作ってみた。

動作確認
Unity 5.1.2 on MacOS X

準備

  1. Planeを作る
    • Position Y: -0.75 にする
  2. 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の落下速度を速めるなり、制限時間を設けるなりするとゲーム性が高まるかもしれない。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1