C# 试图向游戏对象发射射弹,不是吗';别动=
我正在制作一个2D塔防游戏,希望我的塔楼能在仆从面前发射一个预制场。然而,它目前只产生我想要的预制,但不移动它 我的两个脚本:C# 试图向游戏对象发射射弹,不是吗';别动=,c#,unity3d,unity3d-2dtools,C#,Unity3d,Unity3d 2dtools,我正在制作一个2D塔防游戏,希望我的塔楼能在仆从面前发射一个预制场。然而,它目前只产生我想要的预制,但不移动它 我的两个脚本: public class Attacker : MonoBehaviour { // Public variables public GameObject ammoPrefab; public float reloadTime; public float projectileSpeed; // Private variables private Transform
public class Attacker : MonoBehaviour {
// Public variables
public GameObject ammoPrefab;
public float reloadTime;
public float projectileSpeed;
// Private variables
private Transform target;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
void OnTriggerEnter(Collider co){
if (co.gameObject.tag == "Enemy" || co.gameObject.tag == "BlockTower") {
Debug.Log("Enemy tag detected");
if(this.gameObject.tag == "Enemy" && co.gameObject.tag != "Enemy"){
Debug.Log("This is an Enemy");
// Insert for Enemey to attack Block Towers.
}
if(this.gameObject.tag == "Tower" && co.gameObject.tag != "BlockTower"){
Debug.Log("This is a Tower");
Tower Tower = GetComponent<Tower>();
Tower.CalculateCombatTime(reloadTime, projectileSpeed);
Transform SendThis = co.transform;
Tower.SetTarget(SendThis);
}
}
}
公共类攻击者:单一行为{
//公共变量
公共游戏对象弹药预制;
公共浮动重新加载时间;
公共浮动射弹速度;
//私有变量
私有转换目标;
//用于初始化
无效开始(){
}
//每帧调用一次更新
无效更新(){
}
空对撞机(对撞机公司){
如果(co.gameObject.tag==“敌人”| | co.gameObject.tag==“碉堡”){
Debug.Log(“检测到敌方标签”);
if(this.gameObject.tag==“敌人”&&co.gameObject.tag!=“敌人”){
Log(“这是一个敌人”);
//插入Enemey以攻击封锁塔。
}
if(this.gameObject.tag==“Tower”&&co.gameObject.tag!=“BlockTower”){
Log(“这是一座塔”);
塔=GetComponent();
塔。计算mbattime(重新加载时间、射弹速度);
Transform SendThis=co.Transform;
设置目标(SendThis);
}
}
}
}
及
公共级塔楼:单一行为{
私有转换目标;
私人漂浮火速;
私人双下一次租赁;
私有游戏对象子弹;
私有攻击者源;
//用于初始化
公共虚拟空开始(){
source=this.GetComponent();
}
//每帧调用一次更新
公共虚拟无效更新(){
如果(目标){
Log(“我有一个目标”);
//如果(nextFireTime您必须更新项目符号的位置。您仅在创建项目符号时移动
尝试列出项目符号并使用更新功能更改位置。Vector3.MoveTowards
仅移动对象一次,调用FireProjectle
时,这只是瞬间位移
您需要使用Update()
函数创建某种投射脚本,使其随时间移动
以下是一个例子:
public class Projectile : MonoBehaviour
{
public Vector3 TargetPosition;
void Update()
{
transform.position = Vector3.MoveTowards(transform.position, TargetPosition, speed * Time.DeltaTime);
}
}
然后在项目符号实例化之后,设置目标:
bullet.GetComponent<Projectile>().TargetPosition = target.position;
bullet.GetComponent().TargetPosition=target.position;
希望有帮助。请注意,您每次调用FireProjectle时都会实例化项目符号,但它不会更新创建的项目符号。将来,向游戏开发人员提问可能会更好。例如,这里的人建议您列出项目符号,而不是建议使用update()
所有单一行为实例都有的方法。GD上的人会知道Unity的微妙之处,并能给出更好、更具体的建议。作为补充说明,如果你想让寻的器投射物跟随他们的目标,你可以传递target.gameObject
,而不是目标的位置。
bullet.GetComponent<Projectile>().TargetPosition = target.position;