脚本代码似乎只适用于prefb的单个实例

时间:2017-08-13 03:47:28

标签: unity3d

我遇到了最奇怪的问题 我有一个光线投射,当它接触某个图层时,它会调用我的函数,它会做一个小动画。

问题是,这只适用于单个物体,我试过复制,复制预制件,将预制件拖到场景中,它不起作用。

现在我在下面有这个代码,正如您所看到的,我有这一行允许我访问f = -> {puts "Shorthand lambda"} f.() 上的脚本,因此我可以致电public PlatformFall platfall;

我注意到的事情,如果我将一个项目从层次结构拖到Inspector中的公共PlatFall,那么该SINGLE对象就可以正常工作。 (因为它在调用startFall时动画)。但是,如果我将预制件从我的项目拖到检查员那么他们就无法工作了。 (即使调试日志显示该方法被称为动画也不会发生)。

platfall.startFall();

平台脚本

public class CharacterController2D : MonoBehaviour {
    //JummpRay Cast
    public PlatformFall platfall;
    // LayerMask to determine what is considered ground for the player
    public LayerMask whatIsGround;
    public LayerMask WhatIsFallingPlatform;

    // Transform just below feet for checking if player is grounded
    public Transform groundCheck;

    /*....
    ...*/
    Update(){
        //    Ray Casting to Fallingplatform

        isFallingPlatform = Physics2D.Linecast(_transform.position, groundCheck.position, WhatIsFallingPlatform);
        if (isFallingPlatform)
        {
            Debug.Log("Here");
            platfall.startFall();
        }
        Debug.Log(isFallingPlatform);
    }
}

1 个答案:

答案 0 :(得分:1)

我从你的帖子中了解到你总是调用从督察分配的PlatformFall实例。我认为这种变化将解决您的问题。

public class CharacterController2D : MonoBehaviour {
    private PlatformFall platfall;
    private RaycastHit2D isFallingPlatform;

    void FixedUpdate(){
        isFallingPlatform = Physics2D.Linecast(_transform.position, groundCheck.position, WhatIsFallingPlatform);
        if (isFallingPlatform)
        {
            Debug.Log("Here");
            platfall = isFallingPlatform.transform.GetComponent<PlatformFall>();
            platfall.startFall();
        }
    }
}

顺便说一下,我假设你把预制件放到合适的位置进行施法。还有一件事,你应该在FixedUpdate中进行影响刚体的物理操作。