👨💻个人主页:@元宇宙-秩沅
👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!
👨💻 本文由 秩沅 原创
👨💻 收录于专栏:unity每日一记
⭐相关文章: 线性差值函数以及平滑阻尼的运用和实践(Lerp AND SmoothDamp)
⭐相关文章:基础不牢,地动山摇系列 ------ 软硬通吃 unity常用API
⭐相关文章:关于游戏剧情模式中用到的基础简单API
⭐相关文章:控制游戏人物移动的细节到底有多少?
⭐相关文章:坦克炮管旋转发射炮弹(向量基础,射线碰撞,物体实例化)
文章目录
- ⭐基于Unity中物体移动相关方法和API集锦⭐
- 👨💻0.SmoothDamp先快后慢的移动
- 👨💻1.MoveTowards匀速步频实现两点间的移动
- 👨💻2.Lerp()差值实现镜头跟随移动
- 👨💻3,实时更新位置的差值进行镜头的同步移动
- 👨💻4.监听键盘进行实时位置更新
- 妙用:监控键盘的移动---悬浮移动,上下有摆动
- 👨💻5.translate与实时监听相配套
- 👨💻6.刚体力进行牵引移动
- 👨💻7.刚体力的瞬移
- 👨💻8.通过控制Rigibody的速度来进行移动控制
- 👨💻9.通过控制Rigibody的MovePosition来进行移动控制
⭐基于Unity中物体移动相关方法和API集锦⭐
👨💻0.SmoothDamp先快后慢的移动
👨💻1.MoveTowards匀速步频实现两点间的移动
这里的重点是匀速,实现两点间的移动
void FixedUpdate(){gameObject.transform .position =Vector3.MoveTowards(car.transform.position ,storn.transform.position,0.5f);}
👨💻2.Lerp()差值实现镜头跟随移动
- 利用线性差值进行镜头的慢迁移
void LateUpdate(){transform.position = Vector3.Lerp(transform.position, cube.position, Time.deltaTime);}
👨💻3,实时更新位置的差值进行镜头的同步移动
其实最简单的方法就直接把相机作为组件挂载上去即可
- 纯碎位置的实时更新:
void LateUpdate(){offset = cube.position - transform.position;transform.position +=offset;}
- 使用Translate的实时更新–TransLate是物体朝某一个方向的移动
这时不适合于镜头的移动,只适合物体的移动,也就是说适合放在FixedUpdate里面,不适合放在LateUpdate里面,原因如下
此时的镜头的抖动效果并不是地形的原因,而是每帧时位置累加的原因
但是放在FixedUpdate里面就不会出现该情况
所以实现镜头的同步跟随纯粹的位置实时即可,或者直接将相机组件作为移动物体的子组件,保持固定位置
👨💻4.监听键盘进行实时位置更新
也就是键盘进行wsad移动
void FixedUpdate(){a = gameObject.transform.position.x+Input.GetAxis("Horizontal");b = gameObject.transform.position.y;c = gameObject.transform.position.z + Input.GetAxis("Vertical"); //此时z轴一直是固定值,c作为y轴的参数后,移动距离只能在[-1,1]之间变化move = new Vector3(a,b,c);gameObject.transform.position = move ;}
妙用:监控键盘的移动—悬浮移动,上下有摆动
void FixedUpdate(){a = transform.position.x+Input.GetAxis("Horizontal");c = transform.position.z + Input.GetAxis("Vertical"); //此时z轴一直是固定值,c作为y轴的参数后,移动距离只能在[-1,1]之间变化move = new Vector3(a,c,b);transform.position = move ;}
重点在于z轴在固定区域进行上下移动,原因为c的参数是固定的因为z轴未作变化,所以y轴一直都是在不变的z轴位置上进行键盘监听,而范围刚好是是[-1,1]
👨💻5.translate与实时监听相配套
private void Update(){//坦克的移动 = 大小*方向transform.Translate(Input.GetAxis("Vertical") *Vector3.forward*moveSpeed *Time.deltaTime );//坦克的旋转 = 大小*轴向transform.Rotate(Input.GetAxis("Horizontal") *Vector3.up *RotateSpeed *Time .deltaTime );//头部炮管的旋转 = 大小*轴向Head.transform.Rotate(Input.GetAxis ("Mouse X") *Vector3.up*HeadSpeed*Time .deltaTime );//左键发射炮弹if(Input.GetMouseButtonDown(0)){Fire();}}public override void Fire() {throw new System.NotImplementedException();}
}
👨💻6.刚体力进行牵引移动
前提是牵引力要大于物体的质量
void Update(){cc.AddForce(0 ,0 ,10f);}
👨💻7.刚体力的瞬移
将物体瞬间移动到指定位置的坐标,所以前提得获取指定位置得坐标
private void FixedUpdate(){xx.MovePosition(Vector2 (1,0) );}
👨💻8.通过控制Rigibody的速度来进行移动控制
[SerializeField] private float moveSpeed_X;
[SerializeField] private float moveSpeed_Y;
private Rigidbody2D rigidbody2D;
private void Start()
{//获取挂载脚本的物体的刚体组件rigidbody2D = GetComponent<Rigidbody2D>();
}
private void Update()
{//水平方向float horizontal = Input.GetAxis("Horizontal");//竖直方向float vertical = Input.GetAxis("Vertical");rigidbody2D.velocity=new Vector2 (horizontal*moveSpeed_X*Time.deltaTime, vertical* moveSpeed_Y * Time.deltaTime);//也可以只改变x或y的值rigidbody2D.velocity = new Vector2(horizontal * moveSpeed_X * Time.deltaTime, rigidbody2D.velocity.y);rigidbody2D.velocity = new Vector2(rigidbody2D.velocity.x, vertical * moveSpeed_Y * Time.deltaTime);
}
👨💻9.通过控制Rigibody的MovePosition来进行移动控制
private float vertical;private float horizontal;private Rigidbody rigidbody; //玩家的刚体组件private Vector3 moveDerictor; //移动的方向public float velocity = 1f; //移动的速度private void Awake(){rigidbody = GetComponent<Rigidbody>();}private void FixedUpdate(){vertical = Input.GetAxis("Vertical") ;horizontal = Input.GetAxis("Horizontal") ;if(Input.GetAxis("Vertical")!= 0 || Input.GetAxis("Horizontal")!= 0){moveDerictor = new Vector3(horizontal, 0, vertical);moveDerictor = moveDerictor.normalized; //将方向变成单位向量rigidbody.MovePosition( transform .position + moveDerictor * velocity * Time.deltaTime); //速度*方向 = 向量}}
⭐相关文章: 线性差值函数以及平滑阻尼的运用和实践(Lerp AND SmoothDamp)
⭐相关文章:基础不牢,地动山摇系列 ------ 软硬通吃 unity常用API
⭐相关文章:关于游戏剧情模式中用到的基础简单API
⭐相关文章:控制游戏人物移动的细节到底有多少?
⭐相关文章:坦克炮管旋转发射炮弹(向量基础,射线碰撞,物体实例化)
你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!