Playerを数秒間、スタン状態にする(アニメーション)








スタンアニメーション
using UnityEngine;
using Photon.Pun;
public class PlayerController : MonoBehaviourPunCallbacks
{
private CharacterController controller;
private Vector3 moveDir = Vector3.zero;
private float gravity = 20f;
private float verticalVelocity;
public float speed;
public float jumpPower;
private Animator animator;
public bool canMove { get; set; }
private bool isStunned = false;
void Start()
{
controller = GetComponent<CharacterController>();
animator = GetComponent<Animator>();
canMove = false;
}
void Update()
{
if (!photonView.IsMine)
{
return;
}
if (canMove == false)
{
return;
}
if (isStunned == true)
{
return;
}
if (controller.isGrounded)
{
verticalVelocity = -0.5f;
if (InputManager.isa.Player.Jump.triggered)
{
verticalVelocity = jumpPower;
animator.SetTrigger("Jump");
}
}
else
{
verticalVelocity -= gravity * Time.deltaTime;
}
Vector2 movement2 = InputManager.isa.Player.Move.ReadValue<Vector2>();
Vector3 movementV = new Vector3(0, 0, movement2.y).normalized;
Vector3 movementH = new Vector3(movement2.x, 0, 0).normalized;
Vector3 forward = Camera.main.transform.forward;
forward.y = 0;
Vector3 right = Camera.main.transform.right;
moveDir = forward * movementV.z + right * movementH.x;
if (moveDir.magnitude >= 0.1f)
{
transform.rotation = Quaternion.LookRotation(moveDir);
}
animator.SetFloat("Move", moveDir.magnitude);
Vector3 finalMove = moveDir * speed;
finalMove.y = verticalVelocity;
if (controller.enabled)
{
controller.Move(finalMove * Time.deltaTime);
}
}
void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Explosion") && photonView.IsMine)
{
isStunned = true;
animator.SetFloat("Move", 0);
Invoke(nameof(MoveReset), 5);
// ★追加
// スタンアニメーションをオンにする
animator.SetBool("Stunned", true);
}
}
void MoveReset()
{
isStunned = false;
// ★追加
// スタンアニメーションをオフにする
animator.SetBool("Stunned", false);
}
}

【Unity6版】BattleOnline(全38回)
他のコースを見る







スタンアニメーション
using UnityEngine;
using Photon.Pun;
public class PlayerController : MonoBehaviourPunCallbacks
{
private CharacterController controller;
private Vector3 moveDir = Vector3.zero;
private float gravity = 20f;
private float verticalVelocity;
public float speed;
public float jumpPower;
private Animator animator;
public bool canMove { get; set; }
private bool isStunned = false;
void Start()
{
controller = GetComponent<CharacterController>();
animator = GetComponent<Animator>();
canMove = false;
}
void Update()
{
if (!photonView.IsMine)
{
return;
}
if (canMove == false)
{
return;
}
if (isStunned == true)
{
return;
}
if (controller.isGrounded)
{
verticalVelocity = -0.5f;
if (InputManager.isa.Player.Jump.triggered)
{
verticalVelocity = jumpPower;
animator.SetTrigger("Jump");
}
}
else
{
verticalVelocity -= gravity * Time.deltaTime;
}
Vector2 movement2 = InputManager.isa.Player.Move.ReadValue<Vector2>();
Vector3 movementV = new Vector3(0, 0, movement2.y).normalized;
Vector3 movementH = new Vector3(movement2.x, 0, 0).normalized;
Vector3 forward = Camera.main.transform.forward;
forward.y = 0;
Vector3 right = Camera.main.transform.right;
moveDir = forward * movementV.z + right * movementH.x;
if (moveDir.magnitude >= 0.1f)
{
transform.rotation = Quaternion.LookRotation(moveDir);
}
animator.SetFloat("Move", moveDir.magnitude);
Vector3 finalMove = moveDir * speed;
finalMove.y = verticalVelocity;
if (controller.enabled)
{
controller.Move(finalMove * Time.deltaTime);
}
}
void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Explosion") && photonView.IsMine)
{
isStunned = true;
animator.SetFloat("Move", 0);
Invoke(nameof(MoveReset), 5);
// ★追加
// スタンアニメーションをオンにする
animator.SetBool("Stunned", true);
}
}
void MoveReset()
{
isStunned = false;
// ★追加
// スタンアニメーションをオフにする
animator.SetBool("Stunned", false);
}
}

Playerを数秒間、スタン状態にする(アニメーション)