アトリエ殺人水上機

やりたいことをやった備忘録です。

Unityでストラックアウトを作る(2)球を投げる


sheeplane.hatenablog.com

この記事からの続きです。

因みに使用しているUnityのバージョンはUnity 2017.4.1f1です。

目次

2、球を投げる

 2-1、球を投げるスクリプト

 2-2、球の発射角変更スクリプト

 2-3、スクリプトとオブジェクトを連動

 2-4、球が消えるスクリプト

2、球を投げる

ストラックアウトを作るにあたってまず最初に作ったのが球を投げる装置です。

球を投げる装置には2つの機能が必要だと考えました。

 ①球を投げる。

 ②球を投げる角度を変更する。

具体的には球を投げるスクリプトを子オブジェクトに付与させて、親オブジェクトをコントローラーなスクリプトで動かす感じにしました。

2-1、球を投げるスクリプト

参考元:

unity3d.sakura.ne.jp

ほぼこのサイト様のスクリプトを丸々コピーして実装しました。

弄ったところを下に示します。

・投球キーの変更

この後WASDで発射角を制御するスクリプトを追加しますが、Zキーで投球というキー配置はイライラするとの提言が発生したため、左クリックに移動しました。キーバインドの変更に関する記述はこちらのサイト様を参考にさせていただきました。

参考元:

qiita.com

 

具体的には

if(Input.GetKeyDown (KeyCode.Z)){ //Zキーが押された時

の部分を

if (Input.GetButtonDown("Fire1")) //左クリックが押された時

に変更しました。

2-2、球の発射角変更スクリプト

球を発射することが出来るようになったので、次は発射角を弄れるようにしたいと思います。

これもとても参考になるサイト様があったのでこちらのスクリプトをほぼほぼコピーして実装しました。(頭を使っていない)

参考元:

www.scriptlife.jp

弄ったところは次の通りです。

・左右の傾きキーをQEキーに移動・感度調整

上述の投球キー変更と同じサイト様の記述を参考にしながらキーバインドを変更しました。ついでに感度も0.2倍にしました。

 

具体的には

if (Input.GetButton("Fire1"))
{
gameObject.transform.Rotate(0, 0, 0.5f, Space.World);
}
if (Input.GetButton("Fire2"))
{
gameObject.transform.Rotate(0, 0, -0.5f, Space.World);
}

の部分を

if (Input.GetKey(KeyCode.Q))//Qキーを押したとき
{
gameObject.transform.Rotate(0, 0, 0.1f, Space.World);
}
if (Input.GetKey(KeyCode.E))//Eキーを押したとき
{
gameObject.transform.Rotate(0, 0, -0.1f, Space.World);
}

に変更しました。

 

・全体的な感度調整

このままだとキーボードチョン押しバトルが始まってしまうので感度を調整したいと思います。

Vertical・Horizontalの感度調整は、Edit>ProjectSettings>Inputを開いてinspectorを見ると次のような項目があるのでVertical・Horizontalタブを開いてSensitivityを変更すると感度が変化します。下の画像を参照ください。

f:id:sheeplane:20180611225830p:plain

 

2-3、スクリプトとオブジェクトを連動させる

作成した2つのスクリプトとオブジェクトを連動させます。具体的には次のオブジェクトを用意します。

 

・空のオブジェクト(親)

 ・ピッチングマシンだと言い張るオブジェクト(子)

 ・球を発射する位置を指定する空オブジェクト(子)

 

このオブジェクトに対して、

 

・空のオブジェクト(親)←球の発射角を変更するスクリプト

 ・ピッチングマシンだと言い張るオブジェクト(子)

 ・球を発射する位置を指定する空オブジェクト(子)←球を発射するスクリプト

 

とすることで、球が発射する装置を操作することが可能になります。

 

f:id:sheeplane:20180611225938p:plain

f:id:sheeplane:20180611225913p:plain

※画像は開発後のものです

2-4、球が消えるスクリプト

この調子で球を乱射しているとオブジェクトがドンドン溜まってもしかすると重くなるかもしれません。そのために一定時間が経過すると球が消えるスクリプトを組みました。

このスクリプトは、ひよこ本

Unity2017入門 最新開発環境による簡単3D&2Dゲーム制作 (Entertainment&IDEA)

Unity2017入門 最新開発環境による簡単3D&2Dゲーム制作 (Entertainment&IDEA)

 

 のp134~に示してあります。

具体的には

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

public class Delete : MonoBehaviour {
    public float deleteTime = 5.0f;//消去する時間を指定
    // Use this for initialization
    void Start () {
        Destroy(gameObject, deleteTime);//スクリプトを適用したオブジェクトを指定時間後消去
    }
}

と書いたスクリプトを球のオブジェクトに適用しました。そうすることで、

 

f:id:sheeplane:20180611225954p:plain

これが

f:id:sheeplane:20180611230005p:plain

こういう感じに球が消えるようになりました。※画像は開発後のものです。

 

以上です。次は上の画像みたいな的を作っていきます。

よろしくお願いします。

スクリプトをなんかいい感じに表示できるようにしたいです。それっぽくなりました。