FirstGame笔记


跟着麦扣老师做的小狐狸demo

Input.GetAxis

GetAxis()两种:

  • Vertical:获得垂直方向

  • Horizontal:获得水平方向

horizontalmove = Input.GetAxis("Horizontal");//检测水平方向键
verticalmove = Input.GetAxis("Vertical");	 //检测垂直方向键

👆Edit->Project Settings->Input Manager->Axes->Horizontal

从上图可知Negative Button -1对应leftaPositive Button对应1right

所以在程序中分别设置两个变量接收-1或者1来判断是按了a left还是d right

Input.GetAxisRaw

~ vs Input.GetAxis👇

前者获得的数据只有-1 0 1

后者获得的数据是-1~0 0~1

Time.deltaTime

Mathf.Abs()

取绝对值

transform&Transform

  • Transform做函数
  • transform才是当前真正需要操作的

镜头设置的两种方法

1.在Main Camera中加new script

👇Script代码

public class CameraControl : MonoBehaviour
{
	//①设置一个叫"player"的Transform类型的变量
    public Transform player;

    // Update is called once per frame
    void Update()
    {
    	//②把Main Camera中的transform栏目中的position改为一个实例,该实例是3D的,xyz各自对应
        transform.position = new Vector3(player.position.x, 0, -10f);  
    }
}

👇最后把要给镜头的对象移动到Player处即可

2.cinimachine

GameObject->Cinimachine->2D Cinima->得到下图所示的选项

  • Follow处拉拽上需要跟踪镜头的对象

  • 然后在Lens处调整镜头距离等参数

  • Dead Zone

    • 可以拉拽范围,如果超出范围则镜头移动,未超出则不移动
  • 不离开背景图

    • CM vcam1->Body->Add Extension->Cinimachine Confiner->
  • 回到Background图层拉拽范围

虚函数与类的使用

父级

public class Enemy : MonoBehaviour
{
    protected Animator Anim;
    //👆所有Enemy都需要有“被击杀”的动画,因此先创建一个名为"Anim"的Animator变量
    //"protected"→1.1
    protected virtual void Start()
    //"virtual"父级的"Start"是可以被子级重新编写的(因为子级在"Start"中有一些本体的属性)
    {
        Anim = GetComponent<Animator>();
    }
    public void Death()
    {
        Destroy(gameObject);
    }

    public void JumpOn()
    {
        Anim.SetTrigger("death");
    }
}

子级

public class Enemy_Frog : Enemy//隶属于Enemy的子级,确定父子关系
{
	protected override void Start()
	//👆override 呼应virtual
	{
     	base.Start();//调用父级的Start
	}
}

Player

Enemy enemy = collision.gameObject.GetComponent<Enemy>();//可以调用名为"Enemy"的类的父子级
1.1protected
  • 自身类和派生类可以访问相当于自身的private型成员 创建的函数或者变量在子父级中都可以使用

  • 可以被1.该类中的函数2.子类的函数、以及3.其友元函数访问。但不能被该类的对象访问

  • 使用protected继承,父类的protected和public属性在子类中变为protected

场景转换

从第一关进入第二关

using UnityEngine.SceneManagement;
//.
//.

if(Input.GetKeyDown(KeyCode.E))
{
    SceneManager.LoadScene(SceneManager.GetActiveScene().bulidIndex + 1);
}

文章作者: WB
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 WB !
  目录