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

扫一扫,访问微社区

项目源码

关注:1436

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

查看: 1016|回复: 17

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

[复制链接]  [移动端链接]
6蛮牛粉丝
1199/1500
排名
2338
昨日变化
10

10

主题

183

帖子

1199

积分

Rank: 6Rank: 6Rank: 6

UID
252607
好友
5
蛮牛币
3112
威望
0
注册时间
2017-11-5
在线时间
420 小时
最后登录
2018-11-17
发表于 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, 下载次数: 32)

回复

使用道具 举报

5熟悉之中
841/1000
排名
3060
昨日变化
11

2

主题

76

帖子

841

积分

Rank: 5Rank: 5

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

回复 支持 反对

使用道具 举报

2初来乍到
103/150
排名
19275
昨日变化
8

0

主题

37

帖子

103

积分

Rank: 2Rank: 2

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

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1199/1500
排名
2338
昨日变化
10

10

主题

183

帖子

1199

积分

Rank: 6Rank: 6Rank: 6

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

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

回复 支持 反对

使用道具 举报

3偶尔光临
267/300
排名
33783
昨日变化
13

0

主题

198

帖子

267

积分

Rank: 3Rank: 3Rank: 3

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

回复 支持 反对

使用道具 举报

7日久生情
1811/5000
排名
2241
昨日变化
2

5

主题

719

帖子

1811

积分

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

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

回复

使用道具 举报

5熟悉之中
885/1000
排名
6010
昨日变化
41

0

主题

515

帖子

885

积分

Rank: 5Rank: 5

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

回复 支持 反对

使用道具 举报

7日久生情
2634/5000
排名
2583
昨日变化
2

0

主题

1762

帖子

2634

积分

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

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

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1355/1500
排名
2806
昨日变化

3

主题

253

帖子

1355

积分

Rank: 6Rank: 6Rank: 6

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

回复 支持 反对

使用道具 举报

7日久生情
2634/5000
排名
2583
昨日变化
2

0

主题

1762

帖子

2634

积分

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

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

回复 支持 反对

使用道具 举报

5熟悉之中
769/1000
排名
6140
昨日变化
4

9

主题

315

帖子

769

积分

Rank: 5Rank: 5

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

回复

使用道具 举报

排名
46568
昨日变化
10

0

主题

9

帖子

14

积分

Rank: 1

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

回复 支持 反对

使用道具 举报

7日久生情
1555/5000
排名
3437
昨日变化
15

2

主题

829

帖子

1555

积分

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

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

回复 支持 反对

使用道具 举报

4四处流浪
361/500
排名
7159
昨日变化
53

0

主题

38

帖子

361

积分

Rank: 4

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

回复 支持 反对

使用道具 举报

7日久生情
1971/5000
排名
2151
昨日变化

147

主题

559

帖子

1971

积分

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

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

回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

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