キャラの手に武器を持つことは出来ましたが、このままでは、この武器のゲームオブジェクトとキャラのゲームオブジェクトにはつながりはありません。
そのため、武器にも専用のクラスを用意し、キャラクターのクラス(PlayerController)を扱えるようにしておきましょう。
現在、攻撃の処理はキャラクターが扱いますので、それらに合わせて武器も一緒に処理が行えるようにするためです。
今後、攻撃力の値をキャラクターのクラスに持たせることも考えています。
それから、構えている武器はコライダーがオンの状態です。つまり、敵と当たってしまいます。
ですが、構えているだけの武器が常に敵に当たってしまってはゲームとしては問題ですね。
キャラが攻撃を行ったタイミングでコライダーをオンにするようにし、攻撃アニメーションの間だけ、敵に対して当たり判定を取るようにした方が自然です。
それらを踏まえて新しいスクリプトを考え、プログラムを組み込んでみましょう。
<= +ボタンを押すと開きますので、自分なりの実装を行った上で確認をしてみましょう。
using System.Collections;
using UnityEngine;
public class WeaponController : MonoBehaviour {
public CapsuleCollider capsuleCollider;
public PlayerController playerController;
public float attackAnimeTime;
void Start () {
// 構えている武器も当たり判定をしてしまうため、攻撃するまでは武器と敵とが当たらないようにColliderをオフにする
capsuleCollider.enabled = false;
}
/// <summary>
/// 武器のColliderのオン/オフ切り替え
/// </summary>
public void ActivateWeaponCollider(bool isSwitch) {
capsuleCollider.enabled = isSwitch;
StartCoroutine(AttackTime());
}
/// <summary>
/// 攻撃のアニメーションの時間に合わせてCollierを有効化
/// </summary>
/// <returns></returns>
private IEnumerator AttackTime() {
yield return new WaitForSeconds(attackAnimeTime);
ActivateWeaponCollider(false);
}
}
作成したスクリプトは、忘れずに武器のゲームオブジェクトにアタッチし、必要なクラスやコンポーネントをアサインしておきましょう。