创建
首先,我们在Hierarchy面板创建两个cube,将其命名为player和player1,
将player1的Scale均改为10,两者都要挂载上Rigidbody哦,切记!!!
两者相撞还是会飞出去,是因为什么呢?因为两者质量是1,将player1的质量调成10,会被player推动,但是不会撞飞。懂了吧,质量!!!
ok,我们来看看代码,这个是在scripits里创建的PlayerMovement文件,看清楚,这里我们有两个c#文件,挂载的位置不一样。
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
public Rigidbody rb;
void Start()
{
}
void Update()//每帧都运行,输入部分放置在这里
{
}
private void FixedUpdate()//物理类型
{
rb.AddForce(0,2, 200*Time.deltaTime);//均衡不同电脑帧率
}
}
将player1隐藏起来,着重看player,将质量改成1,发现运行他就出去了。
接下来,将最后一句改成如下:
rb.AddForce(0,0, 2000*Time.deltaTime);
发现它往前翻滚。在Rigidbody的Freeze Rotation勾选x约束或者在assets右键选择create点击physic Material。分别是动力摩擦力1静止,0类似很滑几乎没有摩擦力,下来是弹力,将其全部改成0。
将其添加到ground的Collider里边的Material里。两个方法,以后者为例使用。
启动后发现player很光滑往前走。
在面板上控制速度
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
public Rigidbody rb;
public float forwardForce = 2000f;
void Start()
{
}
void Update()//每帧都运行,输入部分放置在这里
{
leftPressed = Input.GetKey("a");
rightPressed= Input.GetKey("d");
}
private void FixedUpdate()//物理类型
{
rb.AddForce(0,0, forwardForce*Time.deltaTime);//均衡不同电脑帧率
}
}
使用forwardForce取代了2000,这是我们自己起的名字,向前的力取2000,浮点数加个f。
将player的c#处的改成500会发现它运动的慢了。此处数值可以自己调节。
面板上进行输入
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
public Rigidbody rb;
public float forwardForce = 2000f;
public float sideWaysForce = 500f;
void Start()
{
}
void Update()//每帧都运行,输入部分放置在这里
{
leftPressed = Input.GetKey("a");
rightPressed= Input.GetKey("d");
}
private void FixedUpdate()//物理类型
{
rb.AddForce(0,0, forwardForce*Time.deltaTime);//均衡不同电脑帧率
if (Input.GetKey("d"))
{
rb.AddForce(sideWaysForce* Time.deltaTime, 0, 0);
}
if (Input.GetKey("a"))
{
rb.AddForce(-sideWaysForce * Time.deltaTime, 0, 0);
}
}
}
FixedUpdate:
固定帧更新,以固定的频率调用的函数,更新频率默认0.02s。是在固定的时间间隔执行,不受游戏帧率的影响。edit里找time可以更改。
标签:AddForce,c#,void,练习,unity,rb,Time,Input,public From: https://blog.csdn.net/Cao__Ye/article/details/136766879