游戏蛮牛学习群(纯技术交流,不闲聊):539178957
游戏蛮牛 手机端
开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

项目源码

关注:1387

当前位置:游戏蛮牛 资源专区 项目源码

查看: 243|回复: 10

[Unity] 创建自己的动态链接库(.dll文件)

[复制链接]  [移动端链接]
5熟悉之中
865/1000
排名
3399
昨日变化
13

9

主题

148

帖子

865

积分

Rank: 5Rank: 5

UID
252607
好友
1
蛮牛币
2486
威望
0
注册时间
2017-11-5
在线时间
318 小时
最后登录
2018-7-18
发表于 2018-7-9 23:57:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
本帖最后由 RyeCat 于 2018-7-10 00:09 编辑

1.如图,打开VS,建立c#的类库文件。
1.png

2.找到unity 3d的安装目录依次打开目录Unity\Editor\Data\Managed,找到UnityEngine.dll
2.png 并将其复制到VS工程下 3.png
在vs中添加引用,打开解决方案资源管理器。鼠标右键点击引用。选择添加引
4.png

选择“浏览”,找到刚才的UnityEngine.dll,添加。
5.png


3.然后就可以添加命名空间UnityEngine和继承MonoBehaviour
6.png


点击VS菜单栏里的“项目”-->“属性”,设置.NetFramework 版本,不同Unity版本支持的版本会有所不同
7.png

8.png

若设置完毕后,项目中有警告,将报警告的引用删除即可。

4.之后就可以根据自己的需求进行脚本编写,现在以一个音乐音效管理类为例
[C#] 纯文本查看 复制代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

namespace AudioUtility
{
    public class AudioManager : MonoBehaviour
    {


        private static AudioManager instance;
        public static AudioManager Instance
        {
            get
            {
                if (instance == null)
                {
                    GameObject GO = new GameObject("AudioManager");
                    DontDestroyOnLoad(GO);
                    instance = GO.AddComponent<AudioManager>();
                    instance._go = GO;
                    instance._musicAs = GO.AddComponent<AudioSource>();
                    instance._effectAs = new List<AudioSource>();
                }
                return instance;
            }
        }

        public bool MusicOn = true;//音乐是否开启
        public bool EffectOn = true;//音效是否开启

        private float _musicVolume = 1.0f;//音乐音量
        private float _effectVolume = 1.0f;//音效音量

        private GameObject _go;
        private AudioSource _musicAs;
        private List<AudioSource> _effectAs = new List<AudioSource>();

        /// <summary>
        /// 音乐音量
        /// </summary>
        public float MusicVolume
        {
            get { return _musicVolume; }
            set
            {
                if (_musicVolume != value)
                {
                    _musicVolume = value;
                    _musicAs.volume = _musicVolume;
                }
            }
        }

        /// <summary>
        /// 音效音量
        /// </summary>
        public float EffectVolume
        {
            get { return _effectVolume; }
            set
            {
                if (_effectVolume != value)
                {
                    _effectVolume = value;
                    foreach (AudioSource temp in _effectAs)
                    {
                        temp.volume = _effectVolume;
                    }
                }
            }
        }

        #region  背景音乐模块

        /// <summary>
        /// 播放背景音乐
        /// </summary>
        /// <param name="_music">背景音乐素材</param>
        /// <param name="_loop">是否循环</param>
        public void PlayMusic(AudioClip _music, bool _loop = true)
        {
            _musicAs.Stop();
            _musicAs.clip = _music;
            _musicAs.volume = MusicVolume;
            _musicAs.loop = _loop;
            if (MusicOn && Time.timeScale != 0)
            {
                _musicAs.Play();
            }
        }

        /// <summary>
        /// 停止播放背景音乐
        /// </summary>
        public void StopMusic()
        {
            _musicAs.Stop();
        }

        /// <summary>
        /// 暂停播放背景音乐
        /// </summary>
        public void PauseMusic()
        {
            _musicAs.Pause();
        }

        /// <summary>
        /// 重新播放背景音乐
        /// </summary>
        public void RepalyMusic()
        {
            if (MusicOn && Time.timeScale != 0)
            {
                _musicAs.Play();
            }
        }

        /// <summary>
        /// 是否正在播放指定音乐
        /// </summary>
        /// <param name="ac"></param>
        /// <returns></returns>
        public bool IsPlayingMusic(AudioClip ac)
        {
            return _musicAs.clip == ac && _musicAs.isPlaying;
        }
        #endregion


        #region  音效模块
        /// <summary>
        /// 播放音效
        /// </summary>
        /// <param name="_effect">音效素材</param>
        /// <param name="_loop">是否循环</param>
        /// <returns></returns>
        public AudioSource PlayEffect(AudioClip _effect, bool _loop = false)
        {
            AudioSource _as = _go.AddComponent<AudioSource>();

            _as.volume = EffectVolume;
            _as.clip = _effect;
            _as.loop = _loop;

            _effectAs.Add(_as);
            if (EffectOn && Time.timeScale != 0)
            {
                _as.Play();
            }
            if (!_loop)
            {
                StartCoroutine(DestoryMusic(_as, _effect.length));
            }


            return _as;
        }

        /// <summary>
        /// 销毁音效
        /// </summary>
        /// <param name="_as"></param>
        /// <param name="_delay"></param>
        /// <returns></returns>
        IEnumerator DestoryMusic(AudioSource _as, float _delay)
        {
            yield return new WaitForSeconds(_delay);
            Destroy(_as);
            _effectAs.Remove(_as);
        }

        /// <summary>
        /// 停止音效
        /// </summary>
        /// <param name="_as"></param>
        public void StopEffect(AudioSource _as)
        {
            StartCoroutine(DestoryMusic(_as, 0));
        }

        /// <summary>
        /// 停止所有音效
        /// </summary>
        public void StopAllEffects()
        {
            foreach (AudioSource temp in _effectAs)
            {
                temp.Stop();
            }
            ClearAllEffects();
        }

        /// <summary>
        /// 停止所有音效
        /// </summary>
        public void PauseAllEffects()
        {
            foreach (AudioSource temp in _effectAs)
            {
                temp.Pause();
            }
        }

        /// <summary>
        /// 重播所有音效
        /// </summary>
        public void ReplayAllEffects()
        {
            if (EffectOn && Time.timeScale != 0)
            {
                foreach (AudioSource temp in _effectAs)
                {
                    temp.Play();
                }
            }
        }

        /// <summary>
        /// 清理所有音效
        /// </summary>
        public void ClearAllEffects()
        {
            foreach (AudioSource temp in _effectAs)
            {
                Destroy(temp);
            }
            _effectAs.Clear();
        }

        /// <summary>
        /// 判断是否有已经在播放的音效
        /// </summary>
        /// <param name="ac">音效素材</param>
        /// <returns></returns>
        public bool IsPlayingEffect(AudioClip ac)
        {
            foreach (AudioSource temp in _effectAs)
            {
                if (temp.clip == ac && temp.isPlaying)
                {
                    return true;
                }
                else
                {
                    continue;
                }
            }
            return false;
        }
        #endregion
    }
}




编写完毕后,点击重新生成解决方案,即可完成动态库的创建
9.png

5.在VS工程Debug目录找到,生成的动态库文件,
10.png

在Unity工程Assets目录下中创建Plugins文件夹,将刚才的动态库文件拖入其中,就能够在代码中使用自己动态库。
11.png




12.png




最后将Demo奉上 下载地址.txt (70 Bytes, 下载次数: 8)

回复

使用道具 举报

5熟悉之中
558/1000
排名
4772
昨日变化
35

2

主题

73

帖子

558

积分

Rank: 5Rank: 5

UID
9302
好友
1
蛮牛币
1033
威望
0
注册时间
2013-12-1
在线时间
209 小时
最后登录
2018-7-18
发表于 2018-7-10 09:55:42 | 显示全部楼层
发现一个小问题:
C#库是不用放到Plugins文件及里面的。
C++库才是插件,放到任意层级的Plugins文件夹都可以。
[发帖际遇]: karsion 发帖时在路边捡到 1 蛮牛币,偷偷放进了口袋. 幸运榜 / 衰神榜

回复 支持 反对

使用道具 举报

排名
19772
昨日变化
6

0

主题

34

帖子

94

积分

Rank: 2Rank: 2

UID
157645
好友
0
蛮牛币
38
威望
0
注册时间
2016-7-19
在线时间
36 小时
最后登录
2018-7-10
发表于 2018-7-10 10:08:54 | 显示全部楼层
adgdfsgfdsgrewrgwgrgreg

回复 支持 反对

使用道具 举报

5熟悉之中
865/1000
排名
3399
昨日变化
13

9

主题

148

帖子

865

积分

Rank: 5Rank: 5

UID
252607
好友
1
蛮牛币
2486
威望
0
注册时间
2017-11-5
在线时间
318 小时
最后登录
2018-7-18
 楼主| 发表于 2018-7-10 10:18:29 | 显示全部楼层
karsion 发表于 2018-7-10 09:55
发现一个小问题:
C#库是不用放到Plugins文件及里面的。
C++库才是插件,放到任意层级的Plugins文件夹都可 ...

这个没测过,但是我一直是放在Plugins文件夹下的,回头试试

回复 支持 反对

使用道具 举报

2初来乍到
137/150
排名
44647
昨日变化
30

0

主题

109

帖子

137

积分

Rank: 2Rank: 2

UID
247666
好友
0
蛮牛币
23
威望
0
注册时间
2017-10-9
在线时间
24 小时
最后登录
2018-7-14
发表于 2018-7-10 16:01:42 | 显示全部楼层
笑嘻嘻笑嘻嘻笑嘻嘻笑嘻嘻系

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1449/1500
排名
3094
昨日变化
14

5

主题

627

帖子

1449

积分

Rank: 6Rank: 6Rank: 6

UID
239879
好友
1
蛮牛币
2597
威望
0
注册时间
2017-8-26
在线时间
389 小时
最后登录
2018-7-18

迈向小康

发表于 2018-7-10 16:14:11 | 显示全部楼层

回复

使用道具 举报

5熟悉之中
518/1000
排名
9065
昨日变化
85

0

主题

318

帖子

518

积分

Rank: 5Rank: 5

UID
254705
好友
0
蛮牛币
463
威望
0
注册时间
2017-11-16
在线时间
86 小时
最后登录
2018-7-17
发表于 2018-7-10 16:21:24 | 显示全部楼层
6666666666666666666666666666666

回复 支持 反对

使用道具 举报

7日久生情
2374/5000
排名
3365
昨日变化
11

0

主题

1681

帖子

2374

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
258739
好友
0
蛮牛币
4658
威望
0
注册时间
2017-12-9
在线时间
293 小时
最后登录
2018-7-18
发表于 7 天前 | 显示全部楼层
看起来很不错,感谢楼主分享!!!

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1126/1500
排名
3381
昨日变化
5

3

主题

226

帖子

1126

积分

Rank: 6Rank: 6Rank: 6

UID
18138
好友
1
蛮牛币
231
威望
0
注册时间
2014-3-19
在线时间
507 小时
最后登录
2018-7-18
发表于 5 天前 | 显示全部楼层
动态库是干啥用的
[发帖际遇]: hottie 在论坛发帖时没有注意,被小偷偷去了 2 蛮牛币. 幸运榜 / 衰神榜

回复 支持 反对

使用道具 举报

7日久生情
2374/5000
排名
3365
昨日变化
11

0

主题

1681

帖子

2374

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
258739
好友
0
蛮牛币
4658
威望
0
注册时间
2017-12-9
在线时间
293 小时
最后登录
2018-7-18
发表于 4 天前 | 显示全部楼层
看起来很不错,感谢楼主分享!!!

回复 支持 反对

使用道具 举报

3偶尔光临
211/300
排名
17431
昨日变化
494

3

主题

104

帖子

211

积分

Rank: 3Rank: 3Rank: 3

UID
285521
好友
0
蛮牛币
494
威望
0
注册时间
2018-6-12
在线时间
64 小时
最后登录
2018-7-17
发表于 4 天前 | 显示全部楼层

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

快速回复 返回顶部 返回列表