Unity の Project TCC を触って、Unity の機能を学んでいきましょう。
Project TCC で遊ぼう~UC-03-06 Sliding: キャラクターがスライディングできるようにします~
UC-03-06 Sliding
変更点の確認
UC-03-06_Sliding シーンを開きます。
Unityエディター上で再生して、ユニティちゃんを動かしてみましょう。
UC-02-04_Cinemachine_2D_Control シーンと違うところは、Player オブジェクトの Script Machine に Dash and Sliding が追加されています。右クリックを押しながら、ホイールボタンを押すとスライディングのアニメーションを再生します。
シーンの複製
UC-02-04_Cinemachine_2D_Control シーンを複製して、UC-03-06_Sliding_Copy という名前にします。
PlayerInput の設定
Player オブジェクトの PlayerInput コンポーネントの Actions に Assets/TCC/Scenes/03_Action/Data_UC-03-06_Sliding/UC-03-06_Sliding を設定します。
Animator の設定
Player オブジェクトの Animator コンポーネントの Controller に Assets/TCC/Scenes/03_Action/Data_UC-03-06_Sliding/UC-03-06_Sliding を設定します。
ExtraForce の追加
Player オブジェクトに ExtraForce コンポーネントを追加します。
MyPlayer_03_06 の作成
MyPlayer_03_06 スクリプトを新規作成して、Player オブジェクトに追加します。
MyPlayer_03_06 スクリプトの内容はこちらになります。
using Unity.TinyCharacterController.Check;
using Unity.TinyCharacterController.Effect;
using Unity.VisualScripting.Dependencies.Sqlite;
using UnityEngine;
using UnityEngine.InputSystem;
public class MyPlayer_03_06 : MonoBehaviour {
private PlayerInput m_rPlayerInput;
private InputAction m_rDash_Sliding;
private InputAction m_rRMB;
private Animator m_rAnimator;
private ExtraForce m_rExtraForce;
private GroundCheck m_rGroundCheck;
private float m_fCooldownDuration = 0.6f;
private float m_fCooldownTime = 0f;
private void Awake() {
TryGetComponent<PlayerInput>(out m_rPlayerInput);
if (m_rPlayerInput != null) {
m_rDash_Sliding = m_rPlayerInput.actions["Dash_Sliding"];
m_rRMB = m_rPlayerInput.actions["RMB"];
}
TryGetComponent<Animator>(out m_rAnimator);
TryGetComponent<ExtraForce>(out m_rExtraForce);
TryGetComponent<GroundCheck>(out m_rGroundCheck);
}
private void OnEnable() {
if (m_rDash_Sliding != null) {
m_rDash_Sliding.started += OnDashSliding;
m_rRMB.performed += OnRMB;
m_rRMB.canceled += OnRMBStop;
}
}
private void OnDisable() {
if (m_rDash_Sliding != null) {
m_rDash_Sliding.started -= OnDashSliding;
m_rRMB.performed -= OnRMB;
m_rRMB.canceled -= OnRMBStop;
}
}
private void Update() {
if (m_fCooldownTime > 0f) {
m_fCooldownTime -= Time.deltaTime;
if (m_fCooldownTime < 0f) {
m_fCooldownTime = 0f;
}
}
}
private void OnDashSliding(InputAction.CallbackContext context) {
if (m_rAnimator == null) {
return;
}
if (m_rAnimator.GetBool("IsCrouch")) {
return;
}
// Cooldown.
if (m_fCooldownTime > 0f) {
return;
}
m_fCooldownTime = m_fCooldownDuration;
if (m_rExtraForce != null) {
float fDashPower = 15f;
Vector3 vecForce = transform.forward * fDashPower;
m_rExtraForce.AddForce(vecForce);
}
bool bSliding = false;
if (m_rGroundCheck != null) {
if (m_rAnimator.GetBool("RMB") && m_rGroundCheck.IsOnGround) {
bSliding = true;
}
}
if (bSliding) {
m_rAnimator.Play("Slidinig");
}
else {
m_rAnimator.Play("DashStart");
}
}
private void OnRMB(InputAction.CallbackContext context) {
if (m_rAnimator != null) {
m_rAnimator.SetBool("RMB", true);
}
}
private void OnRMBStop(InputAction.CallbackContext context) {
if (m_rAnimator != null) {
m_rAnimator.SetBool("RMB", false);
}
}
}
動作確認
Unityエディターで再生して、動作確認します。
右クリックを押しながら、ホイールボタンを押すとスライディングのアニメーションを再生します。
まとめ
Project TCC のキャラクターがスライディングするサンプルを Visual Scripting から C# スクリプトに変換して動かしてみました。
天井が低い場所でも、スライディングで移動できるようになりました。
コメント