Unity 球面行走
代码很简单没有难度,自己看一下应该就能明白。
OK 老规矩,直接上代码:
引用视频链接: 球面行走.
球面行走
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 玩家操作
/// </summary>
public class Player_ZH : MonoBehaviour
{
//移动速度
public float _MovaSpeed = 5.0f;
//转动速度
public float _RotateSpeed = 150.0f;
float _Gravity = -100.0f;
Rigidbody _RigidbodyPlayer;
Vector3 _MoveAmount;
void Start()
{
_RigidbodyPlayer = GetComponent<Rigidbody>();
//旋转锁定
_RigidbodyPlayer.freezeRotation = true;
}
void Update()
{
//前后移动
float _VMove = Input.GetAxis("Vertical");
_MoveAmount = new Vector3(0, 0, _VMove) * _MovaSpeed * Time.deltaTime;
//旋转
float _HRotation = Input.GetAxis("Horizontal");
transform.Rotate(0, _HRotation * _RotateSpeed * Time.deltaTime, 0);
}
private void FixedUpdate()
{
//刚体移动
_RigidbodyPlayer.MovePosition(_RigidbodyPlayer.position + transform.TransformDirection(_MoveAmount));
//本身方向
Vector3 _localUp = transform.up;
//重力方向
//Vector3 _TragetDir = (transform.position - _Planet.transform.position).normalized;
Vector3 _GravityDir = (transform.position).normalized;
//计算当前方向到目标方向的旋转值
//当前旋转值等于 当前方向到目标方向的旋转值 加上当前旋转值
transform.rotation = Quaternion.FromToRotation(_localUp, _GravityDir) * transform.rotation;
//重力赋予
_RigidbodyPlayer.AddForce(_Gravity * _GravityDir);
}
}
最终效果:
暂时先这样吧,如果有时间的话就会更新,如果实在看不明白就留言,看到我会回复的。
路长远兮,与君共勉。