対象のオブジェクトがキャラクターの視界に入った時だけ処理をする方法
ゾンビやモンスターがダンジョンを巡回し、そこにプレイヤーが視界に入ったらプレイヤーを追いかけるみたいな処理をやってみたい。時もある。。。
と、いうことでちょっとやってみました。
obj01をプレイヤーとして、以下のコードを書いてみます。
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
var diff = obj01.transform.position – transform.position;
var axis = Vector3.Cross(transform.forward, diff);
var angle = Vector3.Angle(transform.forward, diff) * (axis.y < 0 ? -1 : 1);
if (angle <= 70.0f && angle >= -70.0f)
{
// ray cast
RaycastHit hit;
Vector3 temp = obj01.transform.position – this.transform.position;
Vector3 normal = temp.normalized;
if (Physics.Raycast(this.transform.position, normal, out hit, 50))
{
if (hit.transform.gameObject == obj01)
{
// 対象のオブジェクトが視界に入った時の処理
}
else
{
// 対象のオブジェクトが視界にキャラクターとオブジェクトの間に障害物がある時の処理
}
}
}
else
{
// 対象のオブジェクトが視界に入っていない時の処理
}
}
上記のコードをゾンビ側のセットします。
「(angle <= 70.0f && angle >= -70.0f)」をゾンビが見ることのできる視界の範囲とします。
この範囲に対象となるオブジェクトが入るとraycastを飛ばします。
しかし、ゾンビとオブジェクトの間に障害物があると、処理を分けます。
これで、視界の範囲に入って、尚且つ間に障害物が無い時だけ、処理を走らせることができます。
サンプルをちょっとWebGLでビルドしてみました(・。・;
対象のオブジェクトが視界に入った時だけ色を変えてみる
サンプルでは、画面中央にあるしょうもないオブジェクトがゾンビになります。
その周りを仮想プレイヤーになるしょうもないオブジェクトが周回します。
ゾンビの見える範囲にプレイヤーが入り尚且つ障害物が間に無ければ、ゾンビの色が変わる処理を入れています。