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

制作于2017年12月23日

价格 免费

通过建立访问数组来解决图片方向的问题

[展开全文]

控制图片的移动与切换

随方向改变图片朝向

法一 更改图片显示  素材里有顺序各方向图片

改渲染器中的sprite 就能改图片

在代码中拿到sprite的引用

在上面 拿到引用(定义一个变量,再用getcomponent)注意拿引用的特殊写法

拿到要切换的图片的引用 (0,8,16,24上右下左 记好顺序)搞一个数组 直接把这几张图拖到inspector 面板里的数组里

tips 在project 上端把素材排列由一行 改为两行可以显示图片

下面用输入监听变量的返回值 判断一下h/v的正负 if else if h< 0是zuo

图片切换就像变量赋值 此时的数组中括号内的值是拿到数组以后的顺序了

法二  根据不需要的z轴来控制旋转

[展开全文]

这样写会出现一个问题,比如玩家如果同时按上和左建,坦克会斜着移动,所以建议将transform.Translate(Vector3.up * v * moveSpeed * Time.deltaTime,Space.World);

transform.Translate(Vector3.up * h * moveSpeed * Time.deltaTime,Space.World);这两句写在if里面,且在交换精灵之后应该更合理,先换图再移动。

if (h < 0)//左边
        {
            sr.sprite = tankSprite[3];
            transform.Translate(Vector3.right * h * moveSpeed * Time.deltaTime, Space.World);
        }
        else if(h > 0)
        {
            sr.sprite = tankSprite[1];
            transform.Translate(Vector3.right * h * moveSpeed * Time.deltaTime, Space.World);
        }
        else if(v > 0)
        {
            sr.sprite = tankSprite[0];
            transform.Translate(Vector3.up * v * moveSpeed * Time.deltaTime, Space.World);
        }
        else if(v < 0)
        {
            sr.sprite = tankSprite[2];
            transform.Translate(Vector3.up * v * moveSpeed * Time.deltaTime, Space.World);
        }
        else
        {
            return;
        }

[展开全文]

 

public Sprite[] tankSprite;

上右下左

 

[展开全文]

hとvの値で方向をコントロール

全ての参照はAwakeの中設定

[展开全文]

private SpriteRenderer sr;

public Sprite[] tankSprite; (直接拖到数组里)

 

 sr = GetComponent<SpriteRenderer>();

 

if (h<0)

{

    sr.Sprite = tankSprite[3];

}

else if (h>0)

{

    sr.Sprite = tankSprite[1];

}

[展开全文]

定义一个精灵类型的数组:

private SpriteRenderer sr;
 public Sprite[] tankSprites;

 

精灵

 

if (h<0)
        {
            sr.sprite = tankSprites[3];
        }else if(h>0 )
        {
            sr.sprite = tankSprites[1];
        }  
 if (v < 0)
        {
            sr.sprite = tankSprites[2];
        }else if (v>0)
        {
            sr.sprite = tankSprites[0];
        }

 

[展开全文]

private SpriteRenderer sr;

private void Awake

   sr =

第一张是0

第二张是8

第三张是16

第四张是24

第五章是28

[展开全文]

public class player : MonoBehaviour {
    public float movespeed=3;
    private SpriteRenderer sr;
    public Sprite[] tankSprite;
    private void Awake()
    {

        sr = GetComponent<SpriteRenderer>();
    }

    // Use this for initialization
    void Start () {
        
    }
    
    // Update is called once per frame
    void Update () {
        float h = Input.GetAxisRaw("Horizontal");
        transform.Translate(Vector3.right*h*movespeed*Time.deltaTime,Space.World );
        if (h < 0){
            sr.sprite = tankSprite[3];
        }else if (h > 0)
        {
            sr.sprite = tankSprite[1];
        }

        float v = Input.GetAxisRaw("Vertical");
        transform.Translate(Vector3.up*v*movespeed*Time.deltaTime ,Space.World);
        if(v<0){
            sr.sprite = tankSprite[2];
        }else if (v > 0)
        {
            sr.sprite = tankSprite[0];
        }
    }
}
 

[展开全文]

图片使用SpriteRender组件控制。

改变坦克移动时的朝向:(1)使用代码控制多张图片进行轮换;(2)代码控制单张图片进行旋转

[展开全文]

水平=h   Horizontal

垂直=v   Vertical

public float moveSpeed=3;    //声明一个移速,默认=3

private SpriteRenderer sr;   //声明一个私有的SpriteRenderer 常量为“sr”

private void Awake(){
    sr=GetComponent<SpriteRenderer>();
}

 

 

[展开全文]

方法一:

通过素材的图片控制Player的方向转动

Player

private SptiteRenderer srl

Update()

 

 

[展开全文]

Input.GetAxisRaw(); 比 Input.GetAxis():

具体的区别不清楚,但是在测试时无意间发现,前者比后者接收的按键的速度更快的样子,在按键时图片的切换功能,使用了后者的话,明显感觉到了延迟感。

原来前者是返回的只有0或1,-1,而后者是包含之间的小数点。

[展开全文]

 

切换图片的渲染和显示

拿到组件的引用,改一下属性

 

 

 

 

图片沿着Z轴做旋转

 

 

 

 

 

[展开全文]

代码控制图片移动切换:

private SpriteRenderer sr;

public Sprite[] tankSprite;

private void Awake(){

sr=GetComponent<spriteRenderer>();

}

if(h<0)

{

sr.sprite=tankSprite[3];

}

else if(h>0)

{

sp.sprite=tankSprite[1]

}

[展开全文]

坦克移动时改变显示

获得精灵渲染

精灵数组

把图片拖入数组 

[展开全文]

授课教师

SiKi学院老师

课程特色

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