Example #1
0
    // ターゲットが一直線上にいるかどうかレイチェックでテストする
    private bool checkShouldFire(Vector3 targetPosition)
    {
        chrControllerEnemyDemon ctrl = getMyController();

        targetPosition.y = ctrl.transform.position.y;

        // 発射可能なときだけ距離・角度チェック→ラインチェック
        if (ctrl.CanFire())
        {
            Vector3 localPosition = ctrl.transform.InverseTransformPoint(targetPosition);
            localPosition.y = 0.0f;
            if (localPosition.magnitude <= AIM_DISTANCE && Mathf.Abs(Vector3.Angle(Vector3.forward, localPosition)) <= AIM_ANGLE)
            {
                // ラインチェック
                RaycastHit hit;
                // FIXME エネミーもチェックして、できるだけ先頭の敵だけが発射するようにする
                if (cachedLayerMask == 0)
                {
                    cachedLayerMask = 1 << LayerMask.NameToLayer("Wall") | 1 << LayerMask.NameToLayer("Player");
                }

                Vector3 rayDirection = (targetPosition - ctrl.transform.position).normalized;

                if (Physics.Raycast(ctrl.transform.position, rayDirection, out hit, Mathf.Infinity, cachedLayerMask))
                {
                    return(hit.collider.gameObject.tag == "Player");
                }
            }
        }

        return(false);
    }
Example #2
0
	private float		AIM_DISTANCE = 10.0f;			// この距離以下なら発射する.
	
	// ================================================================ //
	// このコントローラが前提とするコントローラクラスへの参照を返す
	private chrControllerEnemyDemon getMyController()
	{
		if (myController == null) {
			myController = this.control as chrControllerEnemyDemon;
		}
		return myController;
	}
Example #3
0
    private float AIM_DISTANCE  = 10.0f;                                // この距離以下なら発射する.

    // ================================================================ //
    // このコントローラが前提とするコントローラクラスへの参照を返す
    private chrControllerEnemyDemon getMyController()
    {
        if (myController == null)
        {
            myController = this.control as chrControllerEnemyDemon;
        }
        return(myController);
    }