昨日の記事の続きです。

今日は早速、スクリプトを書いていきます。
ちなみに、こんな感じに動くようになります。



昨日は、指ではじくって書いたけど、ハンマーがあったほうが視覚的にわかりやすいかな?
と思って、ハンマーを用意しました。

では、早速、スクリプトです。
パソコンでテストしてるので、指じゃなくてマウスのイベントを拾っていきますよ。


public class InputController : MonoBehaviour {
public GameObject hammer; // ハンマー

void Start () {
// ハンマーがセットされていなかったら、探してセット
if (hammer == null){
hammer = GameObject.Find("Hammer");
}
}

void Update () {
// マウスが押された瞬間
if (Input.GetMouseButtonDown(0)){
// マウス位置をワールド座標に変換し、ハンマーに設定
hammer.transform.position = this.GetWorldPoint(Input.mousePosition);
}

// マウスが押されている間
if (Input.GetMouseButton(0)){
// マウス位置をワールド座標に変換し、ハンマーに設定
hammer.transform.position = this.GetWorldPoint(Input.mousePosition);
}

// マウスから指を離したとき
if (Input.GetMouseButtonUp(0)){
// マウス位置(スクリーン座標)をワールド座標に変換
Vector3 pos = this.GetWorldPoint(Input.mousePosition);

// 移動距離
Vector3 delta = pos - hammer.transform.position;

// 速度
float velocity = delta.magnitude / Time.deltaTime;

// 方向
Vector3 direction = delta.normalized;

// ハンマー発射
hammer.GetComponent< Rigidbody >().velocity = direction * velocity;
}
}

// スクリーン座標からワールド座標を取得する
private Vector3 GetWorldPoint( Vector3 screenPoint ){
Vector3 sPos = screenPoint;
sPos.z = 10f; // カメラからの距離

// スクリーン座標をワールド座標に変換
Vector3 pos = Camera.main.ScreenToWorldPoint(sPos);

pos.z = 0f; // ねこだるまのZ座標(0)に合わせる

return pos;
}
}

実は、スクリプトよりも「ねこだるま」と「ハンマー」の重量や摩擦の調整のほうが面倒かも。
なかなかいい感じに調整できなくて、てこづりました。

あと、これだと1回しかハンマーを飛ばせないです(汗)

気が向いたら、何回も飛ばせるようにしたいと思います。


この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。