Unity - 如何使用初始属性(如velocity)实例化新对象?

时间:2012-11-14 21:58:43

标签: unity3d instantiation

我试图在Unity中实现塔防游戏,但我无法弄清楚如何为新的实例化对象分配速度或力(在创建者对象中)脚本) 我有一座塔,应该向敌人发射子弹,引发对撞机。这是塔的脚本:

function OnTriggerEnter(other:Collider){
if(other.name=="Enemy")
{
ShootBulletTo(other.transform);
}
}

function ShootBulletTo(target:Transform)
{//public var Bullet:Transform
var BulletClone = Instantiate(Bullet,transform.position, Quaternion.identity); // ok
BulletClone.AddForce(target.position); //does not compile since Transform.AddForce() does not exist.
}

我想问题是我必须使用Transform变量进行实例化,但我需要一个GameObject变量用于速度,力等等。那么如何用初始速度实例化子弹呢? 谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

您必须访问项目符号克隆的刚体组件才能更改力,而不是变换。

以下是您的代码的外观:

function OnTriggerEnter(other:Collider)
{
    if(other.name=="Enemy")
    {
       ShootBulletTo(other.transform);
    }
}

function ShootBulletTo(target:Transform)
{
    var Bullet : Rigidbody;
    BulletClone = Instantiate(Bullet, transform.position, Quaternion.identity);

    BulletClone.AddForce(target.position); 
}

在Unity脚本参考中也有一个很好的例子 http://docs.unity3d.com/Documentation/ScriptReference/Object.Instantiate.html

[编辑]我很确定,你不想将敌人位置添加为力量,而是应该添加一个朝向敌人位置的方向。 你减去两个位置来获得它们之间的方向向量,所以ShootBulletTo函数应该如下所示:

function ShootBulletTo(target:Transform)
{
    // Calculate shoot direction
    var direction : Vector3;
    direction = (target.position - transform.position).normalized;

    // Instantiate the bullet
    var Bullet : Rigidbody;
    BulletClone = Instantiate(Bullet, transform.position, Quaternion.identity);

    // Add force to our bullet
    BulletClone.AddForce(direction); 
}