赞
踩
1.使用Transform组件
(1)transform.position(最基础,最常用):
这是通过上下左右键控制人物运动的方法
//获取水平按键,左键或A 则值为-1f,右键或D 则值为1f
horizontal = Input.GetAxis("Horizontal");//获取垂直按键,上键或W 则值为-1f,下键或S 则值为1f
vertical = Input.GetAxis("Vertical");
Vector2 position = transform.position;
position.x = position.x + speed * horizontal*Time.deltaTime;//Time.deltaTime在小技巧中有讲,speed在最开始赋值,或者外部赋值
position.y = position.y + speed * vertical * Time.deltaTime;
transform.position = position;注意: transform.position = position; // 通过transform获取位置会在人物与碰撞体碰撞时发生抖动,所以一般使用刚体的rigidbody2d.position
(2) transform.Translate(v3向量,坐标系):这个坐标系有两种,一种世界坐标系Space.World;一种局部坐标系Space.Self,当这个坐标系不写时,默认的为局部坐标系,这里可以看坐标系
这是局部坐标系:
这是世界坐标:
public float speed;
private void update( ){
//沿z轴移动,如果想要自己控制,参照(1)的写法
transform. Translate(new Vector3(0, 0, speed*Time. deltaTime ) , Space .World);}
2.使用 Vector3插值 (1是速度越来越慢,3是匀速,4是先匀速再速度越来越慢)
(1)Vector3.Lerp(当前位置(V3),目标位置(V3),速度(float)):线性移动由速度参数控制
速度越小,物体越慢,这里速度其实就是插值的比例(0~1),例如总路程为1,速度为0.5,第一次插值后两者距离为1*0.5,第二次插值为(1-(1*0.5)*0.5),缓动效果(越靠近目标越慢)(这里的缓动效果会无限接近目标,但是接近不了),一般用来控制相机的移动
public float speed;
public Transform target;//目标对象
private void Update(){
Vector3 V = Vector3.Lerp( transform.position,target. position, speed * Time .deltaTime);
transform.position = V;
}
(2) Vector3.Slerp(当前位置(V3),目标位置(V3),速度(float)):这就是通过抛物线的形式到达目标点(不常用)
(3)Vector3.MoveTowards(当前位置(V3),目标位置(V3),最大速度(float)):速度取正靠近目标,速度取负远离目标,注意这是做匀速直线运动靠近目标
(4)Vector3.SmoothDamp(当前位置(V3),目标位置(V3),当前速度(ref:V3),缓动时间(float),最大速度(float)):官方翻译为“平滑阻尼”,也就是移动过程中,逐渐变慢的抵达终点(这里缓动可以到达目标),这里的最大速度可以不用写,当前速度参数:应为全局变量,这个值由你每次调用这个函数时被修改所以是ref(这里的当前速度不用赋值),缓动间参数:该值越小,越快抵达目标
public float time;
public Vector3 cspeed = Vector3 . zero;
public transform t;
private void Update(){
Vector3 V = Vector3. SmoothDamp(transform.position, t.position,ref cspeed,
time*Time.deltaTime) ;}
transform. position = V;
3.使用刚体组件 :
(1)AddForce(有方向的力(V3),力的模式):这里就可以理解为给刚体了一个带有方向的力,
注意:1.建议放置在FixedUpdate函数下 2.移动物体需要添加刚体 3.适合模拟外力作用下的刚体运动(因此经常用来做发射子弹)4.此力为累加,不适合重复施加力来模拟物体
力的模式(ForceMode)总共有四种:
1.Force(叫持续的力,受质量影响) (默认),不写力的模式的时候就是这个(持续力,用质量)2.Impulse(一个瞬间冲击力,受质量影响)(瞬间力,用质量)
3.Acceleration(可持续的加速度,不受质量影响)(持续加速度,不用质量)
4.VelocityChange(一个瞬间速度变化,不受质量影响)(瞬间加速度,不用质量)
(2)MovePosition(新的位置(V3)):这里新的位置(V3)是transform.position+dir(移动的v3向量方向)*speed*Time.deltaTime
(3)Velocity:直接设置物体的速度(不用考虑质量)(注意这是一个属性,速度有方向和大小,所以是直接用v3矢量直接赋值表示速度的方向和大小),经常用来做人物的跳跃和移动
void Run()//这是奔跑移动函数
{
float moveDir = Input.GetAxis("Horizontal");
lookDirection = moveDir;乘上//这里如果Run放在update中最好是在speed后乘上Time.deltaTime
Vector2 playerVel = new Vector2(moveDir*speed,M_Rigidbody2D.velocity.y);
M_Rigidbody2D.velocity = playerVel;
}void Jump()//这是跳跃函数
{
if (Input.GetKeyDown(KeyCode.K))
{
Vector2 jumpVel = new Vector2(M_Rigidbody2D.velocity.x, jumpspeed);
M_Rigidbody2D.velocity = jumpVel;
}
}
注意这里的所有V3向量在2D平面游戏中都可以变成V2向量
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。