射线检测
人物移动
动画
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerAnimation : MonoBehaviour
{
private Animator animator;
private int WalkForwadID = Animator.StringToHash("Forward");
private int RunForwardID = Animator.StringToHash("RunForward");
bool isRunForward;
private int VaultID = Animator.StringToHash("IsJumpVault");
private int SlideID = Animator.StringToHash("IsSlide");
bool isSlide = false;
Vector3 matchTarget = Vector3.zero;
void Start()
{
animator = transform.GetComponent<Animator>();
}
void Update()
{
float ws = Input.GetAxis("Vertical");
animator.SetFloat(WalkForwadID, ws);
if (ws >= 0.9f)
{
isRunForward = true;
}
else
{
isRunForward = false;
}
animator.SetBool(RunForwardID, isRunForward);
bool isVault = false;
RaycastHit hit;
if (Physics.Raycast(transform.position + Vector3.up * 0.2f, transform.forward, out hit, 5f))
{
if (hit.collider.tag == "Obstacle")
{
if (hit.distance > 3)
{
Vector3 point = hit.point;
point.z = hit.collider.transform.position.z + 0.025f;
point.y = hit.collider.transform.position.y + hit.collider.bounds.size.y - 0.2f;
matchTarget = point;
isVault = true;
}
}
}
animator.MatchTarget(matchTarget, Quaternion.identity, AvatarTarget.LeftHand, new MatchTargetWeightMask(new Vector3(0, 0, 0), 0), 0.22f, 1.0f);
animator.SetBool(VaultID, isVault);
}
}```