在球体内平滑行走

时间:2017-03-22 16:42:15

标签: unity3d

我正在一个装有非凸面网格对撞机的空心球体内部移动玩家。 玩家意味着沿着船体的内表面走向船体(远离中心)。对于引力,我附加了{{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中使用代码或值来解决这个问题(关于拖动等)。

0 个答案:

没有答案