2D横版跳跃游戏第三节

奖励系统

-奖励的动画-
将三个素材一起拖进secens(场景)里面
然后保存方式点到animation的文件夹里,会自动生成动画
在这里插入图片描述
然后启动游戏 会发现奖励的动画会播放的很快
创建新的脚本 来改变它的旋转速度
新脚本放在刚建的奖励里
原理:用transform.Rotate来使它旋转 自定义旋转速度
public float speed = 20;//每秒旋转多少度

void Update ()
{
    transform.Rotate(-Vector3.forward * speed * Time.deltaTime);
    //改变它的旋转速度 -Vector3是因为正的会逆时针旋转 所以改成负的
}

保存脚本 启动游戏 自行调整旋转速度
-物理系统-
添加Box Collider 2D组件
添加新的标签 Aword
添加Audio Souce组件
后面会讲解为什么添加这些
竟然我们添加了Audio Souce组件 就是为了要播放音效
玩家吃掉奖励后播放的音效
在Main Camera建立新的脚本 名为AudioManager
原理:用audiow.PlayOneShot播放音效

 public static AudioManager _instance;//让其他脚本可以引用这个脚本
 public AudioClip collectibleAudioClip;//得到音源
private AudioSource audiow;//得到AudioSource组件

void Awake()
{
    _instance = this;//实例化
    audiow = this.GetComponent<AudioSource>();//获取AudioSource的组件

}

public void PlayCollectible()
{
    audiow.PlayOneShot(collectibleAudioClip);//播放一次音效
}

添加完这个脚本后 回到刚刚的奖励脚本里去
添加新函数

 public void OnTriggerEnter2D(Collider2D col)//这就是为什么之前要添加box 2D的组件
    {
        if(col.tag == "Player1")//判断碰到的标签是不是玩家//之前添加标签的原因
        {
            AudioManager._instance.PlayCollectible();//将播放音效的脚本引用到这里
            Destroy(this.gameObject);//把自己销毁
        }
    }

保存两个脚本 启动游戏 会发现吃掉奖励后 会播放音效和自动销毁奖励

敌人系统

-动画系统-
待机的动画跟上文建立奖励的动画过程一样
将素材拖进场景即可

建立run和死亡的动画
与第一节的建立玩家动画的过程一样
链接:点击我进第一节

-状态切换-
任何状态都可以切换到死亡状态 于是any state连接死亡的动画
idle和run状态可以互相切换 于是run动画和idle动画互相连接
看这里
线连好了 我们就需要条件来让他们切换
与之前一样 用布尔值的false和true来让他们切换
添加 dead 和 run的布尔值
Any State(任何状态)连接 死亡动画 的布尔值用 dead 条件为 dead 为true时
idle连接run 的布尔值用 run 条件为 run 为 true时
run 连接 idle 的布尔值 用 run 条件为 run 为false时

状态切换设置完了以后添加Box Collider2D组件
然后我们就可以开始写敌人的AI脚本了
在敌人里添加新的脚本

public class enemy : MonoBehaviour
{
    private Transform player;//存储我们的主角 建立目标
    public float attackDistance = 25;//敌人的攻击距离
    private Animator anim;//添加动画组件
	void Start () { 
        player = GameObject.FindGameObjectsWithTag("Player").transform;//通过标签找到我们的玩家
        anim = this.GetComponent<Animator>();//获得动画组件

    }
	

	void Update () {
        float distance = Vector3.Distance(player.position,transform.position);//玩家与敌人的距离
        if (distance < attackDistance)//如果玩家与敌人的距离小于攻击距离
        {
            anim.SetBool("Run", true);//切换动画效果的条件
            if (player.position.x < transform.position.x)//玩家的x坐标小于敌人的x坐标 表示玩家在敌人的左边
            {
                transform.localScale = new Vector3(-1, 1, 1);//敌人朝向左边
            } else//玩家在敌人右边时
            {
                transform.localScale = new Vector3(1, 1, 1);//敌人朝向右边
            }
        }
        else
        {
            anim.SetBool("Run", false);
        }
    }
}

至此 保存脚本 开始游戏 查看效果
会发现敌人会始终看向玩家 并且相距一定距离会播放run动画
现在添加敌人跟随玩家的脚本

public float speed = 5;//敌人追玩家的速度
下面这段插在上面代码的if语句里
Vector3 dir = player.position - transform.position;//得到主角的方向
transform.position = dir.normalized * speed * Time.deltaTime + transform.position;
//让敌人追随玩家

保存脚本 开始游戏 会发现敌人会跟着玩家了
至此 本游戏教程完成

在Unity中使用Rigidbody2D制作2D横版跳跃游戏时,控制玩家的精准移动和跳跃主要涉及到对玩家角色的Rigidbody2D组件进行编程操作。以下是一个基础的控制逻辑,它包括了水平移动和跳跃的基本实现: 1. 水平移动:通过检测玩家的输入(例如,使用左右箭头键或A/D键),你可以获取一个水平方向的移动值,并应用到Rigidbody2D的velocity属性上,以实现水平移动。例如: ```csharp void Update() { float move = Input.GetAxis("Horizontal"); // 获取水平轴上的输入 rb2d.velocity = new Vector2(move * speed, rb2d.velocity.y); // 设置水平速度 } ``` 2. 跳跃:为了实现跳跃,你需要检测跳跃键(例如空格键)的按下,并在条件满足的情况下给角色施加向上的力。你还需要判断角色是否站在地面上,这通常涉及到碰撞检测。以下是跳跃的简单实现: ```csharp public float jumpForce = 700f; // 跳跃力 public Transform groundCheck; // 地面检测点的位置 public float checkRadius = 0.3f; // 检测半径 public LayerMask whatIsGround; // 什么层被认为是地面 bool isGrounded; // 角色是否在地面上 void Update() { // 检测是否在地面 isGrounded = Physics2D.OverlapCircle(groundCheck.position, checkRadius, whatIsGround); if (isGrounded && Input.GetButtonDown("Jump")) // 如果玩家按下跳跃键且在地面 { rb2d.AddForce(new Vector2(0f, jumpForce)); // 向上施加力 } } ``` 3. 跳跃缓冲:为了使跳跃更加真实,可以加入一个短暂的时间窗口,在这个窗口内,即使玩家松开跳跃键,角色仍然可以继续上升,这被称为跳跃缓冲。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值