轨迹代码参考了别人的,我只是狗尾续貂了,原链接稍后补充
主要有两块代码,一块是创建实例代码,一块是子弹代码
实例代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Fashe : MonoBehaviour
{
public GameObject BulletPrefab;
private GameObject locateA;
//public Transform locateB;
public float intaval=0.5f;
private float count = 0f;
// Start is called before the first frame update
void Start()
{
locateA = GameObject.Find("LocationA");
}
// Update is called once per frame
void Update()
{
count = count + Time.deltaTime;
if(count>=intaval)
{
Instantiate(BulletPrefab, locateA.transform.position, Quaternion.identity);
count = 0;
print("fashe");
}
}
}
子弹代码:
using System;
using UnityEngine;
public class BulletNew : MonoBehaviour
{
public const float g = 9.8f;
public float lifeTime = 1;
private GameObject target;
public float speed = 10;
private float verticalSpeed;
private Vector3 moveDirection;
private float angleSpeed;
public float angle;
void Start()
{
target = GameObject.Find("LocationB");
float tmepDistance = Vector3.Distance(this.transform.position, target.transform.position);
float tempTime = tmepDistance / speed;
float riseTime, downTime;
riseTime = downTime = tempTime / 2;
verticalSpeed = g * riseTime;
this.transform.LookAt(target.transform.position);
float tempTan = verticalSpeed / speed;
double hu = Math.Atan(tempTan);
angle = (float)(180 / Math.PI * hu);
this.transform.eulerAngles = new Vector3(-angle, this.transform.eulerAngles.y, this.transform.eulerAngles.z);
angleSpeed = angle / riseTime;
moveDirection = target.transform.position - this.transform.position;
Destroy(gameObject,lifeTime);
}
private float time;
void Update()
{
if (this.transform.position.y < target.transform.position.y)
{
//finish
return;
}
time += Time.deltaTime;
float test = verticalSpeed - g * time;
this.transform.Translate(moveDirection.normalized * speed * Time.deltaTime, Space.World);
this.transform.Translate(Vector3.up * test * Time.deltaTime, Space.World);
float testAngle = -angle + angleSpeed * time;
this.transform.eulerAngles = new Vector3(testAngle, this.transform.eulerAngles.y, this.transform.eulerAngles.z);
}
}
说明用法:必须要有LocationA LocationB 节点,是作为发射跟接受点。
子弹挂上BulletNew 脚本,并保存为预制体
发射节点 “fashe"挂上 Fashe 脚本