プレイヤー攻撃
メニューを表示するにはスワイプしてください
ギズモ
private void OnDrawGizmos()
{
Gizmos.DrawLine(transform.position, ((Vector2)transform.position + 4f * Vector2.right * localScale.x));
}
private void OnDrawGizmos(): OnDrawGizmosコールバックのメソッド宣言。Unityがシーンビューでギズモを描画する際に自動的に呼び出される;Gizmos.DrawLine(...): ギズモを使って線を描画するコード。2つの点を引数として線を定義する;transform.position: このスクリプトがアタッチされているGameObjectの現在位置;((Vector2)transform.position + 4f * Vector2.right * localScale.x): 線の2点目を計算。GameObjectの現在位置(transform.position)に、右方向へ4単位分のベクトル(4f * Vector2.right)を加算する。localScale.xでGameObjectのx軸方向のスケールに応じて線の長さと方向を調整する。
このコードは、シーンビューでGameObjectの現在位置から右方向に4単位分、x軸方向におけるGameObjectのスケールに基づいて長さと方向を調整した点まで線を描画します。プレイヤーの各攻撃範囲を可視化するために使用します。
攻撃スクリプト
bool isAttacking;
float range;
[SerializeField] LayerMask enemyLayer;
private void Start()
{
isAttacking = false;
range = 0f;
}
public void StartAttacking(float attackRange)
{
isAttacking = true;
range = attackRange;
}
public void EndAttacking()
{
isAttacking = false;
range = 0f;
}
private void Update()
{
if (isAttacking)
{
RaycastHit2D rayCastHit = Physics2D.Raycast(transform.position, Vector2.right * transform.localScale.x, range, enemyLayer);
if (rayCastHit)
{
Debug.Log(rayCastHit.transform.name);
isAttacking = false;
}
}
}
攻撃を開始する際は、StartAttacking 関数を呼び出します。この関数は攻撃の射程をパラメータとして受け取ります。各攻撃ごとに射程が異なるため、攻撃を開始し、射程を適切に設定します。
Update 関数内では、プレイヤーが攻撃中の場合、プレイヤーの位置からプレイヤーが向いている方向に向かって、攻撃の射程分だけRayCastを作成し、enemyLayer のみをフィルタリングします。
敵にヒットした場合、現時点ではその名前をデバッグ出力しますが、将来的には敵の体力を取得して攻撃を行います。
また、攻撃を終了するための EndAttacking 関数があります。
アニメーションイベント
イベントの追加
Unityのアニメーションウィンドウでは、特定のフレームにアニメーションクリップへイベントを追加できます。 アニメーションカーブやキーフレームを右クリックしてアニメーションイベントを追加し、関数やオプションのパラメータを指定します。
関数の定義
アニメーションイベントから呼び出される関数はpublicである必要があります。 Unityのアニメーションイベントシステムは、オプションのfloat型およびstring型パラメータをサポートしており、アニメーション再生中に指定された関数を自動的に呼び出して、アニメーションとゲームプレイロジックの同期やさまざまなアクションのトリガーを実現します。
フィードバックありがとうございます!
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください