Unity 3D做2D坦克大战,控制图片切换朝向的2种方法。

版权声明:SiKi学院 https://blog.csdn.net/soukenan/article/details/84204436

老师 | Trigger

学习者 |小白

出品 | Siki 学院

第一种更换图片切换朝向的方法:

在这里插入图片描述

public class Player:MonoBehaviour{
   
    public float moveSpeed=3;
    private SpriteRenderer sr;
    public Sprite[] tankSprite;// 上 右 下 左
  
    private void Awake()
    {
        sr=GetComponent<SpriteRenderer>():
    }
    
    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];
    }
    }
}

问题:MonoBehaviour介绍
Unity中的脚本都是继承自MonoBehaviour.
一、基础函数:
创建脚本就默认的update、start方法:(这些官方的文档都是有的)

Start:Update函数第一次运行前调用,一般用于游戏对象的初始化。比如GetComPonent之类。

Update:每帧调用;一般用于更新场景和状态,物理相关不建议在此处处理。

Awake:脚本实例对象被创建时调用,也可以用于游戏对象的初始化,但是Awake是在所有脚本的Start之前执行。

FixedUpdate:固定间隔执行,一般用于物理状态更新。

LateUpdate:每帧执行,在Update之后。一般和摄像机有关的状态放在这里处理。

第二种方式通过旋转图片的Z轴切换朝向:

在这里插入图片描述

public class player : MonoBehaviour
{
    private Vector3 bullectEulerAngles;

    private void Attack()
    {
        if (Input.GetKeyDown(KeyCode.Space)){

            //实例生成子弹
            //子弹产生的角度:当前坦克的角度+子弹应该旋转的角度
            Instantiate(bullectPrafabs, transform.position, Quaternion.Euler(transform.eulerAngles + bullectEulerAngles));
            timeVal = 0;
        }
    }
     //坦克的移动方法
    private void Move()
    {

        float v = Input.GetAxis("Vertical");

        if (v < 0)
        {
            sr.sprite = tanksprite[2];
            bullectEulerAngles = new Vector3(0, 0, -180);
        }
        else if (v > 0)
        {
            sr.sprite = tanksprite[0];
            bullectEulerAngles = new Vector3(0, 0, 0);
        }
        transform.Translate(Vector3.up * v * movespeed * Time.fixedDeltaTime, Space.World);

        if (v != 0)
        {
            return;
        }

        float h = Input.GetAxis("Horizontal");
        if (h < 0)
        {
            sr.sprite = tanksprite[3];
            bullectEulerAngles = new Vector3(0, 0, 90);
        }
        else if (h > 0)
        {
            sr.sprite = tanksprite[1];
            bullectEulerAngles = new Vector3(0, 0, -90);
        }
        transform.Translate(Vector3.right * h * movespeed * Time.fixedDeltaTime, Space.World);
    }

}

猜你喜欢

转载自blog.csdn.net/soukenan/article/details/84204436
今日推荐