わらわら…
■ ある地点まで等速で動き、その地点で止まる
古いRPGとかによくあった動き方です。
1マス分動いたら止まる。これが意外と難しかったのです。Lerp使えば簡単に2点間を移動できるんですが動きが等速じゃない!
ということで Lerp と timer の組合せで等速を実現します。
void Update ()
{
if(_timer > 1.0f) Turning();
transform.position = Vector3.Lerp(_currentPos, _distPos, _timer);
_timer += _speed * Time.deltaTime;
}
void Turning()
{
_currentPos = _distPos;
//新しい移動地点の設定
//ここで適当に _distPos を書き換える
_timer = 0.0f;
}
こんな感じで。
■ ランダムに方向を決める
上下左右ランダムに動くオブジェクトをつくりたい。
float _random = Random.value;
すると _random には 0.0 から 1.0 の値がランダムに入ります。
あとは条件分岐で上下左右振り分ければいいだけです。
■ Instantiate で生成したクローンの名前に (Clone) を付けないようにする
(Clone) はまぁ便利なんですが…というほど便利さを感じているかというと微妙ですね。
Enemy が EnemyPrefab を Instantiate で生成すると Enemy(Clone) になります。
Enemy(Clone) が生成すると Enemy(Clone)(Clone) になります。
といったようにEnemyを分裂させる処理の場合 Enemy(Clone)(Clone)(Clone)… と (Clone) だらけになるので (Clone) 消しましょう。
GameObject _obj = Instantiate (_prefab, transform.position, Quaternion.identity) as GameObject;
_obj.name = "Enemy";
こうすると(Clone)はなくなります。
■ Instantiate で生成したクローンに値を持たせる
参考:【Unity】 Instantiateで生成したGameObjectのScriptに引数を渡す方法
void Deplicate()
{
_life -= 1000;
GameObject _obj = Instantiate (_deplicate, transform.position, Quaternion.identity) as GameObject;
_obj.name = "Enemy";
EnemyMovement _objScript = _obj.GetComponent<EnemyMovement>();
_objScript._currentNo = _currentNo;
_objScript._nextNo = _currentNo;
}
やろうとしてることはライフが2000になったら1000減らして分裂をつくる~みたいな感じです。
左辺の _objScript._currentNo がクローンの持つ値になり、右辺がコピー元の _currentNo です。同じスクリプトを持っているのです少しわかりにくいですね。

0 件のコメント:
コメントを投稿