Unity 抛物线运动脚本(弓箭轨迹)
2020-06-09 04:25
886 查看
首先声明,脚本代码大部分来自:https://www.geek-share.com/detail/2661688221.html
我把这个脚本做了一些改动。
需要注意的是:
关于箭(炮弹)的制作:
1, 资源原点, 在箭头上(一般是箭头产生攻击力)
2, 箭头朝向, 是z轴的增长方向,以便LookAt
脚本如下:
[code]using System.Collections; using System.Collections.Generic; using UnityEngine; /// <summary> /// 设计编写:常成功 /// 创建时间:2020/05/12 /// 脚本功能:从A点(起始点), 到B点(目标点)的抛物线运动 /// 挂载位置:动态挂载, 即将运动的物体上 /// </summary> /// /// ps. 关于箭的制作: /// 1, 资源原点, 在箭头上(一般是箭头产生攻击力) /// 2, 箭头朝向, 是z轴的增长方向 // 从A点(起始点), 到B点(目标点)的抛物线运动 public class Parabola_A_to_B : MonoBehaviour { // 目标点Transform public Transform target_trans; // 运动速度 public float speed = 10; // 最小接近距离, 以停止运动 public float min_distance = 0.5f; private float distanceToTarget; private bool move_flag = true; private Transform m_trans; void Start() { m_trans = this.transform; distanceToTarget = Vector3.Distance(m_trans.position, target_trans.position); StartCoroutine(Parabola()); } IEnumerator Parabola() { while (move_flag) { Vector3 targetPos = target_trans.position; // 朝向目标, 以计算运动 m_trans.LookAt(targetPos); // 根据距离衰减 角度 float angle = Mathf.Min(1, Vector3.Distance(m_trans.position, targetPos) / distanceToTarget) * 45; // 旋转对应的角度(线性插值一定角度,然后每帧绕X轴旋转) m_trans.rotation = m_trans.rotation * Quaternion.Euler(Mathf.Clamp(-angle, -42, 42), 0, 0); // 当前距离目标点 float currentDist = Vector3.Distance(m_trans.position, target_trans.position); // 很接近目标了, 准备结束循环 if (currentDist < min_distance) { move_flag = false; } // 平移 (朝向Z轴移动) m_trans.Translate(Vector3.forward * Mathf.Min(speed * Time.deltaTime, currentDist)); // 暂停执行, 等待下一帧再执行while yield return null; } if (move_flag == false) { // 使自己的位置, 跟[目标点]重合 m_trans.position = target_trans.position; // [停止]当前协程任务,参数是协程方法名 StopCoroutine(Parabola()); // 销毁脚本 GameObject.Destroy(this); } } }
效果如下:
相关文章推荐
- unity抛物线,平均速度下的运动轨迹
- unity发射弓箭轨迹的实现
- 小折腾:JavaScript与元素间的抛物线轨迹运动
- unity。。可指定目标点的类弓箭斜抛运动控制C#脚本(不采用物理引擎)。。纯位移旋转控制
- 使用第三方插件Curvy为unity场景快速生成运动轨迹与赛道
- Unity物体绕圆运动-轨迹
- 小折腾:JavaScript与元素间的抛物线轨迹运动
- js实现小球抛物线轨迹运动的两种方式
- unity发射弓箭轨迹的实现
- unity发射弓箭轨迹的实现
- Unity1.17/添加运动轨迹/设置显示屏/碰撞器/铰链/灯光探照与分层
- Unity抛物线的脚本
- 小折腾:JavaScript与元素间的抛物线轨迹运动
- unity抛物线的运动
- Unity两点之间模拟抛物线运动
- Unity 进行曲线轨迹自定义,以及根据自定义曲线轨迹运动
- 使用第三方插件Curvy为unity场景快速生成运动轨迹与赛道
- unity发射弓箭轨迹的实现
- Unity5.X- 粒子系统,粒子沿着一定的轨迹运动的研究
- unity发射弓箭轨迹的实现