我正在一个装有非凸面网格对撞机的空心球体内部移动玩家。 玩家意味着沿着船体的内表面走向船体(远离中心)。对于引力,我附加了{{3的修改版本播放器的脚本:
using UnityEngine;
using System.Collections;
public class Gravity : MonoBehaviour
{
//credit some: podperson
public Transform planet;
public bool AlignToPlanet;
public float gravityConstant = -9.8f;
void Start()
{
}
void FixedUpdate()
{
Vector3 toCenter = planet.position - transform.position;
toCenter.Normalize();
GetComponent<Rigidbody>().AddForce(toCenter * gravityConstant, ForceMode.Acceleration);
if (AlignToPlanet)
{
Quaternion q = Quaternion.FromToRotation(-transform.up, -toCenter);
q = q * transform.rotation;
transform.rotation = Quaternion.Slerp(transform.rotation, q, 1);
}
}
}
Unity的默认移动控制器似乎不适用于这个Gravity脚本,因此我制作了一个简单的(仅向前/向后移动):
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityStandardAssets.CrossPlatformInput;
public class NewController : MonoBehaviour {
// Use this for initialization
void Start ()
{
}
// Update is called once per frame
void Update ()
{
}
private void FixedUpdate()
{
GetComponent<Rigidbody>().AddForce(transform.forward * CrossPlatformInputManager.GetAxis("Vertical"), ForceMode.Impulse);
}
}
它的作用是我能够在球体内部走动。但是它非常颠簸,可能是因为前向力会导致玩家不断地进入球体多边形的角落/边缘,并且因为重力脚本中的“AlignToPlanet”四元数不能足够快地校正这些不协调。
总结一下,我需要一种沿着球体内部平滑移动的方法。我不确定是否需要在Unity Editor中使用代码或值来解决这个问题(关于拖动等)。