| 12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- using System.Collections;
- using System.Collections.Generic;
- using Cinemachine.Utility;
- using UnityEngine;
- 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()
- {
- 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);
- }
- }
- }
|