12 第1页 | 共2 页下一页
返回列表 发新帖
查看: 8351|回复: 12
打印 上一主题 下一主题

Unity3d脚本之间互相调用

[复制链接]

5552

主题

2

听众

8万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
11

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2011-11-11 15:08:00 |只看该作者 |倒序浏览


           简洁明了的一篇基础教程,对脚本使用比较陌生的新手可以学习下!
           

            unity3d可以用脚本实现不少功能,把咱们的学习难度降到很低了,基本上只要会C++,就可以参照Unity3D的脚本说明,编写脚本,不可谓不方便,虽然Unity3d脚本使用C#或者JavaScript,但是如果你会C++,相信C#难不到你。
         

               Unity3d的对象可以添加很多脚本,脚本与脚本之间怎么联系呢,下面用个简单的例子说明下,希望能帮到大家。
           






            
           

           比如一个场景中有3个对象,现在我想通过control对象控制pall
           


            _
           
           1和pall
           
            _
           
           2显示不同图片。(pall
           
            _
           
           1和pall
           
            _
           
           2是2个Cube)
         

           对象pall
           
            _
           
           1和pall
           
            _
           
           2所做的是同一件事情,只是可能图片不同,所以我们可以给他们添加同一个脚本SetPhoto.cs,这个脚本所完成的就是更改图片,设置图片数组,设置对象的标签,已经写注释了,相信都能看明白。
         

           /------------------------ SetPhoto.cs --------------------------------------------/
         

           using UnityEngine;
         

           using System.Collections;
         

           public class SetPhoto : MonoBehaviour {
         

               //图片数组
         

               public Texture [] photos;
         

               //数组指针
         

               private int index = 0;
         

               //字符标签,用户控制填写
         

               public string tag;
         

            
         

           // Use this for initialization
         

           void Start () {
         

                   //初始化对象的标签
         

                   gameObject.tag = tag;  
         

                   //判定数组是否为空,不为空指定默认图片
         

                   if (photos.Length > 0)
         

                       renderer.material.mainTexture = photos[index % photos.Length];
         

                   else
         

                       Debug.Log("error!! Array is null!");
         

           }
         

           // Update is called once per frame
         

           void Update () {
         

           }
         

               //提供外部调用的接口函数
         

               public void SetPhotos()
         

               {
         

                   //改变图片编号
         

                   index++;
         

                   if (photos.Length > 0)
         

                       renderer.material.mainTexture = photos[index % photos.Length];
         

                   else
         

                       Debug.Log("error!! Array is null!");
         

               }
         

           }
         

           /------------------------ SetPhoto.cs  end --------------------------------------------/
         

           我们把脚本附加给pall
           
            _
           
           1和pall
           
            _
           
           2对象,就会像下面那样。
         

            
           









           注意给每个对象设置不同标签,这样我们好找到对象。
         

           ps:一定要先给场景增加标签,否则系统识别不出来的。
         




           点击Tag,里面有个add Tag,选择增加标签......
         

            
         

            
           


           增加咱们需要的标签.......
         

           然后我们给Control对象附加一个脚本,用它来控制那2个对象,脚本名:controls.cs
         

           /------------------------ controls.cs --------------------------------------------/
         

           using UnityEngine;
         

           using System.Collections;
         

           public class controls : MonoBehaviour {
         

           // 首先创建2个对象
         

               private GameObject myobj;
         

               private GameObject myobj2;
         

           void Start () {
         

                   //获得不同标签的对象
         

                   myobj = GameObject.FindWithTag("wall
           
            _
           
           1");
         

                   myobj2 = GameObject.FindWithTag("wall
           
            _
           
           2");
         

           }
         

           // Update is called once per frame
         

           void Update () {
         

                   //弹开F键要做什么
         

                   if (Input.GetKeyUp("f"))
         

                   {
         

                       //获得标签1附加的脚本对象
         

                       SetPhoto s = myobj.GetComponent();
         

                       //调用脚本的函数
         

                       s.SetPhotos();
         

                   }
         

                 if (Input.GetKeyUp("s"))
         

                   {
         

                       //获得标签2附加的脚本对象
         

                       SetPhoto s2 = myobj2.GetComponent();
         

                       //调用脚本的函数
         

                       s2.SetPhotos();
         

                   }
         

           }
         

           }
         

           /------------------------ controls.cs end ---------------------------------------/
         

           这个脚本实现的功能就是首先找到pall
           
            _
           
           1和pall
           
            _
           
           2对象,然后调用给他们附加的SetPhoto脚本中的SetPhotos方法,用来改变2个矩形显示不同的图片.
         

            
         




           大家可以试验下,按下F键和S键将会改变矩形显示的图片,很简单吧,欢迎大家跟我交流经验
           

            
         
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

1023

主题

3

听众

359

积分

设计实习生

Rank: 2

纳金币
335582
精华
0

最佳新人

沙发
发表于 2012-1-26 23:21:31 |只看该作者
新年新气象,我来把歌唱:祝你身体棒,来年不发胖;家和万事畅,心花怒绽放;事业无风浪,生意蒸蒸上;要是把我忘,就找你算账。新年快乐!
回复

使用道具 举报

tc    

5089

主题

1

听众

33万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

板凳
发表于 2012-1-27 23:31:06 |只看该作者
我想要昙花永不凋谢常开人间,我想要冬天阳光明媚融冰化雪,我想要流星永不消失点缀夜空,我更想要你在新的一年里开心天天!
回复

使用道具 举报

1023

主题

3

听众

359

积分

设计实习生

Rank: 2

纳金币
335582
精华
0

最佳新人

地板
发表于 2012-2-5 23:26:38 |只看该作者
心中有爱,爱咋咋地
回复

使用道具 举报

462

主题

1

听众

31万

积分

首席设计师

Rank: 8Rank: 8

纳金币
2
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

5#
发表于 2012-3-1 23:18:26 |只看该作者
灌水。。。
回复

使用道具 举报

1023

主题

3

听众

359

积分

设计实习生

Rank: 2

纳金币
335582
精华
0

最佳新人

6#
发表于 2012-6-1 23:26:36 |只看该作者
读铁系缘分,顶铁系友情
回复

使用道具 举报

1023

主题

3

听众

359

积分

设计实习生

Rank: 2

纳金币
335582
精华
0

最佳新人

7#
发表于 2012-7-4 23:27:36 |只看该作者
好`我顶``顶顶
回复

使用道具 举报

5969

主题

1

听众

39万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

8#
发表于 2012-7-13 23:22:18 |只看该作者
不错 非常经典  实用
回复

使用道具 举报

1023

主题

3

听众

359

积分

设计实习生

Rank: 2

纳金币
335582
精华
0

最佳新人

9#
发表于 2012-7-14 23:26:46 |只看该作者
心中有爱,爱咋咋地
回复

使用道具 举报

1023

主题

3

听众

359

积分

设计实习生

Rank: 2

纳金币
335582
精华
0

最佳新人

10#
发表于 2012-7-28 23:19:11 |只看该作者
“再次路过……”我造一个-----特别路过
回复

使用道具 举报

12 第1页 | 共2 页下一页
返回列表 发新帖
您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2025-7-28 08:14 , Processed in 0.175570 second(s), 28 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部