获取 AudioSource 为空

加载方法
问题1:
getComponent(AudioSource) 里的 AudioSource 报红。

    audio: AudioSource = null!;

    onLoad() {
        this.audio = this.node.getChildByName(`Audio`).getComponent(AudioSource);
    }

问题2:
脚本为单例,this.audio 报空,this.audio 是场景拖拽赋值,在 onLoad 方法里是获取到了的。

    playSound(path: string) {
        resourceUtil.loadRes(path, AudioClip, (err: any, clip: any) => {
            this.audio.clip = clip;
            this.audio.play();
        });
    }

onLoad是以节点顺序来走生命周期的,所以也许你这个脚本走onLoad时,audio这个节点还没初始好,可以在start里面试试

感谢,我试试!请问这个是为什么?

问题2解决,可能是加载方法有问题。

import { _decorator, Component, AudioSource, resources } from 'cc';
import { Constant } from '../scripts/common/Constant';
const { ccclass, property } = _decorator;

@ccclass('Test')
export class Test extends Component {
    private static _instance: Test = null!;
    constructor() {
        super();
        Test._instance = this;
    }

    public static get Instance() {
        return Test._instance;
    }

    @property(AudioSource)
    audio: AudioSource = null!;

    playSound(path: string) {
        resources.load(path, (err: any, res: any) => {
            this.audio.clip = res;
            this.audio.play();
        });
    }

    test() {
        Test.Instance.playSound(Constant.Path.SoundCoin);
    }

}