查看: 1926|回复: 9
打印 上一主题 下一主题

unity3d中两种语言的对比JavaScript vs C#第二节

[复制链接]

5552

主题

2

听众

8万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
11

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

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


           接上一教程, 在上一教程中主要对比了javascript和c#两种语言的基础知识点的区别,在这一节中作者主要对二者访问和控制场景对象及对象组件属性方面的异同进行了阐述,推荐大家阅读!
         

           art 2 of a post series that tries to explain the differences betweenJavaScript and C# when programming for the unity3d game engine. It is recommended that you read part one before continuing. In this post, I will explain how to access other GameObjects and Components. This is one of he most common tasks that a programmer has to perform when writing scripts for Unity3D game engine. So, let’s start by assuming that we want to retrieve a GameObject named ‘Pawn’ which is at the root of the scene and has a script called ‘PawnMover’ attached to it.
         

           Getting the GameObject using JavaScript is simple. All you have to do is to call the GameObject class Find() static method and pass the name of the other GameObject we want as a parameter:
         

           private var pawnGO:GameObject;    function Awake()    {        pawnGO = GameObject.Find("awn");  
         

           }
         

           This is how you do it with JavaScript. With C#, it will be very similar:
         

           using UnityEngine;
         

           using System.Collections;
         

           public class PawnGetter : MonoBehaviour
         

           {
         

               private GameObject pawnGO;
         

               void Awake ()
         

               {
         

                   pawnGO = GameObject.Find("awn");
         

               }
         

           }
         

           Without considering the two programming languages different notations and reserved keywords, the code is exactly the same (line 4 in the first block is the same as line 8 at the second). This makes sense, because it doesn’t matter if the code is strongly typed or weakly typed,GameObject.Find() method always returns a GameObject.
         

           Now, let’s see how to get a Component inside a GameObject. Again, assuming the same ‘Pawn’GameObject with a ‘PawnMover’ component attached to it, here is how to get the ‘PawnMover’ Component from another GameObject, using JavaScript:
         

           private var pawnGO:GameObject;
         

           private var pmSCawnMover;
         

           function Awake()
         

           {
         

               pawnGO = GameObject.Find("awn");
         

               pmSC = pawnGO.GetComponent("awnMover");
         

           }
         

           Basically, to get the ‘PawnMover’ Component, all we needed to do is to call the GetComponent() method from the pawnGO GameObject and pass the desired component’s name as a parameter. Instead of the name, we could also have passed the type of the Component as the parameter but, for the above example, the name will do. This method returns a Component, and since JavaScript is weakly typed, we don’t have to cast the resulting Component to the PawnMover class. The same script in C# will be:
         

           using UnityEngine;
         

           using System.Collections;
         

           public class PawnGetter : MonoBehaviour
         

           {
         

               private GameObject pawnGO;
         

               private PawnMover pmSC;
         

               void Awake()
         

               {
         

                   pawnGO = GameObject.Find("awn");
         

                   //returns a CS0266 error
         

                   pmSC = pawnGO.GetComponent("awnMover");//<=returns a CS0266 error
         

                   //this is the right way to do it when using C#
         

                   pmSC = pawnGO.GetComponent< PawnMover >();
         

               }
         

           }
         

            
         

           With C#, it isn’t possible to just call the GetComponent() method and pass the component’s name as a parameter, since it causes a CS0266 error, meaning that C# can’t implicitly convert from one type another. That’s because C# is strongly typed, so we can’t convert from Component to PawnMover without a cast. That’s why we need to make a generic method call passing the type, thus, enforcing that the GetComponent() method returns a ‘PawnMover’ object instead of a Component.
         

           That was a long post, but I hope there was something useful there. The next part of this series will explain some of the differences between JavaScript and C# when programming a script that moves a GameObject, which you can read here: Part 3 – Moving a GameObject.
         
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

462

主题

1

听众

31万

积分

首席设计师

Rank: 8Rank: 8

纳金币
2
精华
0

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

沙发
发表于 2012-2-5 23:24:46 |只看该作者
好`我顶``顶顶
回复

使用道具 举报

462

主题

1

听众

31万

积分

首席设计师

Rank: 8Rank: 8

纳金币
2
精华
0

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

板凳
发表于 2012-2-21 23:23:46 |只看该作者
赞一个,哈哈
回复

使用道具 举报

1023

主题

3

听众

359

积分

设计实习生

Rank: 2

纳金币
335582
精华
0

最佳新人

地板
发表于 2012-3-19 23:25:19 |只看该作者
我是老实人,我来也!
回复

使用道具 举报

   

671

主题

1

听众

3247

积分

中级设计师

Rank: 5Rank: 5

纳金币
324742
精华
0

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

5#
发表于 2012-6-19 23:18:31 |只看该作者
顶!学习了!阅!
回复

使用道具 举报

tc    

5089

主题

1

听众

33万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
0

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

6#
发表于 2012-6-20 23:24:57 |只看该作者
非常感谢,管理员设置了需要对新回复进行审核,您的帖子通过审核后将被显示出来,现在将转入主题
回复

使用道具 举报

1023

主题

3

听众

359

积分

设计实习生

Rank: 2

纳金币
335582
精华
0

最佳新人

7#
发表于 2012-8-17 00:07:21 |只看该作者
加精、加亮滴铁子,尤其要多丁页丁页
回复

使用道具 举报

   

671

主题

1

听众

3247

积分

中级设计师

Rank: 5Rank: 5

纳金币
324742
精华
0

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

8#
发表于 2012-9-20 23:26:23 |只看该作者
有意思!学习了!
回复

使用道具 举报

tc    

5089

主题

1

听众

33万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
0

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

9#
发表于 2012-12-6 23:21:37 |只看该作者
跑着去顶朋友滴铁
回复

使用道具 举报

5969

主题

1

听众

39万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
0

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

10#
发表于 2013-2-2 23:27:37 |只看该作者
心中有爱,爱咋咋地
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

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

GMT+8, 2024-11-23 23:17 , Processed in 0.093084 second(s), 28 queries .

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

© 2008-2019 Narkii Inc.

回顶部