UnityScript快速入门

UnityScript原先被官方称作用于U3D的JavaScript,但是较新一些的文档都已经叫做UnityScript了,虽然JS的语法在UnityScript中几乎都可以使用,但是UnityScript是一种具有静态类型检查且更加OOP的JS,所以完全可以把UnityScript当做一门新语言来学,当然,如果已经学会了JS,那么想学会UnityScript是相当快的。相比跑在浏览器上的JS,UnityScript无论在身为语言的设计上还是在运行能力上都要远远优于前者。


这篇快速入门教程将会着重讲解UnityScript那些与JS不太一样的地方,所以会比较适合从JS转过来并且稍微有些编程基础的编程人员,如果没有JS的基础那么建议先学一下JS,如果连编程基础也没有,那建议你还是先不要碰什么游戏引擎了~(^ ^)~


Chapter-1 严格模式

一般UnityScript源码文件的第一行都要加上

#pragma strict
其实你也可以不加。加上的话会进入严格模式,这种模式会对JS超级随意的动态特性加以限制。

Chapter-2  为变量静态指定类型

UnityScript声明变量的方式和JS一样,都是用'var 变量名'的格式来声明变量,但是UnityScript中可以通过'var 变量名 :类型'的格式来为声明的变量指定明确的类型。下面是一些例子:

var num    :int = 1;                       //整数型变量
var str    :String = "hello UnityScript";  //字符串型变量
var player :GameObject;                    //游戏对象变量


Chapter-3 函数

因为UnityScript中可以为变量明确指定数据类型,所以可以再函数中为参数指定类型,而且也可以指定一个返回值

function Add(x :int, y :int) :int {
    return x + y;
}
如果没有返回值,可以不用在参数列表后面加任何代码。


Chapter-4 访问控制
UnityScript允许像C++/Java那样通过添加privatepublic关键字来设置变量、类或函数的访问控制权限(也叫对外可见性),例如:

private var self :String = "myself";   //私有变量
public function GetName() {            //共有函数
    return "Nonull";
}

Chapter-5 面向对象和接口

UnityScript中的面向和Java非常相似,包括继承和实现接口时所用的关键字也一样哦。看看下面的例子就明白了:

public class Person {
    private var name :String;
    private var age    :int;
    public function Person(name :string, age :int) {    //构造函数
        this.name = name;
        this.age    = age;
    }
    public function Introduce() :String {
        return "my name is: " + this.name + " and I am " + this.age.ToString() + " years old.";
    }
}

public class Student extends Person {
    public function Student(name :String) {
        super(name);
    }
    //...
}

接下来是接口的:

public interface People {
    function Speak(); 
    function Study();
    function Walk();
}

public class Child implements People {
    public function Speak() {...}
    public function Study() {...}
    public function Walk() {...}
}

Chapter-6 事件函数

有一些特定的函数是用来处理Unity中特定的事件的,比如在游戏加载时要执行什么操作,在画面帧更新的时候要执行什么操作,这些事件函数决定了脚本文件的大致执行结构,下面有一些常用的事件函数~

function Awake() {
}
function Start() {
}
function Update() {
    //帧更新
}
function FixedUpdate() {
    //固定间隔的更新
}

Chapter-7 并发
UnityScript中使用Coroutine来进行并发。并不是所有操作都要在一帧之内全部完成,可能你想让某段代码在一定之间内持续运行且不影响画面帧的刷新,那么这时候就要用到Coroutine了。

让某段代码以Coroutine的方式运行的方式就是在这段代码的合适位置加上关键字yield,这个合适的位置由你自己决定,如果你设置了yield关键字,那么这段代码会在yield关键字处终止运行,并在合适的时候再返回到这个yield关键字所在处继续运行。下面的代码展示了如何定义Coroutine:

public function CoroutineTest() {
    while (true) {
        yield;    //加上yield关键字就可以让函数以Coroutine的方式执行
    }
}
如果要运行某个Coroutine代码段,直接像调用普通函数一样调用它就行了:

function Start() {
    CoroutineTest(); //自动以Coroutine方式运行并且不会阻塞画面帧的更新哦
}

Chapter-8 网络编程

UnityScript并没有自己的socket,但是因为UnityScipt以mono运行时运行,所以可以使用mono的socket。下面定义一个socket抛砖引玉一下你就明白了~

public var sock :System.Net.Sockets.Socket;


如果转载请注明出处:http://blog.csdn.net/gophers



  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
UnityScript 程序入门 从现在开始,没有程序基础的朋友就可以根据此帖,逐步学习程序语言了。虽然是用UnityScript 讲解,但是该贴的内容全部讲普适性的基础程序部分,关于游戏开发中Unity 里运用到的代码等,依旧在“做游戏玩”课堂里讲。因而有任意高级语言基础的朋友,大可不看此帖。 本贴讲述程序语言的最最基础的部分,旨在让没接触过程序语言的朋友能熟悉这门语言,从而最终能将代码,如诗歌般流畅地写出来。这是基础的基础,没有这个基础,也是很难玩好Unity 的哟。课程以小节讲述,不定期通过回帖增加内容,大家遇到问题也可以提问。需要整体浏览课程内容时,点击“只看该作者”即可。 程序语言也是种语言,有其规范,而大家使用的时候,也有自己的风格。不过为了大家未来能够合作创作,以及自己的代码也能让别人看懂,因而风格亦建议相对统一清晰。简洁也是必要的要素,因而写程序不必说话时的随意,它会有更多要求,相反更像整理无数有逻辑关系的文字。且程序语言不像说话般是按照顺序的,虽然也是自上而下的顺序写,但是执行的时候,就不一定了。因而大家也要考虑计算机的感受,直话直说,不要绕弯子让电脑考虑半天。说得越清楚简单,电脑也越好理解。至于部分地方考虑到执行效率,则是相当于说话的时候说白话而不是文言文,否则电脑理解起来还是麻烦,就是有时候用文言文字数更少。 以上也就是大概随意说说,总之,慢慢学,一点点学,多写多尝试,最终就能把这们语言学好。能看别人的代码,能自己写代码,这门基础课也就算完成了。
很抱歉,UnityScript 已经在 Unity 2018 版本中被弃用,推荐使用 C#。以下是使用 C# 编写的火箭发射 VR 游戏代码: ```csharp using UnityEngine; public class RocketLauncher : MonoBehaviour { public GameObject rocketPrefab; public Transform rocketSpawnPoint; private bool canFire = true; private void Update() { if (canFire && Input.GetButtonDown("Fire1")) { FireRocket(); } } private void FireRocket() { canFire = false; GameObject rocket = Instantiate(rocketPrefab, rocketSpawnPoint.position, rocketSpawnPoint.rotation); rocket.GetComponent<Rigidbody>().AddForce(rocketSpawnPoint.forward * 5000f); Invoke("EnableFire", 2f); } private void EnableFire() { canFire = true; } } ``` 在这个示例中,我们创建了一个 RocketLauncher 类,它具有一个 rocketPrefab 属性,用于存储火箭的预制体,以及一个 rocketSpawnPoint 属性,它是火箭发射的位置。 在 Update() 方法中,我们检测玩家是否按下了 Fire1 按钮(例如,VR 手柄的触发按钮)。如果可以发射火箭,我们调用 FireRocket() 方法。 在 FireRocket() 方法中,我们首先将 canFire 标志设置为 false,以防止玩家连续发射多枚火箭。然后,我们使用 Instantiate() 方法克隆 rocketPrefab,将其位置设置为 rocketSpawnPoint 的位置,并将其朝向设置为 rocketSpawnPoint 的朝向。 最后,我们使用 AddForce() 方法将火箭向前发射。在启用发射后,我们使用 Invoke() 方法在 2 秒后调用 EnableFire() 方法。 在 EnableFire() 方法中,我们将 canFire 标志设置为 true,这样玩家就可以再次发射火箭了。 请注意,上述示例仅供参考,您需要根据自己的项目需求进行修改和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值