振り返り:番犬
CoddyのUnityジャーニー「物理演算とゲームプレイ」セクションの一部。レッスン 55/63。
チャレンジ
中級番犬は犬小屋に見知らぬ人が近づかないようにします。Dogスクリプトを書きましょう。インスペクターで、player、kennel(犬小屋の前にある赤いマット)、speed(3.5)、guardRange(6)、bite(5)を設定します。PlayerスクリプトとHealthスクリプトは用意されています。矢印キーでプレイヤーを押し動かせます。また、プレイヤーのHealthにはTakeDamage(int amount)というpublicメソッドがあります。
- プレイヤーが地面に沿って犬小屋から
guardRangeより近い距離にいる間、犬はプレイヤーに向かって走ります。距離は犬からではなく、犬小屋から測ります。 - それ以外の場合、犬は犬小屋に戻り、犬小屋から0.3以内に入ると立ち止まります。
- 犬はRigidbodyの速度を
speedに設定して地面に沿って走り、y方向の速度は維持します。 - 犬がプレイヤー(タグが
Player)にぶつかると、プレイヤーのHealthに1ダメージを与え、犬から真っ直ぐ離れる方向へ、地面に沿ってbiteのインパルスをプレイヤーに加えます。
Playを押して犬小屋まで歩いて行き、それからCheckを押してください。
自分で試してみよう
using UnityEngine;
public class Dog : MonoBehaviour
{
[SerializeField] private Transform player;
[SerializeField] private Transform kennel;
[SerializeField] private float speed = 3.5f;
[SerializeField] private float guardRange = 6f;
[SerializeField] private float bite = 5f;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
// 犬小屋を守る:近くにいるプレイヤーを追いかけるか、犬小屋に戻る
}
}