首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >弹跳(通过代码而不是物理材料)和改变高度

弹跳(通过代码而不是物理材料)和改变高度
EN

Stack Overflow用户
提问于 2015-11-15 15:50:18
回答 1查看 503关注 0票数 1

我正在创造一个游戏,玩家总是上下弹跳,可以在不同的地面上有不同的高度。我已经为弹出创建了以下代码:

代码语言:javascript
复制
 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当球在地面上,所以它将有一个平稳的运动

代码语言:javascript
复制
        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;
        }

我的问题是,当球转到更高或更低的地面时。

我用下面的代码探测地面高度:

代码语言:javascript
复制
            RaycastHit hit;
        if (Physics.Raycast(transform.position, -transform.up, out hit, 40, mask))
        {
            minY = GetComponent<SphereCollider>().radius + hit.point.y;
        }

然后在下一次更新中将它添加到minY中。但是问题是当minY改变的时候,玩家会突然改变它在空中的位置。

我需要一个代码,使这个变化的高度平滑,但不能想出任何想法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-15 18:45:12

以下是我非常简单的解决方案,也许您可以尝试一下:

代码语言:javascript
复制
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);
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33721613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档