纳金网

标题: Unity3D中JavaScript与C#对比(三) [打印本页]

作者: yeu1233    时间: 2012-9-5 14:06
标题: Unity3D中JavaScript与C#对比(三)
这系列第三节,解释JavaScript和C#在Unity3d游戏引擎中编程时有什么不同。建议你最好先去阅读第一和第二节,方便理解这节内容。



在第三节中,主要讲解用JavaScript和C#让一个GameObject向前移动有什么不同。现在我们来看一段使用JavaScript让一个GameObject向前移动的代码:



public var goTransform : Transform;

private var vel : int = 2;//how fast the game object is being moved



function Awake()  

{

//get this GameObject's Transform

goTransform = this.GetComponent(Transform);

}



// Update is called once per frame

functionUpdate()  

{

//moves the containing GameObject forward

goTransform.position.z= goTransform.position.z+ vel;

}



把这个脚本的目的是在每一个更新周期使goTransform的z轴坐标增加来控制让goTransform向前移动的,现在让我们看看用C#编写代码会是什么样的:



using UnityEngine;  

usingSystem.Collections;  

public classPawnMover : MonoBehaviour

{

public Transform goTransform;  

privateint vel = 2;//how fast the game object is being moved



void Awake()

{  

            //get this GameObject's Transform

goTransform = this.GetComponent<Transform>();  

}   



// Update is called once per frame

void Update()  

{  

//returns a CS1612 error

goTransform.position.z=goTransform.position.z+ vel;//<=returns a CS1612 error

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

goTransform.Translate(Vector3.forward * vel);//moves the containing GameObject forward



}

}  



这 里我们可以看到,在C#中不能像JavaScript脚本中那样直接改变goTransform的z轴坐标值来移动,这样会产生CS1612error, 因为我们是要改变一个值而不是引用该值。为了避免这个错误,在用C#编写脚本时,我们用方法移动GameObejct,比如Translate()、 Rotate()、 RotateAround()等等。这些方法都是Transform类得公共成员变量。

这节我希望我已经清楚的解释了两种语言在Untiy3D中编程时有什么不同,不要忘了第四章,我会告诉你JavaScript和C#执行暂停代码有什么不同。




欢迎光临 纳金网 (http://rs.narkii.com/club/) Powered by Discuz! X2.5