赞
踩
人物对象创建完需要添加一下两个组件。
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;其目的就是动画还没播放完就切换下一动画,这很重要。
准备好之后,就是人物得运动脚本代码了。来实现人物得运动。
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
-
- public class PlayerMovement : MonoBehaviour
- {
- //获取人物的刚体组件
- private new Rigidbody2D rigidbody;
-
- //人物的速度
- private float speed = 6F;
-
- //动画组件
- private Animator anim;
-
- //人物移动
- private Vector2 input;
-
- //鼠标在世界坐标系下的位置
- private Vector2 mousePos;
-
- // Start is called before the first frame update
- void Start()
- {
- //获取刚体组件
- rigidbody = GetComponent<Rigidbody2D>();
- //获取动画器
- anim = GetComponent<Animator>();
-
- // sprite = GetComponent<SpriteRenderer>();
- }
- void FixedUpdate()
- {
- input.x = Input.GetAxisRaw("Horizontal");
- input.y = Input.GetAxisRaw("Vertical");
-
- //人物的移动
- rigidbody.velocity = input.normalized * speed;
-
- //鼠标在世界坐标系下的位置
- mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
-
- //根据两个坐标来判断人物的转向
- if (mousePos.x > transform.position.x)
- {
-
- transform.rotation = Quaternion.Euler(new Vector3(0, 0, 0));
- }
- else
- {
- transform.rotation = Quaternion.Euler(new Vector3(0, 180, 0));
- }
- //设定isRunning的值,是true还是fasle.根据返回向量的的长度来决定的。
- anim.SetBool("isRunning", input.magnitude > 0 ? true : false);
-
- }
-
- // Update is called once per frame
- void Update()
- {
-
- }
-
- void Awake()
- {
-
- }
-
- }
主要就是实现得人物得移动,并根据鼠标得位置来改变人物面朝得方向,
四、屏幕跟随镜头移动
这里我给main Camera添加了一个follow脚本,得以实现。(因为是新手,对于相机的知识比较缺乏,如果有更好的方法,教我)
- using UnityEngine;
- public class FollowPlayer : MonoBehaviour
- {
-
- public Transform Player;
-
- private Vector3 offset;
- // Start is called before the first frame update
- void Start()
- {
- offset = transform.position - Player.position;
- }
-
- // Update is called once per frame
- void Update()
- {
- transform.position = offset + Player.position;
- }
- }
其实想法很简单:就是得出一开始相机和人物的距离,然后一直保持这个距离就行了。
因为我并没有打算做面向 前方和后方的效果,所以就没有实现。大概的思路是一样的:创捷四个方向的Idle状态和Run状态动画就行了,然后在动画器的Bleed Tree下进行调整,而且这样的话就不需要鼠标来控制人物的转向了。
有错误的话,谢谢改正。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。