当前位置:   article > 正文

Unity 2.5D 人物的根据鼠标的上下左右移动和屏幕的跟随。_unity实现上下左右移动

unity实现上下左右移动

一、人物的创建

人物对象创建完需要添加一下两个组件。

1、Rigidbody 2D:

        刚体,向对象添加 Rigidbody 组件后,其运动将受到 Unity 物理引擎的控制。

        注意1:在这里我们需要锁定人物对象得Z轴,不然在与其他得物体碰撞时,会导致人物的旋转。将Rigidbod组件下的Freese Rotation  Z轴勾选上就行了

        注意2:因为是2.5D下,所以需要在Rigidbod组件里,将Gravity Scale 设置为零。意思就是将人物对象的重力设置为零,不然的话,人物会掉落。

2、Capsule Collider2D (或者Box Collider2D)

        碰撞器,给人物一个碰撞器,只有这样。当人物和其他有用碰撞器的对象相碰撞时,才能触发碰撞效果。我们可以在点击 Edit Collider  来调整对象的碰撞范围。

二、人物的动画创建

人物的站立动画Idle、人物的奔跑动画Run

动画器的分析:

 这里我们需要设置一个Bool变量 isRunning来确定人物为什么状态。并且我们得将Has Exit Time 取消,并将Transition Duratio 设置为0;其目的就是动画还没播放完就切换下一动画,这很重要。

三、人物移动实现

准备好之后,就是人物得运动脚本代码了。来实现人物得运动。

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class PlayerMovement : MonoBehaviour
  5. {
  6. //获取人物的刚体组件
  7. private new Rigidbody2D rigidbody;
  8. //人物的速度
  9. private float speed = 6F;
  10. //动画组件
  11. private Animator anim;
  12. //人物移动
  13. private Vector2 input;
  14. //鼠标在世界坐标系下的位置
  15. private Vector2 mousePos;
  16. // Start is called before the first frame update
  17. void Start()
  18. {
  19. //获取刚体组件
  20. rigidbody = GetComponent<Rigidbody2D>();
  21. //获取动画器
  22. anim = GetComponent<Animator>();
  23. // sprite = GetComponent<SpriteRenderer>();
  24. }
  25. void FixedUpdate()
  26. {
  27. input.x = Input.GetAxisRaw("Horizontal");
  28. input.y = Input.GetAxisRaw("Vertical");
  29. //人物的移动
  30. rigidbody.velocity = input.normalized * speed;
  31. //鼠标在世界坐标系下的位置
  32. mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
  33. //根据两个坐标来判断人物的转向
  34. if (mousePos.x > transform.position.x)
  35. {
  36. transform.rotation = Quaternion.Euler(new Vector3(0, 0, 0));
  37. }
  38. else
  39. {
  40. transform.rotation = Quaternion.Euler(new Vector3(0, 180, 0));
  41. }
  42. //设定isRunning的值,是true还是fasle.根据返回向量的的长度来决定的。
  43. anim.SetBool("isRunning", input.magnitude > 0 ? true : false);
  44. }
  45. // Update is called once per frame
  46. void Update()
  47. {
  48. }
  49. void Awake()
  50. {
  51. }
  52. }

主要就是实现得人物得移动,并根据鼠标得位置来改变人物面朝得方向,

四、屏幕跟随镜头移动

        这里我给main Camera添加了一个follow脚本,得以实现。(因为是新手,对于相机的知识比较缺乏,如果有更好的方法,教我)

        

  1. using UnityEngine;
  2. public class FollowPlayer : MonoBehaviour
  3. {
  4. public Transform Player;
  5. private Vector3 offset;
  6. // Start is called before the first frame update
  7. void Start()
  8. {
  9. offset = transform.position - Player.position;
  10. }
  11. // Update is called once per frame
  12. void Update()
  13. {
  14. transform.position = offset + Player.position;
  15. }
  16. }

其实想法很简单:就是得出一开始相机和人物的距离,然后一直保持这个距离就行了。

四、扩展

因为我并没有打算做面向 前方和后方的效果,所以就没有实现。大概的思路是一样的:创捷四个方向的Idle状态和Run状态动画就行了,然后在动画器的Bleed Tree下进行调整,而且这样的话就不需要鼠标来控制人物的转向了。

有错误的话,谢谢改正。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/111596
推荐阅读
相关标签
  

闽ICP备14008679号