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

扫一扫,访问微社区

项目源码

关注:1405

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

查看: 659|回复: 17
发新帖

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

[复制链接]  [移动端链接]
5熟悉之中
968/1000
排名
2945
昨日变化
15

9

主题

151

帖子

968

积分

Rank: 5Rank: 5

UID
252607
好友
3
蛮牛币
2734
威望
0
注册时间
2017-11-5
在线时间
356 小时
最后登录
2018-8-23
跳转到指定楼层
楼主
发表于 2018-7-9 23:57:00 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

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

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


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


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



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



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




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

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
    }
}




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


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


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










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

回复

使用道具 举报

5熟悉之中
682/1000
排名
3916
昨日变化
14

2

主题

74

帖子

682

积分

Rank: 5Rank: 5

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

回复 支持 反对

使用道具 举报

排名
20026
昨日变化
16

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熟悉之中
968/1000
排名
2945
昨日变化
15

9

主题

151

帖子

968

积分

Rank: 5Rank: 5

UID
252607
好友
3
蛮牛币
2734
威望
0
注册时间
2017-11-5
在线时间
356 小时
最后登录
2018-8-23
地板
 楼主| 发表于 2018-7-10 10:18:29 | 只看该作者
karsion 发表于 2018-7-10 09:55
发现一个小问题:
C#库是不用放到Plugins文件及里面的。
C++库才是插件,放到任意层级的Plugins文件夹都可 ...

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

回复 支持 反对

使用道具 举报

2初来乍到
143/150
排名
45215
昨日变化
38

0

主题

114

帖子

143

积分

Rank: 2Rank: 2

UID
247666
好友
0
蛮牛币
17
威望
0
注册时间
2017-10-9
在线时间
25 小时
最后登录
2018-8-22
5#
发表于 2018-7-10 16:01:42 | 只看该作者
笑嘻嘻笑嘻嘻笑嘻嘻笑嘻嘻系

回复 支持 反对

使用道具 举报

7日久生情
1605/5000
排名
2652
昨日变化
16

5

主题

663

帖子

1605

积分

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

UID
239879
好友
1
蛮牛币
3169
威望
0
注册时间
2017-8-26
在线时间
437 小时
最后登录
2018-8-23
6#
发表于 2018-7-10 16:14:11 | 只看该作者

回复

使用道具 举报

5熟悉之中
636/1000
排名
7885
昨日变化
70

0

主题

382

帖子

636

积分

Rank: 5Rank: 5

UID
254705
好友
0
蛮牛币
541
威望
0
注册时间
2017-11-16
在线时间
108 小时
最后登录
2018-8-23
7#
发表于 2018-7-10 16:21:24 | 只看该作者
6666666666666666666666666666666

回复 支持 反对

使用道具 举报

7日久生情
2535/5000
排名
2983
昨日变化
14

0

主题

1764

帖子

2535

积分

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

UID
258739
好友
0
蛮牛币
4978
威望
0
注册时间
2017-12-9
在线时间
321 小时
最后登录
2018-8-23
8#
发表于 2018-7-11 11:17:27 | 只看该作者
看起来很不错,感谢楼主分享!!!

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1213/1500
排名
3079
昨日变化
16

3

主题

238

帖子

1213

积分

Rank: 6Rank: 6Rank: 6

UID
18138
好友
1
蛮牛币
276
威望
0
注册时间
2014-3-19
在线时间
538 小时
最后登录
2018-8-23
9#
发表于 2018-7-13 17:04:27 | 只看该作者
动态库是干啥用的
[发帖际遇]: hottie 在论坛发帖时没有注意,被小偷偷去了 2 蛮牛币. 幸运榜 / 衰神榜

回复 支持 反对

使用道具 举报

7日久生情
2535/5000
排名
2983
昨日变化
14

0

主题

1764

帖子

2535

积分

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

UID
258739
好友
0
蛮牛币
4978
威望
0
注册时间
2017-12-9
在线时间
321 小时
最后登录
2018-8-23
10#
发表于 2018-7-14 12:04:46 | 只看该作者
看起来很不错,感谢楼主分享!!!

回复 支持 反对

使用道具 举报

5熟悉之中
509/1000
排名
9828
昨日变化
221

7

主题

250

帖子

509

积分

Rank: 5Rank: 5

UID
285521
好友
0
蛮牛币
845
威望
0
注册时间
2018-6-12
在线时间
140 小时
最后登录
2018-8-24
11#
发表于 2018-7-14 15:33:27 | 只看该作者

回复

使用道具 举报

排名
45215
昨日变化
38

0

主题

9

帖子

14

积分

Rank: 1

UID
291506
好友
0
蛮牛币
13
威望
0
注册时间
2018-7-27
在线时间
1 小时
最后登录
2018-7-31
12#
发表于 2018-7-27 17:31:32 | 只看该作者
666666666666666

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1350/1500
排名
3803
昨日变化
15

2

主题

719

帖子

1350

积分

Rank: 6Rank: 6Rank: 6

UID
209046
好友
0
蛮牛币
1938
威望
0
注册时间
2017-3-30
在线时间
273 小时
最后登录
2018-8-23
13#
发表于 2018-7-27 19:19:55 | 只看该作者
不错,不必放在Plugins文件夹下
[发帖际遇]: sunkai 在论坛发帖时没有注意,被小偷偷去了 1 蛮牛币. 幸运榜 / 衰神榜

回复 支持 反对

使用道具 举报

2初来乍到
140/150
排名
15235
昨日变化
667

0

主题

27

帖子

140

积分

Rank: 2Rank: 2

UID
257307
好友
0
蛮牛币
190
威望
0
注册时间
2017-12-1
在线时间
64 小时
最后登录
2018-8-23
14#
发表于 2018-8-2 15:30:11 | 只看该作者
成功实现了,感谢楼主
[发帖际遇]: 和平源于力量 乐于助人,奖励 1 蛮牛币. 幸运榜 / 衰神榜

回复 支持 反对

使用道具 举报

7日久生情
1947/5000
排名
2083
昨日变化

145

主题

550

帖子

1947

积分

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

UID
45216
好友
5
蛮牛币
53
威望
0
注册时间
2014-9-16
在线时间
638 小时
最后登录
2018-8-21
15#
发表于 2018-8-9 11:38:28 | 只看该作者
跨平台吗? Wimdows/Android/iOS三端

回复 支持 反对

使用道具 举报

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

本版积分规则

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