Я полагаю нужно повернуть персонажа на 45 градусов. Но как это сделать?!
Скрипт для передвижения
Синтаксис:
Используется csharp
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Movement : MonoBehaviour {
public Animator anim;
public CharacterStatus characterStatus;
public Transform cameraTransform;
public float rotationSpeed;
float vertical;
float horizontal;
float moveAmount;
Vector3 rotationDirection;
Vector3 moveDirection;
private void Update()
{
vertical = Input.GetAxis("Vertical");
horizontal = Input.GetAxis("Horizontal");
moveAmount = Mathf.Clamp01(Mathf.Abs(vertical) + Mathf.Abs(horizontal));
anim.SetFloat("vertical", moveAmount, 0.15f, Time.deltaTime);
Vector3 moveDir = cameraTransform.forward * vertical;
moveDir += cameraTransform.right * horizontal;
moveDir.Normalize();
moveDirection = moveDir;
rotationDirection = cameraTransform.forward;
RotationNormal();
characterStatus.isGround = Ground();
}
public void RotationNormal()
{
if(!characterStatus.isAiming)
{
rotationDirection = moveDirection;
}
Vector3 targetDir = rotationDirection;
targetDir.y = 0;
if (targetDir == Vector3.zero)
targetDir = transform.forward;
Quaternion lookDir = Quaternion.LookRotation(targetDir);
Quaternion targetRot = Quaternion.Slerp(transform.rotation, lookDir, rotationSpeed);
transform.rotation = targetRot;
}
public bool Ground()
{
Vector3 origin = transform.position;
origin.y += 0.6f;
Vector3 direction = -Vector3.up;
float rayDistance = 0.7f;
RaycastHit hit;
if(Physics.Raycast(origin, direction, out hit, rayDistance))
{
return true;
}
return false;
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Movement : MonoBehaviour {
public Animator anim;
public CharacterStatus characterStatus;
public Transform cameraTransform;
public float rotationSpeed;
float vertical;
float horizontal;
float moveAmount;
Vector3 rotationDirection;
Vector3 moveDirection;
private void Update()
{
vertical = Input.GetAxis("Vertical");
horizontal = Input.GetAxis("Horizontal");
moveAmount = Mathf.Clamp01(Mathf.Abs(vertical) + Mathf.Abs(horizontal));
anim.SetFloat("vertical", moveAmount, 0.15f, Time.deltaTime);
Vector3 moveDir = cameraTransform.forward * vertical;
moveDir += cameraTransform.right * horizontal;
moveDir.Normalize();
moveDirection = moveDir;
rotationDirection = cameraTransform.forward;
RotationNormal();
characterStatus.isGround = Ground();
}
public void RotationNormal()
{
if(!characterStatus.isAiming)
{
rotationDirection = moveDirection;
}
Vector3 targetDir = rotationDirection;
targetDir.y = 0;
if (targetDir == Vector3.zero)
targetDir = transform.forward;
Quaternion lookDir = Quaternion.LookRotation(targetDir);
Quaternion targetRot = Quaternion.Slerp(transform.rotation, lookDir, rotationSpeed);
transform.rotation = targetRot;
}
public bool Ground()
{
Vector3 origin = transform.position;
origin.y += 0.6f;
Vector3 direction = -Vector3.up;
float rayDistance = 0.7f;
RaycastHit hit;
if(Physics.Raycast(origin, direction, out hit, rayDistance))
{
return true;
}
return false;
}
}
На всякий случай, полный проект https://yadi.sk/d/QaG5gBvkSBVGJA