わらわら…
■ ある地点まで等速で動き、その地点で止まる
古い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 件のコメント:
コメントを投稿