我正在创造一个游戏,玩家总是上下弹跳,可以在不同的地面上有不同的高度。我已经为弹出创建了以下代码:
transform.position = new Vector3(Mathf.Lerp(transform.position.x, Towards.x, Time.deltaTime * 5), minY + Mathf.Abs(Mathf.Sin(Time.time * 3) * maxY) , transform.position.z);用"MaxY“来控制弹跳中的高度。我改变了maxY当球在地面上,所以它将有一个平稳的运动
if (Mathf.Abs(Mathf.Sin(Time.time * 3)) < 0.02f && grounded)
{
grounded = false;
maxZ = 2.5f * maxY;
}
else if (Mathf.Abs(Mathf.Sin(Time.time * 3)) > 0.02f)
{
grounded = true;
}我的问题是,当球转到更高或更低的地面时。
我用下面的代码探测地面高度:
RaycastHit hit;
if (Physics.Raycast(transform.position, -transform.up, out hit, 40, mask))
{
minY = GetComponent<SphereCollider>().radius + hit.point.y;
}然后在下一次更新中将它添加到minY中。但是问题是当minY改变的时候,玩家会突然改变它在空中的位置。
我需要一个代码,使这个变化的高度平滑,但不能想出任何想法。
发布于 2015-11-15 18:45:12
以下是我非常简单的解决方案,也许您可以尝试一下:
using UnityEngine;
using System.Collections;
public class jump : MonoBehaviour {
private float radius;
public float jumpPowa = 350;
// Use this for initialization
void Start () {
radius = GetComponent<Collider>().bounds.extents.y;
}
// Update is called once per frame
void Update () {
if (isGrounded())
{
GetComponent<Rigidbody>().AddForce(transform.up * jumpPowa);
}
}
private bool isGrounded()
{
return Physics.Raycast(transform.position, -Vector3.up, radius + 0, 1);
}
}https://stackoverflow.com/questions/33721613
复制相似问题