unity项目(一)

前言

学习了一段时间的unity3d,如果不是公司出现的情况,我还是会研究unity的

unity项目(一)_第1张图片
Snip20170223_1.png

常见的开发2D游戏的最常见的两个方案:cocos2dx和unity

总结了使用unity的几个好处:

  • 可以方便的将unity的代码转换成各个平台,如ios,安卓,mac,windows,playstation,三星TV等
  • 商店的资源比较全面,可以方便从商店中获取很多的其他开发者提供的资源。
  • 插件不少,比如做界面的NGUI,做手机的虚拟摇杆EasyTouch。等等。

缺点是:

  • 使用了unity后,在移动端的安装包体积相比较于原生的要大很多
  • 资源很多,但是大部分的都是花钱的。也有很多的破解的

自己尝试着做了个小的项目。让我们大家共同进步吧

为了更好的优化unity的性能,减少安装包的体积

  • 我们劲量使用prefab预制体。
  • 减少使用帧动画
  • 如果牵扯到复杂的计算,或者网络费时间的东西,我们一般会使用unity的多线程。前面的文章已经讲到过了使用多线程。
  • 图片使用的都是png图片

让我们从头分析一下:
1.我们会创建一个主角,并且给主角一把枪
2.创建子弹
3.创建地面
4.写上代码控制子弹
5.写上代码控制人物移动和跳起

这是效果图

unity3d demo gif.gif

1.创建一个空的object,将hero和gun脱给object。给主角一个刚体Rigidbody 和碰撞体collider。将枪调整位置给主角
2.将子弹放置到枪附近,为了观察方便
3.将建筑物摆放到需要的位置,设置好碰撞体。
下面的就是代码关联了
4.控制人物的移动和跳起

       public float jumpForce = 0.01f;//设置跳起的力度

    public float moveForce = 50f;//添加刚体力的大小

    public float maxSpeed = 1f;// 角色最大移动速度

    private bool grounded = false;//判断是否着陆

      private Transform groundCheck;//2d物理射线辅助判断


float h = Input.GetAxis ("Horizontal");//获取水平的输入
//判断是否要转向
        if (h > 0 && !facingRight) {
            Flip ();

        } else if (h < 0 && facingRight) {
            Flip ();

        }

// 角色的起跳功能
        if (jump) {

            GetComponent ().AddForce (new Vector2 (0f, jumpForce));

            jump = false;

        }

//  自定义函数值
    void Flip(){

        facingRight = !facingRight;

        Vector3 theScale = transform.localScale;//角色局部所防止

        theScale.x *= -1;

        transform.localScale = theScale;


    }

设置子弹控制的代码

public Rigidbody2D rocket;
    public float speed = 20;


    private PlayerControl playerctrl;


    void Awake(){
        playerctrl = transform.root.GetComponent ();
    }
    
    // Update is called once per frame
    void Update () {

        if(Input.GetButtonDown("Fire1")){//鼠标的左键

            if (playerctrl.facingRight) {//判断朝向

                Rigidbody2D bulletInstance = Instantiate (rocket, transform.position, Quaternion.Euler (new Vector3 (0, 0, 0))) as Rigidbody2D;

                bulletInstance.velocity = new Vector2 (speed, 0);
            }

            //  向右发子弹
            else {

                Rigidbody2D bulletInstance = Instantiate (rocket, transform.position, Quaternion.Euler (new Vector3 (0, 0, 0))) as Rigidbody2D;

                bulletInstance.velocity = new Vector2 (-speed, 0);

            }
        }

这样就可以愉快的射击了,有时间学习一下自动寻路。就可以增加怪物死了。

你可能感兴趣的:(unity项目(一))