
struct lista *next
int data
}list
void insert(list *h)
void del(list *h)
int main()
{
int flag
list *head=(list *)malloc(sizeof(list))
head->next=NULL
while(1)
{
有几种方式可以做到
采用Dotween或者Itween这种缓动插件来做,在其中可以设置路径点,然后根据路径点移动。相对来说比较简单
通过代码实现, 根据初中的物理知识(应该是初中的)抛物线运动在水平方向是匀速的,垂直方向上是v=a*t(v是速度,a是加速度,t是时间).也就是说只要得到垂直方向初始化速度,让水平方向和垂直方向各自运行就可以了.
如果知道目标(距离)和水平速度,就能得到飞行的时间.time=distance/speed在time这段时间内,炮d用1/2的时间上升,1/2的时间下降.炮d发出时在垂直方向上的速度是多少呢?我们可以反过来看,在最顶点时炮d速度是0,经过1/2的时间下落到平面,根据v=a*t(也就是speed=重力加速度*1/2*时间),这样就得到了垂直方向的初始化速度.然后用逻辑控制垂直方向和水平方向各自运行就可以了.
大致写了一段逻辑如下:
public class Bullet : MonoBehaviour{
public const float g = 9.8f
public GameObject target
public float speed = 10
private float verticalSpeed
private Vector3 moveDirection
private float angleSpeed
private float angle
void Start()
{
float tmepDistance = Vector3.Distance(transform.position, target.transform.position)
float tempTime = tmepDistance / speed
float riseTime, downTime
riseTime = downTime = tempTime / 2
verticalSpeed = g * riseTime
transform.LookAt(target.transform.position)
float tempTan = verticalSpeed / speed
double hu = Math.Atan(tempTan)
angle = (float)(180 / Math.PI * hu)
transform.eulerAngles = new Vector3(-angle, transform.eulerAngles.y, transform.eulerAngles.z)
angleSpeed = angle / riseTime
moveDirection = target.transform.position - transform.position
}
private float time
void Update()
{
if (transform.position.y < target.transform.position.y)
{
//finish
return
}
time += Time.deltaTime
float test = verticalSpeed - g * time
transform.Translate(moveDirection.normalized * speed * Time.deltaTime, Space.World)
transform.Translate(Vector3.up * test * Time.deltaTime,Space.World)
float testAngle = -angle + angleSpeed * time
transform.eulerAngles = new Vector3(testAngle, transform.eulerAngles.y, transform.eulerAngles.z)
}
}创建一个A物体用来移动,B物体是终止点。然后挂脚本运行即可。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)