Unity の Project TCC を触って、Unity の機能を学んでいきましょう。
Project TCC で遊ぼう~UC-03-02 Rolling: キャラクターにローリング回避を実装します~
UC-03-02 Rolling
変更点の確認
UC-03-02_Rolling(TPS) シーンを開きます。
Unityエディター上で再生して、ユニティちゃんを動かしてみましょう。
UC-02-03_Cinemachine_TPS_Control シーンと違うところは、Player オブジェクトの Script Machine に Evasion の処理が追加されています。
マウスのホイールボタンをクリックすると回避します。
シーンの複製
UC-02-03_Cinemachine_TPS_Control シーンを複製して、UC-03-02_Rolling(TPS)_Copy という名前にします。
Input Action Asset の設定
Assets/TCC/Scenes/02_Camera/Data_UC-02-03_TPS_Control フォルダを複製して、Assets/TCC/Scenes/03_Action/Data_UC-03-02_Rolling(TPS)_Copy という名前にします。
フォルダ内のファイルも UC-03-02_Rolling_Copy という名前にします。
Input Action Asset(UC-03-02_Rolling_Copy)を選択して、インスペクターの Edit asset ボタンを押します。
Actions に Rolling を追加します。
Rolling にマウスの Middle Button を割り当てます。
Player オブジェクトの PlayerInput コンポーネントの Actions に UC-03-02_Rolling_Copy を設定します。
Animator コンポーネントの設定
Player オブジェクトの Animator コンポーネントの Controller に Assets/TCC/Scenes/03_Action/Data_UC-03-02_Rolling(TPS)/UC-03-02_Rolling を設定します。
ExtraForce コンポーネントの追加
Player オブジェクトに ExtraForce コンポーネントを追加します。
MyPlayer_03_02 スクリプトの作成
Assets/TCC/Scenes/03_Action/Data_UC-03-02_Rolling(TPS)_Copy/MyPlayer_03_02 スクリプトを新規作成します。
Player オブジェクトに MyPlayer_03_02 スクリプトを追加します。
MyPlayer_03_02 スクリプトの内容はこちらになります。
using System.Security.Cryptography;
using Unity.TinyCharacterController.Check;
using Unity.TinyCharacterController.Control;
using Unity.TinyCharacterController.Effect;
using UnityEngine;
using UnityEngine.InputSystem;
public class MyPlayer_03_02 : MonoBehaviour {
private PlayerInput m_rPlayerInput;
private InputAction m_rRolling;
private GroundCheck m_rGroundCheck;
private Animator m_rAnimator;
private MoveControl m_rMoveControl;
private ExtraForce m_rExtraForce;
private float m_fCooldownDuration = 0.6f;
private float m_fCooldownTime = 0f;
private void Awake() {
TryGetComponent<PlayerInput>(out m_rPlayerInput);
if (m_rPlayerInput != null) {
m_rRolling = m_rPlayerInput.actions["Rolling"];
}
TryGetComponent<GroundCheck>(out m_rGroundCheck);
TryGetComponent<Animator>(out m_rAnimator);
TryGetComponent<MoveControl>(out m_rMoveControl);
TryGetComponent<ExtraForce>(out m_rExtraForce);
}
private void OnEnable() {
if (m_rRolling != null) {
m_rRolling.started += OnRolling;
}
}
private void OnDisable() {
if (m_rRolling != null) {
m_rRolling.started -= OnRolling;
}
}
private void Update() {
// Cooldown.
if (m_fCooldownTime > 0f) {
m_fCooldownTime -= Time.deltaTime;
if (m_fCooldownTime < 0f) {
m_fCooldownTime = 0f;
}
}
}
private void OnRolling(InputAction.CallbackContext context) {
if (m_rRolling == null) {
return;
}
if (m_rGroundCheck == null) {
return;
}
if (!m_rGroundCheck.IsOnGround) {
return;
}
// Cooldown.
if (m_fCooldownTime > 0f) {
return;
}
m_fCooldownTime = m_fCooldownDuration;
Vector3 vecForward = transform.forward;
if (m_rAnimator != null) {
if (m_rAnimator.GetFloat("Speed") > 0.05f) {
if (m_rMoveControl != null) {
vecForward = m_rMoveControl.Direction;
}
}
}
if (m_rExtraForce != null) {
Vector3 vecForce = vecForward * 20f;
m_rExtraForce.AddForce(vecForce);
}
if (m_rAnimator != null) {
m_rAnimator.Play("Rolling");
}
}
}
動作確認
Unityエディターで再生して、動作確認します。
マウスのホイールボタンをクリックすると回避すれば成功です。
まとめ
Project TCC のキャラクターを回避させるサンプルを Visual Scripting から C# スクリプトに変換して動かしてみました。
ExtraForce コンポーネントを使って回避させることが出来ます。
コメント