【问题标题】:Unity - How to instantiate new object with initial properties (like velocity)?Unity - 如何用初始属性(如速度)实例化新对象?
【发布时间】:2022-04-09 17:30:44
【问题描述】:

我正在尝试在 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 变量来表示速度、力等。那么如何以初始速度实例化子弹? 感谢您的帮助。

【问题讨论】:

  • 统一标签适用于 Microsoft Unity。请不要滥用它。

标签: unity3d instantiation


【解决方案1】:

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

您的代码应如下所示:

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); 
}

在统一脚本参考中也有一个很好的例子 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); 
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    相关资源
    最近更新 更多