Unity - A计划(永久有效期) 扫二维码继续学习 二维码时效为半小时

(207评价)
优惠后 ¥1899.00优惠前 ¥2499.00 双十一全年最大力度限时优惠
1对1 答疑即时回复7天无理由退款30天价保提问必答

服务保障

1对1 答疑

提供专属的一对一在线答疑,快速答疑解惑。

即时回复

及时响应学习咨询,帮助解决问题。

7天无理由退款

购买后7天内可申请无理由退款。

30天价保

购买后30天内如遇降价,可申请价保。

提问必答

对于提问做到有问必答,帮您扫清学习过程中的种种障碍

Roguelike的项目问题
shuaibi发起了话题2017-08-24
4
回复
543
浏览

为什么在调用Player的这个脚本里面的东西时就可以直接通过得到组件来访问。

而为什么在访问GameManager脚本下面的东西时就要使用.instance(this)的私有变量再用一个外部函数来访问呢?

这两种方法有什么区别?应该在什么时候使用哪个?

 

第二个问题

    public static MusicManager Instance {
        get{
            return _instance;
        }
    }

这个中的instance在c#中属于什么?

我以为get set只需要使用type className来实现,为什么这里出现了一个Instance,不是很明白

 

第三个问题

public void RandomPlay(params AudioClip[] clips)

    {

        float pitch = Random.Range(minPitch, maxPitch);

        int index = Random.Range(0, clips.Length);

        AudioClip clip = clips[index];

 

        efxSource.clip = clip;

        efxSource.pitch = pitch;

        efxSource.Play();

    } 

为什么这里传递的参数是两个AudioClip而不是一个AudioClip的数组包括了两个AudioClip呢?

因为这里的参数是AudioClip的数组,而却在传递实参时给了两个AudioClip

所有回复
  • siki • 2017-08-24

    1,访问组件的话,就先得到组件,再访问

    你的GameManager这是是一个单例模式,其实也是可以通过得到组件的方式来访问的,但是比较麻烦,为了方便访问就通过instance这种单例模式来访问,只有一些管理类会通过单例模式来方便访问

    2,Instance 这里是自定义的你可以叫任何名字,主要是static,这是一个静态的属性,静态属性可以通过类名直接访问到,这样是为了方便访问,不用每次都去查找并GetComponent的

    3,这个就是参数数组,就是参数是可变的,你可以传递0-任意个,会把你传递的参数组装成一个数组

    这个知识点可以看下我讲解的C#编程第一季第二季中有讲解

    • shuaibi • 2017-08-24

      但是为什么Player就不能这样子访问呢?而是通过FindGameObject来访问呢?不能给Player也做一个instance函数来访问吗?这两者能访问到的内容有区别吗?

      (0) 回复
    • siki • 2017-08-25

      回复 @ shuaibi: player也是可以通过单例模式访问的,一般单例模式要保证这个物体只有一个,比如场景中有多个敌人,就不能通过单例模式来访问,单例不能太多,不让耦合性太高,不利于大项目后期需求的更改

      (0) 回复
    还有-3条回复,点击查看
    你还没有登录,请先登录或注册!
  • siki • 2017-08-25

    关于耦合性问题,可以看看老师讲的设计模式的项目

    还有-5条回复,点击查看
    你还没有登录,请先登录或注册!
发表回复
你还没有登录,请先 登录或 注册!