SuperHero

落ちてくる隕石の軌道をスーパーガールが変えて、地球を救うゲームです。まだ途中ですが取りあえずアップしました。

ゲーム説明
キーボードの カーソルキー「→」、「←」で左右に移動。 カーソルキー「↑」で前進「↓」でバックします。左Shiftトグル入力で視点を変えます。
パソコン専用のゲームです。
クリックでゲームがスタートします
落ちてくる隕石の軌道をスーパーガールが変えて地球を救うというのは、発想として面白いのですが色々メンドクサイ問題があるようです。まずスーパーガールはすぐ地球から離れて迷ってしまいます。隕石が落ちる場所を3Dだと判定しにくい。もう少しゲームの世界をまとめる必要があるようです。

Unityで球面上を移動する方法。
Hierarchy->Create->3D Object->Sphereで球体をつくる。
 ScaleはX30 Y30 Z30程度にする。SphereのTagをBlockにする。

Hierarchy->Create->Create Emptyで空のGameObjectをつくる。

GameObjectの名前をCenterOfBalanceにする。

Hierarchy->Create->3D Object->Cubeで立方体をつくる

CenterOfBalanceをCubeの子オブジェクトにする。
CubeにAdd ComponentでNew Scriptをつくる。名前はGravityFreeAgentとする。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GravityFreeAgent : MonoBehaviour {

[SerializeField]
Transform CenterOfBalance; // 重心
private Transform target;

void Start () {
target = GameObject.FindGameObjectWithTag("Block").transform;
}

void Update () {
// キーボード入力で移動、回転
if (Input.GetKey(KeyCode.LeftArrow)) {
transform.Rotate(new Vector3(0, -4f, 0),Space.Self);
}
if (Input.GetKey(KeyCode.RightArrow)) {
transform.Rotate(new Vector3(0, 4f, 0),Space.Self);
}
if (Input.GetKey(KeyCode.UpArrow)) {
transform.position = transform.position + (transform.forward * 5 * Time.fixedDeltaTime);
}
if (Input.GetKey(KeyCode.DownArrow)) {
transform.position = transform.position - (transform.forward * 5 * Time.fixedDeltaTime);
}

RaycastHit hit;

// Transformの真下の地形の法線を調べる
if (Physics.Raycast(
CenterOfBalance.position,
(target.transform.position - CenterOfBalance.position).normalized,
out hit,
float.PositiveInfinity))
{
// 傾きの差を求める
Quaternion q = Quaternion.FromToRotation(transform.up, hit.normal);

// 自分を回転させる
transform.rotation = q * transform.rotation;

// 地面から一定距離離れていたら落下
if (hit.distance > 0.05f) {
transform.position =
transform.position +
((target.transform.position - CenterOfBalance.position).normalized * Physics.gravity.magnitude * Time.fixedDeltaTime);
}
}
}
}

CubeのScriptであるGravityFreeAgentのCenter Of BalanceにCubeの子オブジェクトCenterOfBalanceをドロップする。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です