繁体   English   中英

当 GameObject 接触地面时替换它 Unity 3D

[英]Replace the GameObject when it touch the ground Unity 3D

我的资产中有 2 个预制件,一个用于掉落地面时的对象,一个用于接触地面时,因此我需要一个脚本来检查带有我的第一个预制件的对象是否接触地面,然后将其替换为我的第二个预制件。

  1. 基本上你可以做的是给场景中的“地面”一个标签(我们称之为“地面”)。

  2. 要检测它是否接触地面,您可以进行光线投射或使用void OnCollisionEnter()

  3. 然后比较标签,如果标签是“接地”,你...

  4. 实例化第二个预制件并将其位置设置为transform.position(第一个预制件位置)

  5. 然后你销毁(这个)(“这个”是第一个预制件)。

例如(请注意:我自己还没有测试过脚本):

[SerializeField] GameObject object2Prefab;
GameObject object2;

private void OnCollisionEnter(Collision collision)
{
    if (collision.gameObject.CompareTag("Ground"))
    {

        object2 = Instantiate(object2Prefab);
        object2.transform.position = transform.position; // Copies the Position 
        object2.transform.rotation = transform.rotation; // Copies the Rotation
        object2.transform.localScale = transform.localScale; // Copies the Scale

        Destroy(this);
    }
}

或者 Raycast 版本(同样,我自己还没有测试过):

[SerializeField] GameObject object2Prefab;
GameObject object2;

void Update()
{  
    RaycastHit hit;

    if (Physics.Raycast(transform.position, -Vector3.up, out hit))
    {
        if (hit.collider.CompareTag("Grounded"))
        {
            object2 = Instantiate(object2Prefab);
            object2.transform.position = transform.position; // Copies the Position 
            object2.transform.rotation = transform.rotation; // Copies the Rotation
            object2.transform.localScale = transform.localScale; // Copies the Scale

            Destroy(this);
        }
    }
}

将此脚本附加到第一个预制件!

并将您的第二个预制件附加到 object2Prefab 变量!

并且不要忘记放置碰撞器!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM