今回の記事では前回作成した中立キャラクターの機能追加を行います。
前回の記事:
増殖型鬼ごっこRUNゲームの作り方3 自動追尾するキャラを作ろう
前回はプレイヤーキャラクターの作成などを行いました。 前回の記事: 今回の記事ではプレイヤーに自動追尾するキャラクターを作成していきます。 また、作成したプレハブをマップに配置するスクリプトも作成します。 追従するキャラクターのコンポーネン...
プレイヤーが中立キャラクターに近づくとそのキャラクターがプレイヤーに付いてくるようにしていきます。
所属している集団を見分けるための処理を追加
それではまず、先に追従しているターゲットを見分けるための処理を追加します。
「CharacterBase」コンポーネントを次のように修正して下さい。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
// CharacterBase.cs 所属している集団の色を設定できるようにする //次のものを修正 protected virtual void Awake() { ChangeTeamColor(_teamColor); } //次のものを追加 [SerializeField] int _memberCount = 0; public int MemberCount { get => _memberCount; set => _memberCount = value; } public bool IsJoinableCharacter = false; [SerializeField] Color _teamColor = Color.red; public Color TeamColor { get => _teamColor; } protected void ChangeTeamColor(Color color) { _teamColor = color; var model = transform.Find("Model"); if (model != null) { var renderer = model.GetComponent<Renderer>(); renderer.material.color = _teamColor; } } protected virtual void OnTriggerEnter(Collider other) { var character = other.gameObject.GetComponent<CharacterBase>(); if (character != null && character.IsJoinableCharacter) { if (!(this is JoinableCharacter)) { var joinableChar = character as JoinableCharacter; if (joinableChar.FollowedTarget != null) joinableChar.FollowedTarget.MemberCount--; joinableChar.FollowedTarget = this; MemberCount++; } } } |
この講座では単純に色で見分けるようにしています。
「JoinableCharacter」コンポーネントでは「_teamColor」フィールドと「FollowTarget」フィールドで所属している集団を反映するようにしています。
また「CharacterBase」コンポーネントを修正しましたので、シーンの「Player」および「JoinableCharacter」プレハブの設定も変更して下さい。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
// キャラクター関係の設定変更 ## Player : シーンのもの - Playerコンポーネント IsJoinableCharacter : false TeamColor : 青 - SphereColliderコンポーネント <- 追加 IsTrigger : true Center : 0, 0.5, 0 Radius: 1.5 ## JoinableCharacterプレハブ : - JoinableCharacterコンポーネント IsJoinableCharacter : true TeamColor : 緑 - SphereColliderコンポーネント <- 追加 IsTrigger : true Center : 0, 0.5, 0 Radius: 1.5 |
追従している時の処理を作成
次は「JoinableCharacter」コンポーネントに追従している時の処理を作成します。
単純に追従しているキャラクターの方に移動する処理を実装しているだけになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
// JoinableCharacter.cs 追従している時の処理を追加 //次のものを修正 public CharacterBase FollowedTarget { get => _followedTarget; set { if (_followedTarget == value) return; _followedTarget = value; if(value == null) { StartFree(); } else { ChangeTeamColor(_followedTarget.TeamColor); StartJoined(); } } } IEnumerator JoinedCoroutine() { while (true) { var vec = (FollowedTarget.transform.position - transform.position); vec.y = 0; Move(vec.normalized * SpeedPerSeconds); yield return null; } } |
ここまでできましたら、再生してみて動作を確認して下さい。
プレイヤーが追従するキャラクターに近づいたらそのキャラクターがついてくるようになればOKです。
まとめ
今回の記事ではプレイヤーが中立キャラクターに近づくとそのキャラクターが追従するようにしました。
シンプルな処理なので、プレイヤーが止まると追従しているキャラクターに押されてすごいことになりますが、その辺りの対処法は今回は割愛します。取り組みたい人はチャレンジしてみてください。
まとめると以下のようになります。
- 「CharacterBase」コンポーネントに所属しているチームの色を設定できるようにした
- 「Player」コンポーネントに追従できるキャラクターと当たった時の処理を追加
- シーンの「Player」と「JoinableCharacter」に追従判定用のColliderおよび設定を追加
それでは次の記事に行ってみましょう!
増殖型鬼ごっこRUNゲームの作り方5 敵キャラクタと敵移動AIの作成
前回記事までで近づくと自動追尾してくるキャラクターを完成させました。 前回の記事: 今回の記事では敵キャラクターを作成します。 簡単なAIを組んで敵がマップ内を移動するようにしていきます。 敵の行動パターンを表現するスクリプトの作成 新しく...
コメント