Programming Serendipity

プログラミングを中心に種々雑多に書き留めます

Unity5 メモ8

  • オブジェクトの親のオブジェクトについたスクリプトの関数を呼ぶ
    this.gameObject.GetComponentInParent<EnemyController>().EnemyDead();

  • オブジェクトのサイズを取得
    renderer.bounds.size or collider.bounds.size or mesh.bounds.size

  • 敵をインスタンス化したときにプレイヤーと衝突していたら離す処理
    モンストではエリアが切り替わったときプレイヤーの位置を保持するため敵の出現位置とかぶる場合があり、
    敵出現時にぶつからないように引き離される。
    この処理は、オブジェクトの形状を円と仮定すると、以下のようにできる。

float enemyRadius = this.GetComponentInChildren<Renderer>().bounds.size.x / 2;  
float attackerRadius = coll.GetComponentInChildren<Renderer>().bounds.size.x / 2;  
Vector3 diff = coll.transform.position - this.transform.position;  
float length = enemyRadius + attackerRadius - diff.magnitude + 0.2f; // margin  
diff.Normalize();  
coll.transform.position += diff * length;  
  • プロジェクト全体の名前を変える
    プロジェクトのフォルダをリネームするだけで良い。
    プロジェクトフォルダ直下の.slnファイルなど、プロジェクトの名前がついているファイルはUnityが自動的に生成するので古いものは削除して問題ない。

  • 敵から味方へのダメージの連絡手段
    PlayerController > Player
    EnemyController > Enemy > EnemyAttack
    のような親子関係で、4人で1本の体力ゲージなのでPlayerControllerで体力情報を持っている。
    ここで、敵の攻撃がプレイヤーに当たったとき、つまり
    EnemyAttack.csのOnTriggerEnter2D()で引数にキャラクターが渡されているとき、以下のようにすると操作できる。
    coll.GetComponentInParent<AttackerController>().GainHP(-50);