学习视频教程 无邪:
https://space.bilibili.com/335835274/channel/detail?cid=112338
无邪 教程

画个自己的像素人物
后续是给这个人物添加动画

直接将导出的png图片拖入Unity中,创建一个2d对象
把每个导入的动作分割成单独的16*16的图片,
多选中多张图片一起拖到对象上,则可給该对象创建动画

打开动画窗口 即可看到当前对象的所有动画
在动画界面中创建 几个全局变量来控制动画切换
在脚本代码中 获取该对象的动画组件 并通过判断player的动作 方向 来设置几个全局变量的值,理论上这几个全局变量一旦切换 动画就会根据逻辑对应的切换
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
public float MoveSpeed;
private Animator Myanimator;
private Rigidbody2D Myrigidbody2D;
// Start is called before the first frame update
void Start()
{
MoveSpeed = 5;
Myanimator = GetComponent<Animator>();
Myrigidbody2D = GetComponent<Rigidbody2D>();
}
// Update is called once per frame
void Update()
{
PlayerMove();
CheckPlayerDirectory();
}
void PlayerMove()
{
float MoveDirH = Input.GetAxis("Horizontal");
float MoveDirV = Input.GetAxis("Vertical");
Vector2 vector = new Vector2(MoveDirH * MoveSpeed, MoveDirV* MoveSpeed);
Myrigidbody2D.velocity = vector;
//if (Input.GetKey(KeyCode.W))
//{
// gameObject.transform.Translate(Vector3.up * MoveSpeed * Time.deltaTime);
//}
//if (Input.GetKey(KeyCode.S))
//{
// gameObject.transform.Translate(Vector3.down * MoveSpeed * Time.deltaTime);
//}
//if (Input.GetKey(KeyCode.A))
//{
// gameObject.transform.Translate(Vector3.left * MoveSpeed * Time.deltaTime);
//}
//if (Input.GetKey(KeyCode.D))
//{
// gameObject.transform.Translate(Vector3.right * MoveSpeed * Time.deltaTime);
//}
}
void CheckPlayerDirectory()
{
if (Myrigidbody2D.velocity.x < 0)
{
Myanimator.SetBool("IsMoveLeft", true);
Debug.Log("IsMoveLeft -> true");
}
else
{
Myanimator.SetBool("IsMoveLeft", false);
}
/**************************************************************/
if (Myrigidbody2D.velocity.x > 0)
{
Myanimator.SetBool("IsMoveRight", true);
}
else
{
Myanimator.SetBool("IsMoveRight", false);
}
/**************************************************************/
if (Myrigidbody2D.velocity.y > 0)
{
Myanimator.SetBool("IsMoveUp", true);
}
else
{
Myanimator.SetBool("IsMoveUp", false);
}
/**************************************************************/
if (Myrigidbody2D.velocity.y < 0)
{
Myanimator.SetBool("IsMoveDown", true);
}
else
{
Myanimator.SetBool("IsMoveDown", false);
}
/**************************************************************/
if (Mathf.Abs( Myrigidbody2D.velocity.y ) < Mathf.Epsilon && Mathf.Abs(Myrigidbody2D.velocity.x) < Mathf.Epsilon)
{
Myanimator.SetBool("IsMoveDown", true);
}
}
向左走和向右走 可以共享同一个动画
具体做法是判断 角色的运动方向 并在脚本里面选择是否反转角色
代码如下
transform.localRotation = Quaternion.Euler(0,180,0);
最终还是决定做个横板跳跃游戏
人物绘制如下

一个会跳跃的小至尊宝,名字叫做Hx

做一个简易场景,给Hx的脚部添加Box Collider 2d组件 使得其能站在地面上
给Hx的身体部分添加Capsule Collider 2d 使其能和其他物体产生碰撞
添加脚本控制人物移动 和 判断人物当前运动状态 切换不同的动画
代码如下
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class HxControl : MonoBehaviour
{
public float MoveSpeed;
public bool IsAdministrator;
private Rigidbody2D myrigibody;
private Animator myAnimator;
// Start is called before the first frame update
void Start()
{
MoveSpeed = 5;
myrigibody = GetComponent<Rigidbody2D>();
myAnimator = GetComponent<Animator>();
//IsAdministrator = false;
}
// Update is called once pe

本文介绍了如何在Unity中创建2D游戏,包括使用像素艺术创建角色动画,通过Rigidbody2D和Animator控制器管理玩家移动和动画切换,以及实现简单的碰撞检测和攻击效果。此外,还讨论了地图绘制和碰撞体设置,以及意外发现的爬墙效果作为隐藏关卡的机制。
最低0.47元/天 解锁文章
1368

被折叠的 条评论
为什么被折叠?



