老师 | 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);
}
}