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中,给物体添加刚体后,为啥不是掉在地面上,而是穿过地形一直往下落呢?