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

扫一扫,访问微社区

项目源码

关注:1418

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

查看: 816|回复: 17

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

[复制链接]  [移动端链接]
6蛮牛粉丝
1027/1500
排名
2734
昨日变化
13

9

主题

153

帖子

1027

积分

Rank: 6Rank: 6Rank: 6

UID
252607
好友
5
蛮牛币
2853
威望
0
注册时间
2017-11-5
在线时间
375 小时
最后登录
2018-9-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, 下载次数: 26)

回复

使用道具 举报

5熟悉之中
748/1000
排名
3513
昨日变化
32

2

主题

75

帖子

748

积分

Rank: 5Rank: 5

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

回复 支持 反对

使用道具 举报

排名
19535
昨日变化
15

0

主题

34

帖子

96

积分

Rank: 2Rank: 2

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

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1027/1500
排名
2734
昨日变化
13

9

主题

153

帖子

1027

积分

Rank: 6Rank: 6Rank: 6

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

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

回复 支持 反对

使用道具 举报

3偶尔光临
172/300
排名
37832
昨日变化
25

0

主题

133

帖子

172

积分

Rank: 3Rank: 3Rank: 3

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

回复 支持 反对

使用道具 举报

7日久生情
1743/5000
排名
2406
昨日变化
19

5

主题

710

帖子

1743

积分

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

UID
239879
好友
1
蛮牛币
3679
威望
0
注册时间
2017-8-26
在线时间
474 小时
最后登录
2018-9-20
发表于 2018-7-10 16:14:11 | 显示全部楼层

回复

使用道具 举报

5熟悉之中
726/1000
排名
7035
昨日变化
93

0

主题

431

帖子

726

积分

Rank: 5Rank: 5

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

回复 支持 反对

使用道具 举报

7日久生情
2584/5000
排名
2774
昨日变化
5

0

主题

1764

帖子

2584

积分

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

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

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1265/1500
排名
2942
昨日变化
23

3

主题

243

帖子

1265

积分

Rank: 6Rank: 6Rank: 6

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

回复 支持 反对

使用道具 举报

7日久生情
2584/5000
排名
2774
昨日变化
5

0

主题

1764

帖子

2584

积分

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

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

回复 支持 反对

使用道具 举报

5熟悉之中
646/1000
排名
7654
昨日变化
149

8

主题

288

帖子

646

积分

Rank: 5Rank: 5

UID
285521
好友
0
蛮牛币
989
威望
0
注册时间
2018-6-12
在线时间
190 小时
最后登录
2018-9-20
发表于 2018-7-14 15:33:27 | 显示全部楼层

回复

使用道具 举报

排名
45697
昨日变化
14

0

主题

9

帖子

14

积分

Rank: 1

UID
291506
好友
0
蛮牛币
13
威望
0
注册时间
2018-7-27
在线时间
1 小时
最后登录
2018-7-31
发表于 2018-7-27 17:31:32 | 显示全部楼层
666666666666666

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1427/1500
排名
3673
昨日变化
32

2

主题

761

帖子

1427

积分

Rank: 6Rank: 6Rank: 6

UID
209046
好友
0
蛮牛币
2084
威望
0
注册时间
2017-3-30
在线时间
290 小时
最后登录
2018-9-19
发表于 2018-7-27 19:19:55 | 显示全部楼层
不错,不必放在Plugins文件夹下
[发帖际遇]: sunkai 在论坛发帖时没有注意,被小偷偷去了 1 蛮牛币. 幸运榜 / 衰神榜

回复 支持 反对

使用道具 举报

3偶尔光临
237/300
排名
10160
昨日变化
228

0

主题

33

帖子

237

积分

Rank: 3Rank: 3Rank: 3

UID
257307
好友
0
蛮牛币
496
威望
0
注册时间
2017-12-1
在线时间
98 小时
最后登录
2018-9-19
发表于 2018-8-2 15:30:11 | 显示全部楼层
成功实现了,感谢楼主
[发帖际遇]: 和平源于力量 乐于助人,奖励 1 蛮牛币. 幸运榜 / 衰神榜

回复 支持 反对

使用道具 举报

7日久生情
1952/5000
排名
2106
昨日变化

145

主题

552

帖子

1952

积分

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

UID
45216
好友
5
蛮牛币
64
威望
0
注册时间
2014-9-16
在线时间
639 小时
最后登录
2018-9-20
QQ
发表于 2018-8-9 11:38:28 | 显示全部楼层
跨平台吗? Wimdows/Android/iOS三端

回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

站长推荐 上一条 /1 下一条

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