| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- using Cinemachine.Utility;
- using UnityEngine;
- namespace Cinemachine.Examples
- {
- public class PlayerMoveOnSphere : MonoBehaviour
- {
- public SphereCollider Sphere;
- public float speed = 5;
- public bool rotatePlayer = true;
- public float rotationDamping = 0.5f;
- // Update is called once per frame
- void Update()
- {
- #if ENABLE_LEGACY_INPUT_MANAGER
- Vector3 input = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
- if (input.magnitude > 0)
- {
- input = Camera.main.transform.rotation * input;
- if (input.magnitude > 0.001f)
- {
- transform.position += input * (speed * Time.deltaTime);
- if (rotatePlayer)
- {
- float t = Cinemachine.Utility.Damper.Damp(1, rotationDamping, Time.deltaTime);
- Quaternion newRotation = Quaternion.LookRotation(input.normalized, transform.up);
- transform.rotation = Quaternion.Slerp(transform.rotation, newRotation, t);
- }
- }
- }
- // Stick to sphere surface
- if (Sphere != null)
- {
- var up = transform.position - Sphere.transform.position;
- up = up.normalized;
- var fwd = transform.forward.ProjectOntoPlane(up);
- transform.position = Sphere.transform.position + up * (Sphere.radius + transform.localScale.y / 2);
- transform.rotation = Quaternion.LookRotation(fwd, up);
- }
- #else
- InputSystemHelper.EnableBackendsWarningMessage();
- #endif
- }
- }
- }
|