UNITY3D添加了刚体后,移动不成问题,也能实现CS效果,但是跳这个就出问题了,只能立定跳,不能边走边跳

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UNITY3D添加了刚体后,移动不成问题,也能实现CS效果,但是跳这个就出问题了,只能立定跳,不能边走边跳相关的知识,希望对你有一定的参考价值。

UNITY3D添加了刚体后,移动不成问题,也能实现CS效果,但是跳这个就出问题了,只能立定跳,不能边走边跳
原因是我在跟随摄像机移动的时候,加了速度和力(不加动不了)
帮忙看看出错在哪里?怎么改。

这是跳的部分
rigidbody.velocity = new Vector3(0, 30, 0); //速度↑
GetComponent<Rigidbody>().AddForce(Vector3.up * jumpSpeed); //力 ↑
这是走路的部分

float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");

Vector3 targetDirection = new Vector3(h, 0, v);

float roat_y = transform.rotation.eulerAngles.y; // 得到Y 轴的角度
targetDirection = Quaternion.Euler(0f,roat_y, 0f) * targetDirection;
/*
如果去掉上面两行虽然可以移动,但是无法跟随摄像机视线,
也就是指能东南西北固定方向,这和CS差太远。
*/
rigidbody.velocity = targetDirection*speed;
rigidbody.AddForce(targetDirection * speed);
rigidbody.MovePosition(transform.position + targetDirection * speed*Time.deltaTime);
///////////////////////////

rigidbody.velocity = targetDirection*speed;
rigidbody.AddForce(targetDirection * speed);
//去掉这两句则不能动

怀疑是力被覆盖了 跳起和移动都是受到力控制 改了力后 力就只有一个方向 要么 跳起 要么移动
如果是这样的话 获取两个控制 将方向算出来后再一起给力赋值追问

关键就是不知道怎么合在一起,为这个问题头疼了一天了,又不能同时加两个力,如果没有摄像机的视角要求,完全不用rigidbody.velocity 以及rigidbody.AddForce都可以移动的,现在加上反而成阻碍,在移动不加力的情况下,跳跃是可以助跑着跳的,可以在移动的过程中跳起来,跳到平台,高台上的

追答

看这两个东西 添加了两次力 就是问题 

如下 绿色的是你的方法 白色的是我的想法 你看看 能不能用

追问

自己搞定了,单独用MovePosition是正确的,那个力和速度velocity 完全没必要加 ,加了就是错误的。

参考技术A 感觉人物不用刚体的力去移动更好,因为有许多地方不好控制,还会产生冲突,比如楼主这种情况,建议楼主使用 transform.Translate transform.eulerAngles 的方式移动和旋转, 如果楼主还是喜欢刚体的重力的话,不去掉也是可以的,刚体用加力的方法去跳跃的部分其实可以单独踢出来做成一个函数,使之互不干涉,,,按空格时使用力来跳跃,移动用transform,亲测可行!
(注意:不要在Translate的情况下再使用力来前后左右移动了,否则会很悲剧)

如何检查刚体是否在移动?

我想检查刚体是否正在移动并且我尝试了多种东西,它似乎没有用。

我在下面添加了我的代码片段,但是当游戏对象落在某个区域时,基本上会触发更新功能。在那一点上,我在一根绳子上接触一个刚体,看它是否在移动。对于使用IsSleeping函数的片段,但它确实有效。任何人都知道我可以检查一旦游戏对象落在特定区域,以检查它是否停止移动。

void Start()
{
    checkSleeping = false;
    joint = player.transform.Find("Joint 0").gameObject;
    jointRB = joint.GetComponent<Rigidbody2D>();
    Debug.Log("Found Him");
}


void Update()
{
    if (checkSleeping == true)
    {
        SleepingKonyaku();
    }
}

void OnTriggerStay2D (Collider2D col)
{
   if (col.tag == "Player" )
   {
        checkSleeping = true;
   }
}

void OnTriggerExit2D (Collider2D col)
{
    if (col.tag == "Player")
    {
        checkSleeping = false;
    }
}

void SleepingKonyaku ()
{        

    if(jointRB.IsSleeping())
    {
         Invoke ("RestartLevel", 2f);
         Debug.Log ("sleeping baby!!");
    }
    else
    {
        Debug.Log("Not Sleeping");
    }
}
答案

当它具有非零速度时,某些东西被认为是移动的。这样做:检查Rigidbody速度的大小(长度)是0还是至少接近它。对于一些额外的性能,你可以使用sqrMagnitude而不是magnitude:这不涉及取值的平方根,这是一个相对缓慢的过程。

以上是关于UNITY3D添加了刚体后,移动不成问题,也能实现CS效果,但是跳这个就出问题了,只能立定跳,不能边走边跳的主要内容,如果未能解决你的问题,请参考以下文章

unity3D中,给物体添加刚体后,为啥不是掉在地面上,而是穿过地形一直往下落呢?

Unity3d刚体Rigidbody与碰撞检测Collider

Unity3D 学习教程 7 基本应用与添加刚体

Unity3D摇杆

unity3d里怎么给动态添加的物体添加贴图

Unity3D 中3D刚体组件的力