プレイヤー
- Transform
- Player Controller(スクリプト)
・Min Ground Normal Y
・重力モディファイア
・速度
・Jump Audio
・Respawn Audio
・Ouch Audio
・Max Speed
・Jump Take Off Speed
・Jump State
・Collider 2D
・オーディオソース
・Health
・Control Enabledusing System.Collections; using System.Collections.Generic; using UnityEngine; using Platformer.Gameplay; using static Platformer.Core.Simulation; using Platformer.Model; using Platformer.Core;
namespace Platformer.Mechanics { /// This is the main class used to implement control of the player. /// It is a superset of the AnimationController class, but is inlined to allow for any kind of customisation. //これは、プレイヤーの制御を実装するために使用されるメインクラスです。 //AnimationControllerクラスの上位セットですが、インライン化されているため、任意のカスタマイズが可能です。public class PlayerController : KinematicObject { public AudioClip jumpAudio; public AudioClip respawnAudio; public AudioClip ouchAudio;/// Max horizontal speed of the player. //プレイヤーの水平方向の最大速度 public float maxSpeed = 7; /// Initial jump velocity at the start of a jump. //ジャンプ開始時の初期ジャンプ速度 public float jumpTakeOffSpeed = 7;public JumpState jumpState = JumpState.Grounded; private bool stopJump; /*internal new*/ public Collider2D collider2d; /*internal new*/ public AudioSource audioSource; public Health health; public bool controlEnabled = true;bool jump; Vector2 move; SpriteRenderer spriteRenderer; internal Animator animator; readonly PlatformerModel model = Simulation.GetModel<PlatformerModel>();public Bounds Bounds => collider2d.bounds;
void Awake() { health = GetComponent<Health>(); audioSource = GetComponent<AudioSource>(); collider2d = GetComponent<Collider2D>(); spriteRenderer = GetComponent<SpriteRenderer>(); animator = GetComponent<Animator>(); }protected override void Update() { if (controlEnabled) { move.x = Input.GetAxis("Horizontal"); if (jumpState == JumpState.Grounded && Input.GetButtonDown("Jump")) jumpState = JumpState.PrepareToJump; else if (Input.GetButtonUp("Jump")) { stopJump = true; Schedule<PlayerStopJump>().player = this; } } else { move.x = 0; } UpdateJumpState(); base.Update(); }void UpdateJumpState() { jump = false; switch (jumpState) { case JumpState.PrepareToJump: jumpState = JumpState.Jumping; jump = true; stopJump = false; break; case JumpState.Jumping: if (!IsGrounded) { Schedule<PlayerJumped>().player = this; jumpState = JumpState.InFlight; } break; case JumpState.InFlight: if (IsGrounded) { Schedule<PlayerLanded>().player = this; jumpState = JumpState.Landed; } break; case JumpState.Landed: jumpState = JumpState.Grounded; break; } }protected override void ComputeVelocity() { if (jump && IsGrounded) { velocity.y = jumpTakeOffSpeed * model.jumpModifier; jump = false; } else if (stopJump) { stopJump = false; if (velocity.y > 0) { velocity.y = velocity.y * model.jumpDeceleration; } }if (move.x > 0.01f) spriteRenderer.flipX = false; else if (move.x < -0.01f) spriteRenderer.flipX = true;animator.SetBool("grounded", IsGrounded); animator.SetFloat("velocityX", Mathf.Abs(velocity.x) / maxSpeed);targetVelocity = move * maxSpeed; }public enum JumpState { Grounded, PrepareToJump, Jumping, InFlight, Landed } }このコードは、プレイヤーキャラクターの制御を行うためのスクリプトです。以下はコードの概要と説明です。
・jumpAudio、respawnAudio、ouchAudio は、ジャンプ、復活、ダメージを受けたときのサウンドクリップを指定します。
・maxSpeed はプレイヤーの最大移動速度を表します。
・jumpTakeOffSpeed はジャンプ時の上方向への速度を表します。
・jumpState はプレイヤーのジャンプ状態を表す列挙型です。
・stopJump はジャンプを停止するかどうかを示すフラグです。
・collider2d はプレイヤーのコライダーを参照します。
・audioSource はプレイヤーのオーディオソースを参照します。
・health はプレイヤーの体力を管理するための Health コンポーネントを参照します。
・controlEnabled はプレイヤーの操作が有効かどうかを示すフラグです。
・jump はジャンプが発生したかどうかを示すフラグです。
・move はプレイヤーの移動方向を表すベクトルです。
・spriteRenderer はプレイヤーのスプライトレンダラーを参照します。
・animator はプレイヤーのアニメーターを参照します。
・model はプラットフォーマーモデルを取得するためのヘルパー変数です。
・Awake メソッドでは、必要なコンポーネントへの参照を取得します。Update メソッドでは、操作が有効な場合に入力を受け取り、移動やジャンプの状態を更新します。
UpdateJumpState メソッドでは、ジャンプの状態を更新します。ジャンプが発生した場合には jumpState を適切な状態に変更します。
ComputeVelocity メソッドでは、プレイヤーの速度や移動方向、アニメーションの設定などを計算します。
JumpState 列挙型は、プレイヤーのジャンプ状態を表します。Grounded(接地中)、PrepareToJump(ジャンプ準備中)、Jumping(ジャンプ中)、InFlight(空中にいる)、Landed(着地した)の状態があります。
このスクリプトを使用することで、プレイヤーキャラクターを操作し、ジャンプや移動などのアクションを制御することができます。
プレイヤーキャラクターは KinematicObject クラスを継承しており、物理エンジンによる衝突判定や移動計算などが自動的に行われます。
以下の点に注意して使用することができます:
maxSpeed と jumpTakeOffSpeed の値を調整することで、プレイヤーの移動速度やジャンプの高さを調節することができます。
jumpAudio、respawnAudio、ouchAudio には対応するオーディオクリップを割り当てることで、ジャンプやダメージ受けたときの音を再生することができます。
controlEnabled フラグを使用して、プレイヤーの操作を一時的に無効にすることができます。例えば、ダメージを受けた時やイベントが発生したときに一時的に操作を制限することができます。
このスクリプトを適用したプレイヤーキャラクターは、入力に応じて移動し、ジャンプすることができます。また、アニメーションやサウンドエフェクトも自動的に制御されます。プレイヤーキャラクターに関連する他のコンポーネントやシステムと連携させることで、ゲーム内でのプレイヤーアクションやイベントの処理を実装することができます。
- SpriteRenderer
- Animator
- Rigidbody2D
- AudioSource
- Health(スクリプト)
・Max HPusing System; using Platformer.Gameplay; using UnityEngine; using static Platformer.Core.Simulation;
namespace Platformer.Mechanics { /// Represebts the current vital statistics of some game entity. //ゲームエンティティの現在の重要な統計情報を表します。 public class Health : MonoBehaviour { /// The maximum hit points for the entity. //エンティティの最大ヒットポイント。 public int maxHP = 1;/// Indicates if the entity should be considered 'alive'. //エンティティが「生存」と見なされるかどうかを示します。 public bool IsAlive => currentHP > 0;int currentHP;
/// Increment the HP of the entity. //エンティティのHPを増やします。 public void Increment() { currentHP = Mathf.Clamp(currentHP + 1, 0, maxHP); }/// Decrement the HP of the entity. Will trigger a HealthIsZero event when /// current HP reaches 0. //エンティティのHPを減らします。現在のHPが0になると、HealthIsZeroイベントがトリガーされます。 //エンティティのHPを0になるまで減らします。 public void Decrement() { currentHP = Mathf.Clamp(currentHP - 1, 0, maxHP); if (currentHP == 0) { var ev = Schedule<HealthIsZero>(); ev.health = this; } }/// Decrement the HP of the entitiy until HP reaches 0. public void Die() { while (currentHP > 0) Decrement(); }void Awake() { currentHP = maxHP; } } }このコードは、プレイヤーや敵キャラクターの体力を管理するためのスクリプトです。以下はコードの概要と説明です。
・maxHP 変数は最大体力を表します。
・IsAlive プロパティは現在の体力が0より大きいかどうかを返します。体力が0以下の場合は死亡しています。
・currentHP 変数は現在の体力を保持します。
・Increment メソッドは体力を1増やします。ただし、最大体力を超えないように制限されます。
・Decrement メソッドは体力を1減らします。体力が0になった場合は HealthIsZero イベントをスケジュールします。
・Die メソッドは体力が0より大きい限り体力を減らし続けます。これにより体力を0にします。
・Awake メソッドはスクリプトがアクティブになったときに初期化処理を行います。現在の体力を最大体力に設定します。
このスクリプトは、体力の増減や死亡判定を行うための基本的な機能を提供しています。プレイヤーや敵キャラクターにアタッチして使用することができます。 - BoxCollider2D