アステロイドファイト

 球面に沿って移動するオブジェクトを使った、Photon Unity Networkのシューティングゲームです。6人まで参加してマルチプレイ出来ます。球体に沿って移動する方法を下記に載せます。
PC用:キーボードの カーソルキー「→」「←」「↑」「↓」で移動、「スペース」か「D」で弾発射、「W」で上昇「S」で下降、「Q」で惑星の大きさが変わり、「A」で惑星が消えます。

スマホ用:タッチするとバーチャルパッドが表示されます。キーボードでも操作出来ます。

Unityで球体に沿って移動するオブジェクトの作り方

Main Cameraのポジションを Position X:0 Y:0 Z:-30
Rotation X:0 Y:0 Z:0にします

Hierarchyにて
Create EmptyでGameObjectをつくり、名前をPlayer
TagをPlayerにします Position X:0 Y:0 Z:0
Rotation X:0 Y:0 Z:0

そこに、下記のスクリプトPlayermoveを付けます

using UnityEngine;

public class Playermove : MonoBehaviour
{
    private GameObject point;
    private float height;
    void Start()
    {
        point = GameObject.FindWithTag("Point");
        height = -12.0f;
    }

    void Update()
    {
        if (Input.GetKey(KeyCode.UpArrow))
        {
            transform.Rotate(12 * Time.deltaTime, 0, 0);
        }
        if (Input.GetKey(KeyCode.DownArrow))
        {
            transform.Rotate(-12 * Time.deltaTime, 0, 0);
        }
        if (Input.GetKey(KeyCode.RightArrow))
        {
            transform.Rotate(0, 0, -60 * Time.deltaTime);
        }
        if (Input.GetKey(KeyCode.LeftArrow))
        {
            transform.Rotate(0, 0, 60 * Time.deltaTime);
        }
        if (Input.GetKey(KeyCode.W))
        {
            height -= 0.01f;
            point.transform.localPosition = new Vector3(0, 0, height);
        }
        if (Input.GetKey(KeyCode.S))
        {
            height += 0.01f;
            point.transform.localPosition = new Vector3(0, 0, height);
        }
    }
}

Create EmptyでGameObjectをつくり、名前をPoint
TagをPointにします
Position X:0 Y:0 Z:-12
Rotation X:0 Y:0 Z:0

PointをドラッグしてPlayerの上に持っていき、子オブジェクトにします

Hierarchyにて
3D Object>
CubeでCubeをつくり、TagをBodyにします Position X:0 Y:0 Z:0
Rotation X:0 Y:0 Z:0

そこに、下記のスクリプトBodymoveを付けます

using UnityEngine;

public class Bodymove : MonoBehaviour
{
    private Transform player;
    private Transform point;
    void Start()
    {
        player = GameObject.FindGameObjectWithTag("Player").transform;
        point = GameObject.FindGameObjectWithTag("Point").transform;
    }

    void Update()
    {
        transform.SetPositionAndRotation(point.TransformPoint(player.position), Quaternion.Euler(player.eulerAngles.x, player.eulerAngles.y, player.eulerAngles.z));
    }
}

Hierarchyにて
3D Object>
SphereでSphereをつくります
Position X:0 Y:0 Z:0
Rotation X:0 Y:0 Z:0
Scale X:20 Y:20 Z:20

実行すると、矢印キーで前後左右に球面を動き、Wキーで上昇Sキーで下降します

コメント