Perl日記

PerlとかRubyとかPHPとかPythonとか

MLAPI その8

弾が出現したら、前方に直線上に進むようにする。

Bullet スクリプトを作って Bullet にアタッチ。

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

public class Bullet : MonoBehaviour
{
    private float speed = 500;

    void Start()
    {
        GetComponent<Rigidbody>().AddForce(transform.up * speed);
    }
}

弾らしく動かすために、transform.forward ではなくて、transform.up にした。
Quaternion.Euler(0, 0, 90) で出現させているので、世界では横に飛んでいく。

f:id:rightgo09:20201208233016g:plain

このままだと飛び続けて消えないので、3 秒経ったら消えるようにしたい。

    private float restTime = 3;

    void Update()
    {
        restTime -= Time.deltaTime;
        if (restTime < 0)
        {
            Destroy(this.gameObject);
        }
    }

弾が消えるのは弾の機能だから、RPC が絡んでこない。それぞれのクライアントで自動的に消える。


弾が何かと接触したら、それも消えるようにしたい。

OnCollisionEnter のコールバックで設定する。

    void OnCollisionEnter(Collision other)
    {
        Destroy(this.gameObject);
    }

何回かスペースキーを連打して PlayerCube に当たると、その時点で消えるようになった。

しかし、オブジェクトの生成と消滅はコストが比較的高くて、こういうやつだとよくオブジェクトプールの手法が使われるらしいので次はそれをやってみる。