case1
This commit is contained in:
@@ -0,0 +1,120 @@
|
||||
using System;
|
||||
using Cinemachine.Utility;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Cinemachine.Examples
|
||||
{
|
||||
public class PlayerMove : MonoBehaviour
|
||||
{
|
||||
public float Speed;
|
||||
public float VelocityDamping;
|
||||
public float JumpTime;
|
||||
|
||||
public enum ForwardMode
|
||||
{
|
||||
Camera,
|
||||
Player,
|
||||
World
|
||||
};
|
||||
|
||||
public ForwardMode InputForward;
|
||||
|
||||
public bool RotatePlayer = true;
|
||||
|
||||
public Action SpaceAction;
|
||||
public Action EnterAction;
|
||||
|
||||
Vector3 m_currentVleocity;
|
||||
float m_currentJumpSpeed;
|
||||
float m_restY;
|
||||
|
||||
private void Reset()
|
||||
{
|
||||
Speed = 5;
|
||||
InputForward = ForwardMode.Camera;
|
||||
RotatePlayer = true;
|
||||
VelocityDamping = 0.5f;
|
||||
m_currentVleocity = Vector3.zero;
|
||||
JumpTime = 1;
|
||||
m_currentJumpSpeed = 0;
|
||||
}
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
m_currentJumpSpeed = 0;
|
||||
m_restY = transform.position.y;
|
||||
SpaceAction -= Jump;
|
||||
SpaceAction += Jump;
|
||||
}
|
||||
|
||||
void Update()
|
||||
{
|
||||
#if ENABLE_LEGACY_INPUT_MANAGER
|
||||
Vector3 fwd;
|
||||
switch (InputForward)
|
||||
{
|
||||
case ForwardMode.Camera:
|
||||
fwd = Camera.main.transform.forward;
|
||||
break;
|
||||
case ForwardMode.Player:
|
||||
fwd = transform.forward;
|
||||
break;
|
||||
case ForwardMode.World:
|
||||
default:
|
||||
fwd = Vector3.forward;
|
||||
break;
|
||||
}
|
||||
|
||||
fwd.y = 0;
|
||||
fwd = fwd.normalized;
|
||||
if (fwd.sqrMagnitude < 0.01f)
|
||||
return;
|
||||
|
||||
Quaternion inputFrame = Quaternion.LookRotation(fwd, Vector3.up);
|
||||
Vector3 input = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
|
||||
input = inputFrame * input;
|
||||
|
||||
var dt = Time.deltaTime;
|
||||
var desiredVelocity = input * Speed;
|
||||
var deltaVel = desiredVelocity - m_currentVleocity;
|
||||
m_currentVleocity += Damper.Damp(deltaVel, VelocityDamping, dt);
|
||||
|
||||
transform.position += m_currentVleocity * dt;
|
||||
if (RotatePlayer && m_currentVleocity.sqrMagnitude > 0.01f)
|
||||
{
|
||||
var qA = transform.rotation;
|
||||
var qB = Quaternion.LookRotation(
|
||||
(InputForward == ForwardMode.Player && Vector3.Dot(fwd, m_currentVleocity) < 0)
|
||||
? -m_currentVleocity
|
||||
: m_currentVleocity);
|
||||
transform.rotation = Quaternion.Slerp(qA, qB, Damper.Damp(1, VelocityDamping, dt));
|
||||
}
|
||||
|
||||
// Process jump
|
||||
if (m_currentJumpSpeed != 0)
|
||||
m_currentJumpSpeed -= 10 * dt;
|
||||
var p = transform.position;
|
||||
p.y += m_currentJumpSpeed * dt;
|
||||
if (p.y < m_restY)
|
||||
{
|
||||
p.y = m_restY;
|
||||
m_currentJumpSpeed = 0;
|
||||
}
|
||||
|
||||
transform.position = p;
|
||||
|
||||
if (Input.GetKeyDown(KeyCode.Space) && SpaceAction != null)
|
||||
SpaceAction();
|
||||
if (Input.GetKeyDown(KeyCode.Return) && EnterAction != null)
|
||||
EnterAction();
|
||||
#else
|
||||
InputSystemHelper.EnableBackendsWarningMessage();
|
||||
#endif
|
||||
}
|
||||
|
||||
public void Jump()
|
||||
{
|
||||
m_currentJumpSpeed += 10 * JumpTime * 0.5f;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user