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

(197评价)
价格: 4431.00元
Roguelike的项目问题
shuaibi发起了话题2017-08-24
4
回复
446
浏览

为什么在调用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条回复,点击查看
    你还没有登录,请先登录注册
发表回复
你还没有登录,请先 登录或 注册!