25835人加入学习
(149人评价)
Unity2D 初级案例 - 坦克大战(Unity2017.1)

制作于2017年12月23日

价格 免费

 private void FixedUpdate()
    {
        float v = Input.GetAxisRaw("Vertical");
        float h = Input.GetAxisRaw("Horizontal");

        if (Mathf.Abs(v) > 0.0f)
        {
            transform.Translate(Vector3.up * v * moveSpeed * Time.fixedDeltaTime, Space.World);
            if (v < 0)
            {
                sr.sprite = tankSprite[2];
            }
            else if (v > 0)
            {
                sr.sprite = tankSprite[0];
            }
        }
        else if (Mathf.Abs(h) > 0.0f)
        {
            transform.Translate(Vector3.right * h * moveSpeed * Time.fixedDeltaTime, Space.World);
            if (h < 0)
            {
                sr.sprite = tankSprite[3];
            }
            else if (h > 0)
            {
                sr.sprite = tankSprite[1];
            }
        }
    }

[展开全文]

移动优先级 两个不同轴的方向键键一起按变成斜着移动

分开两个输入与运动 先执行V(Y) 再执行h(X)加一个判断代码

谁放前面谁优先

先把目前已经写好的控制移动代码们封装为一个(Move)方法 让FixedUpdate里更加整洁,还可以注释一下

2D 渲染层级 图层  特效>玩家 子弹》河流

sorting 大层级 (default) order 小层级  数值越大越在上面  特效 /草/子弹order设为1

添加子弹素材 拖入 Bullet size 331

[展开全文]

Sprite

sorting layer层级

orderinlayer小层级

越大越靠后

[展开全文]

解决移动优先级。

如果数值不等于0,就返回。。

渲染优先级。

精灵渲染器。

Sorting layer。  添加层级  大层级。

Order layer 小层级 数值越大,越优先显示。

[展开全文]

解决人物斜划的问题:

添加优先级先执行“V”在执行“H”

if (v!=0){return;}

渲染优先级

Sorting Layer

Order in Layer(数值)

[展开全文]

if(v!=0)

{

return;

}//水平方向不移动,垂直方向移动

[展开全文]

 

//封装方法
private void move()
{
//这里面都是move的方法   直接调用就可以

}
[展开全文]

设置,渲染层级

2个设置,

  • Sorting Layer
  • ORder in Layer,值大上层
[展开全文]

给hv设置一个优先级

封装方法

sortinglayer 大层级层级越大越后渲染。覆盖掉别的物体

orderlayer同一层级的渲染顺序

 

[展开全文]

渲染优先级(图层。次序、)

Sorting Layer 大层级

order in Layer 小层级,在大层级里设定优先级

[展开全文]

设置一个优先级解决上节课留下来的问题

[展开全文]

Sorting Layer 大层级,决定了游戏物体的渲染层级。

Order in Layer 层级的顺序,决定了每个大层级下的层级顺序,数值越大,越后渲染,就是不会被

[展开全文]

碰撞:

1.两个物体都加碰撞器

2.动的物体加上刚体

Order in Layer越大越后渲染

[展开全文]

坦克移动控制代码优化,原先的有个奇怪的问题,按住W或者S的时候没法左右移动,因为 v != 0 被 return 掉了。

    public float speed = 3;    
    private List<string> codelist = new List<string>();
    private string lastKeyCode = string.Empty;    

    // Update is called once per frame
    void Update()
    {
        SetLastKeyCode();
    }

    private void FixedUpdate()
    {
        PlayerMove();
    }

    private void PlayerMove()
    {
        Vector3 vector = new Vector3();
        Quaternion quaternion = new Quaternion();

        switch (lastKeyCode)
        {
            case "W":
                vector = new Vector3(0, speed * Time.deltaTime, 0);
                quaternion = Quaternion.Euler(0.0f, 0.0f, 0.0f);
                break;
            case "S":
                vector = new Vector3(0, -speed * Time.deltaTime, 0);
                quaternion = Quaternion.Euler(0.0f, 0.0f, 180.0f);
                break;
            case "A":
                vector = new Vector3(-speed * Time.deltaTime, 0, 0);
                quaternion = Quaternion.Euler(0.0f, 0.0f, 90.0f);
                break;
            case "D":
                vector = new Vector3(speed * Time.deltaTime, 0, 0);
                quaternion = Quaternion.Euler(0.0f, 0.0f, -90.0f);
                break;
            default:
                vector = new Vector3(); break;
        }

        if (lastKeyCode != "")
        {
            //设置坦克的朝向
            transform.rotation = quaternion;
            //设置坦克的位置
            transform.Translate(vector, Space.World);
        }
    }

    #region SetLastKeyCode
    private void SetLastKeyCode()
    {
        #region KeyDown
        if (Input.GetKeyDown(KeyCode.W)) { MoveKeyDown("W"); }
        if (Input.GetKeyDown(KeyCode.S)) { MoveKeyDown("S"); }
        if (Input.GetKeyDown(KeyCode.A)) { MoveKeyDown("A"); }
        if (Input.GetKeyDown(KeyCode.D)) { MoveKeyDown("D"); }
        #endregion

        #region KeyUp
        if (Input.GetKeyUp(KeyCode.W)) { MoveKeyUp("W"); }
        if (Input.GetKeyUp(KeyCode.S)) { MoveKeyUp("S"); }
        if (Input.GetKeyUp(KeyCode.A)) { MoveKeyUp("A"); }
        if (Input.GetKeyUp(KeyCode.D)) { MoveKeyUp("D"); }
        #endregion
    }

    private void MoveKeyDown(string keyCode)
    {
        if (!codelist.Contains(keyCode))
        {
            codelist.Add(keyCode);
        }

        if (codelist.Count > 0)
        {
            var key = codelist[codelist.Count - 1];
            lastKeyCode = key;
        }
    }

    private void MoveKeyUp(string keyCode)
    {
        codelist.RemoveAll(key => key.Contains(keyCode));
        if (codelist.Count > 0)
        {
            var key = codelist[codelist.Count - 1];
            lastKeyCode = key;
        }
        else
        {
            lastKeyCode = string.Empty;
        }
    }
    #endregion

 

[展开全文]

1. 通过Sprite Renderer组件中的Sorting Layer可以和Order in Layer调整物体的层级;order值越高越后渲染,越优先显示

[展开全文]

授课教师

SiKi学院老师

课程特色

图文(1)
视频(32)
下载资料(1)