纳金网
标题:
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