一、物理体系

1、添加Box collider 2D组件

留意方位的调理

Unity3D 游戏开发:角色移动(5)

2、添加Rigidbody 2D组件

留意横板2D游戏重力(Gravity Scale)为0

Unity3D 游戏开发:角色移动(5)

二、脚本编程

  1. 在Awake办法中获取Rigidbody2D组件,用于后续控制该物体的运动。
  2. 在Update办法中调用PlayerInput()办法,获取玩家的输入信息(水平缓笔直方向上的输入)。
  3. 在FixedUpdate办法中调用Movement()办法,依据玩家的输入信息来控制物体的运动,运用Rigidbody2D.MovePosition办法使物体移动到方针方位。

详细完成细节如下:

  1. PlayerInput()办法:获取玩家的水平缓笔直方向上的输入信息,假如两个方向都有输入,则将它们分别缩小0.6倍,以避免物体沿对角线运动过快的问题。
  2. Movement()办法:依据玩家输入信息计算出人物方针方位,然后运用Rigidbody2D.MovePosition办法从头设置物体的方位。movmentInput变量是一个Vector2类型的变量,表示玩家的运动输入信息(包含水平缓笔直方向上的输入)。
    private void Awake()
    {
        rb = GetComponent<Rigidbody2D>(); 
    }
    private void Update()
    {
        PlayerInput();
    }
    private void FixedUpdate()
    {
        Movement(); 
    }
    private void PlayerInput()
    {
        inputX = Input.GetAxisRaw("Horizontal");
        inputY = Input.GetAxisRaw("Vertical");
        if (inputX != 0 && inputY != 0)
        {
            inputX = inputX * 0.6f;
            inputY = inputY * 0.6f;
        }
        movementInput=new Vector2(inputX, inputY);
    }
    private void Movement()
    {
        rb.MovePosition(rb.position + movementInput * Time.deltaTime);
    }
}

三、开始了解脚本编程

1、在Unity中,还有一些能够与Awake()相似运用的函数,例如:

  1. Start(): 在脚本启用时调用,与Awake()相似,可是它会等待所有Awake()函数都履行结束后再履行。假如您需求在脚本启动时进行初始化操作,能够运用Start()。
  2. OnEnable(): 当脚本从非活动状况变为活动状况时调用,能够用来进行状况转化、数据康复或许其他处理。在脚本没被禁用时,同样会在实例化目标后第一次调用。
  3. OnDisable(): 当脚本从活动状况变为非活动状况时调用,能够用于暂停处理,以及开释资源等操作。

这些函数与Awake()相似,都是在脚本启动时当即调用的函数,不过它们的履行顺序和效果略有不同,依据实际需求挑选适宜的函数来运用。

2、在Unity中,除了Update()函数之外,还有一些能够与Update()相似运用的函数,例如:

  1. FixedUpdate(): 与Update()相似,可是它在固定时间距离内运行(一般为0.02秒),适用于需求进行物理模拟的场景。假如需求移动物体、修正刚体参数等,应该运用FixedUpdate()。
  2. LateUpdate(): 在所有Update()函数履行完后调用,适合处理摄像头跟随或其他需求在Update之后处理的逻辑。LateUpdate()会确保所有Update()函数都现已履行结束。
  3. OnGUI(): 在每帧烘托完成后调用,用于制作GUI界面。假如需求在屏幕上显现一些信息或按钮等,能够运用OnGUI()。

总的来说,这些函数的效果与Update()相似,但它们各有所长,在不同场景下运用会更加优化和高效。

3.在Unity中,还有两个跟FixedUpdate()函数相似的函数,分别是:

  1. FixedUpdate2D(): 与FixedUpdate()相似,可是它用于2D物理引擎模拟中。假如您需求对2D物理引擎进行操作,能够运用FixedUpdate2D()函数。
  2. OnTriggerStay(): 在物体与触发器坚持触摸时调用。假如您需求检测物体与触发器的触摸状况并进行处理,能够运用OnTriggerStay()函数。

这些函数和FixedUpdate()函数都是固定时间距离内履行的函数,运用起来比Update()函数更加精确和精确。不过,这些函数也各有适用的场景,需求依据详细需求挑选适宜的函数来运用。

4、在Unity中,与MovePosition相似的函数包含:

  1. transform.position: 直接设置游戏目标的方位。例如,能够运用以下代码将游戏目标移动到(1, 0, 0)处:
transform.position = new Vector3(1.0f, 0.0f, 0.0f);

由于它直接设置游戏目标的方位,因而不该该在FixedUpdate函数中运用,而应该在Update函数中运用。

  1. Rigidbody.velocity: 设置刚体的速度,使其鄙人一帧朝着指定方向移动。例如,能够运用以下代码让刚体向右移动:
rigidbody.velocity = new Vector2(1.0f, 0.0f);

需求留意的是,这种办法遭到物理引擎的影响,例如重力、冲突等。

  1. CharacterController.Move(): 将人物控制器移动到方针方位,疏忽物理引擎的影响。例如,能够运用以下代码将人物控制器向前移动:
characterController.Move(transform.forward * moveSpeed * Time.deltaTime);

需求留意的是,这种办法只适用于人物控制器,而且也不该该在FixedUpdate函数中运用。

总之,这些办法都能够用来移动游戏目标,可是每种办法遭到的约束和约束不同,需求依据详细需求挑选适宜的办法来运用。

5、在Unity中,与PlayerInput()相似的函数包含:

  1. Input.GetAxis(): 获取按键输入的浮点数,依据按键输入的不同而产生变化。例如,能够运用以下代码获取水平方向上键盘、摇杆等的输入:
float horizontal = Input.GetAxis("Horizontal");

这里的”Horizontal”是一个虚拟的输入轴,能够通过Project Settings -> Input面板进行设置。该函数回来一个浮点数,表示按键输入的强度。

  1. Input.GetKeyDown(): 判别是否按下了某个按键,例如键盘上的某个按键。例如,能够运用以下代码判别玩家是否按下了空格键:
if (Input.GetKeyDown(KeyCode.Space))
{
    // do something...
}

需求留意的是,该函数只对按下瞬间有用,假如需求持续检测按键是否按下,能够运用Input.GetKey()。

  1. Input.GetMouseButtonDown(): 判别是否按下了鼠标按钮。例如,能够运用以下代码判别玩家是否按下了鼠标左键:
if (Input.GetMouseButtonDown(0)) {
    // do something...
}

需求留意的是,该函数只对按下瞬间有用,假如需求持续检测鼠标按钮是否按下,能够运用Input.GetMouseButton()。

总之,这些函数都能够用来检测用户输入,可是每个函数有其各自的特色和约束,需求依据详细需求挑选适宜的函数来运用。

6、在Unity中,与Movement()相似的函数包含:

  1. Rigidbody.AddForce(): 物体遭到力的效果,产生加速度并移动。例如,能够运用以下代码为刚体施加一个向右的力:
rigidbody2D.AddForce(Vector2.right * moveSpeed);

需求留意的是,该办法会遭到刚体的质量、冲突等物理属性的影响。

  1. Rigidbody.velocity: 直接设置物体的速度,使其鄙人一帧朝着指定方向移动。例如,能够运用以下代码让刚体向右移动:
rigidbody2D.velocity = new Vector2(moveSpeed, 0);

这种办法同样遭到刚体的质量、冲突等物理属性的影响。

  1. Transform.Translate(): 直接修正物体的Transform组件的方位,可传入相对或肯定位移。例如,能够运用以下代码将物体向右移动:
transform.Translate(Vector3.right * moveSpeed * Time.deltaTime);

需求留意的是,该办法不受物理引擎的影响,可能会导致物体卡在墙面或其他物体里面。

总之,这些办法都能够用来移动游戏目标,但每个办法遭到的约束和约束不同,需求依据详细需求挑选适宜的办法来运用。

阅读更多作者文章:

# Unity3D 游戏开发:创建人物(4)