开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

问答求助

关注:471

当前位置:游戏蛮牛 技术专区 问答求助

_____________________________________________________________________________________________________________
问答求助版块规则:

  1、问题尽量描述清楚
      2、代码要放在代码块里
      3、附件最好放到云盘,然后把链接放到TXT文档里,上传TXT文档。【最好没有附件,你懂得】
      4、本版块回复不得无意义,如:顶、呵呵、不错......以及擦边!【真的会扣分的哦】严重者,封IP!
      5、问题得到解决,请选择最佳答案。
      6、若问题是你自己解决了,可以联系管理员,返还蛮牛币,写下你的答案,另有蛮牛币奖赏。
_____________________________________________________________________________________________________________
查看: 416|回复: 8

[脚本] 如何把脚本不挂在对象上,而使得场景中对象能够执行脚本中的功能

[复制链接]  [移动端链接]
5熟悉之中
546/1000
排名
4881
昨日变化
2

15

主题

123

帖子

546

积分

Rank: 5Rank: 5

UID
148479
好友
1
蛮牛币
707
威望
0
注册时间
2016-5-13
在线时间
187 小时
最后登录
2017-10-18
发表于 2017-1-10 15:07:00 | 显示全部楼层 |阅读模式
5蛮牛币
程序中脚本有很多,有时候挂来挂去,看上去感觉很乱,有没有什么办法,把脚本和对象分离,还使得场景中对象能够执行脚本呢


回复

使用道具 举报

5熟悉之中
584/1000
排名
5130
昨日变化
2

17

主题

189

帖子

584

积分

Rank: 5Rank: 5

UID
167572
好友
5
蛮牛币
2255
威望
0
注册时间
2016-9-8
在线时间
172 小时
最后登录
2017-5-18
发表于 2017-1-10 15:51:42 | 显示全部楼层
继承继承继承继承继承

回复

使用道具 举报

6蛮牛粉丝
1244/1500
排名
5179
昨日变化
5

2

主题

775

帖子

1244

积分

Rank: 6Rank: 6Rank: 6

UID
92518
好友
1
蛮牛币
2464
威望
0
注册时间
2015-4-15
在线时间
277 小时
最后登录
2017-4-6
发表于 2017-1-10 16:04:04 | 显示全部楼层
我记得unity里,好像所有东西都要依赖组件才能运行,如果不是所有,至少大多数都要,所以脚本要挂在GameObject上才能执行,特别是继承了MonoBehaviour的脚本,如果你的脚本在场景中只存在一个,可以使用単例
public class Comm : MonoBehaviour
    {
        private static Comm _instance;

        public static Comm instance
        {
            get
            {
                if (FindObjectOfType<Comm>() == null)
                {
                    GameObject Game = new GameObject("Comm");
                    Game.AddComponent<Comm>();
                    _instance = Game.GetComponent<Comm>();
                }
                else
                {
                    _instance = FindObjectOfType<Comm>();
                }
                return _instance;
            }
        }
        public void AA()
        {
            print("AAA");
        }
}
像这样,这个脚本不需要放进场景里,要用的时候Comm.instance.AAA();就可以了

回复

使用道具 举报

7日久生情
1728/5000
排名
1829
昨日变化
11

11

主题

571

帖子

1728

积分

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

UID
116338
好友
9
蛮牛币
5352
威望
0
注册时间
2015-8-2
在线时间
552 小时
最后登录
2017-10-17
发表于 2017-1-10 21:44:39 | 显示全部楼层
脚本挂在go上正是unity特色啊兄弟

回复

使用道具 举报

5熟悉之中
546/1000
排名
4881
昨日变化
2

15

主题

123

帖子

546

积分

Rank: 5Rank: 5

UID
148479
好友
1
蛮牛币
707
威望
0
注册时间
2016-5-13
在线时间
187 小时
最后登录
2017-10-18
 楼主| 发表于 2017-1-11 09:28:01 | 显示全部楼层
颤抖的舒肤佳 发表于 2017-1-10 21:44
脚本挂在go上正是unity特色啊兄弟

但是挂来挂去,感觉很不简洁,所以想着把他们分开

回复

使用道具 举报

7日久生情
1728/5000
排名
1829
昨日变化
11

11

主题

571

帖子

1728

积分

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

UID
116338
好友
9
蛮牛币
5352
威望
0
注册时间
2015-8-2
在线时间
552 小时
最后登录
2017-10-17
发表于 2017-1-11 09:41:31 | 显示全部楼层
不嫌弃麻烦与小费就写一个类去为你需要的物体赋值控制(获取某一物体,或者将某些必要的脚本挂在go上)。

回复

使用道具 举报

7日久生情
1983/5000
排名
995
昨日变化
1

3

主题

407

帖子

1983

积分

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

UID
46577
好友
1
蛮牛币
2407
威望
0
注册时间
2014-9-24
在线时间
699 小时
最后登录
2017-10-18
发表于 2017-1-11 09:49:16 | 显示全部楼层
如上所说,使用单例不需要在编辑模式下存在,只有在游戏调用的时候才会创建并且调用,由于继承了MonoBehaviour因此必须要实例化才能使用类和函数。
当然,你也可以使用全局静态函数,我就经常直接创建一个全局静态类脚本无所谓既不继承MonoBehaviour,全部都是静态函数可以随时随地的调用

回复

使用道具 举报

5熟悉之中
520/1000
排名
5093
昨日变化
2

3

主题

102

帖子

520

积分

Rank: 5Rank: 5

UID
156228
好友
0
蛮牛币
1402
威望
0
注册时间
2016-7-11
在线时间
185 小时
最后登录
2017-9-27

七夕浪漫情人

发表于 2017-1-11 11:51:57 | 显示全部楼层
将你的不继承MonoBehaviour的方法全部写成静态放在一个public类中,然后新生成一个gameobject,把所以继承了MonoBehaviour的脚本挂在上面,每个脚本再Awake的时候Find对应的对象就可以了,不过不推荐,哈哈

回复

使用道具 举报

7日久生情
1514/5000
排名
1760
昨日变化
4

8

主题

277

帖子

1514

积分

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

UID
188595
好友
1
蛮牛币
6052
威望
0
注册时间
2016-12-1
在线时间
593 小时
最后登录
2017-10-17
发表于 2017-1-11 21:57:51 | 显示全部楼层
简单得很,你先给你想操作的物体添加自定义的tag,用GameObject   player  =  Gameobject.FindWithTag(“tag名字”),以后就可以对那个player来写操作函数,把这个脚本挂在scene面板的任何物体哪里都行
[发帖际遇]: 风之舞 在网吧通宵,花了 2 蛮牛币. 幸运榜 / 衰神榜

回复

使用道具 举报

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

本版积分规则

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