Cocos Creator上手指南|Unity用户篇

之前Cocos君给 Cocos2d-x 源码引擎的用户安利过 Cocos Creator 了,今天再给广大的 Unity 用户们安利一下。其实接触过 Cocos Creator 的人应该都能感受到,Cocos Creator 从 Unity 学习了很多优秀的设计,比如 Entity Component 框架,数据驱动等等。所以 Unity 用户上手 Cocos Creator 其实会非常容易。

Cocos2d-x 用户请点击:4个知识帮你轻松上手Cocos Creator

e9e1aa775fd3dba5850ca212306d7957.jpeg
90c14602f6cb231f5f566fd01ddb05d6.jpeg

  • Cocos Creator 的 API 使用驼峰命名法 (camelCase), 方法和变量首字母小写, 类型定义首字母大写。

  • Cocos Creator 的 回调函数 (callback) 遵循 Node.js 的风格, 即回调的第一个参数是错误信息。

cc.Node vs GameObject

Cocos Creator 中的 Node 相当于 Unity3D 中的 GameObject + Transform. 在 Cocos Creator 中, 父子节点的层级关系由 Node 来维护. 而 Unity3D 中是交给 Transform 来管理。

// 改变父子关系

this.node.parent = anotherNode;

// 旋转 20 度

this.node.rotation += 20;

// 位移 (10,10) 个像素

this.node.position.x += 10;

this.node.position.y += 10;

// 缩放 1.5 倍

this.node.scale.x *= 1.5;

this.node.scale.y *= 1.5;

坐标系

cc.Node 中的 position, rotation 和 scale 均为本地坐标, 对比 Unity3D,其 Postion, Rotation 为世界坐标系。在 Cocos Creator 中, 如果希望计算 cc.Node 的世界坐标, 可以通过如下方法:

// 将节点设置到世界坐标为 (100,100) 的位置

this.node.position = this.node.convertToNodeSpaceAR(cc.v2(100,100));

// this.node.rotation = TODO

cc.Component vs MonoBehaviour

Cocos Creator 中, 用户定义的脚本是通过扩展 cc.Component 类来编写的,而在 Unity3D 中,则是通过 扩展 MonoBehaviour。让我们来对比一下一份相同功能的 Cocos Creator 脚本和 Unity3D 脚本:

Unity3D:

public class Foobar : MonoBehaviour {

  public string text = 'Foobar';

  void Start () {

    Debug.Log('Hello ' + text );

  }

  void Update () {}

}


Cocos Creator:

// Foobar.js

cc.Class({

  extends: cc.Component,

  properties: {

    text: 'Foobar',

  },

  onLoad: function () {

    console.log('Hello ' + this.text);

  },

  update: function (dt) {},

});


属性定义

Cocos Creator 中属性定义在 properties 字段中, 而 Unity3D 中属性被定义为 MonoBehaviour 的 成员变量。 除了定义位置的区别,Cocos Creator 在属性中还引入了属性参数的概念,这些参数可用于控制属性在 Inspector 中的显示方法,序列化与否等等。

下面是几种常用属性在 Cocos Creator 中定义方法:

var MyEnum = cc.Enum({

  Foo: 1,

  Bar: 2,

});

// MyScript.js

var Foobar = require('Foobar');

cc.Class({

  extends: cc.Component,

  properties: {

    // 引用其他 cc.Node

    // Unity3D 中定义为: public GameObject otherGameObject;

    otherNode: { default: null, type: cc.Node },

    // 引用一份 Foobar Component 实例

    // Unity3D 中定义为: public Foobar foobar;

    foobar: { default: null, type: Foobar },

    // 不序列化该属性

    // Unity3D 中定义为: [System.NonSerialized] public int index = 0;

    index: { default: 0, type: cc.Integer, serializable: false  },

    // 定义一份数组

    // Unity3D 中定义为: public float[] idList;

    idList: { default: [],  type: cc.Float },

    // 定义一份枚举类型

    // Unity3D 中定义为: public MyEnum myEnum = MyEnum.Foo;

    myEnum: { default: MyEnum.Foo,  type: MyEnum },

  }

})

生命周期

Cocos Creator 的生命周期和 Unity3D 基本一致,仅仅在命名上稍微有一些出入:

fd8b82ca2452cc854ced025d63f337d9.jpeg

  • 当你希望销毁一个 cc.Object 实例(如: node, component 或者 asset)时,使用 obj.destroy() 函数。

  • 当你想判断一个 cc.Object 实例(如: node, component 或者 asset)是否已经被销毁时,,使用 cc.isValid(node)。

消息

Cocos Creator 的消息系统采用 dom 的消息收发方式,可以向上传递消息,需要在 Node 中进行消息注册,而 Unity3D 中,消息通过 SendMessage 并直接响应脚本中定义的成员函数来完成。

下面是 Cocos Creator 中收发消息的方法:

cc.Class({

  extends: cc.Component,

  onLoad: function () {

    this.node.on('hello-foobar', function ( event ) {

      event.stopPropagation();

      console.log('Hello Foobar');

    });

  },

  start: function () {

    this.node.emit('hello-foobar');

  },

})

4fb89d0a5b4cd9e803d2a0e23b763a29.jpeg

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值