是男人就下100层


一、 介绍

在这里插入图片描述

主角左右移动,往下跳,可以获得道具、获得分数
出界后游戏结束

二、 知识点

1.纹理图片不间断播放
 bg.material.SetTextureOffset("_MainTex", new Vector2(0, Time.time / 5));

2.给组件添加脚本的另一种方式
 gameobject.AddComponent<>();  

3.animator控制器的操作

4.取消动画连播的两种:1写脚本停止 2取消loop

5.结束游戏   UnityEditor.EditorApplication.isPlaying = false;

三、 游戏控制器

设置图片不断向下运动的效果
生成不同形状的云彩
生成实云彩、虚云彩(不可踏)
生成2种奖励:金币、生命值
记录分数
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class GameManage : MonoBehaviour {
    // 定义私有变量
    private Image bg;  // 背景图像
    private GameObject[] clouds;  // 云的预制体数组
    private GameObject[] awards;  // 奖励物品的预制体数组
    private Transform gameCanvas;  // 游戏画布的 Transform 组件
    private int count;  // 层数计数器
    public Text Count;  // 显示层数的文本组件

    void Start () {
        // 初始化变量
        bg = GameObject.Find("BG").GetComponent<Image>();
        clouds = Resources.LoadAll<GameObject>("Clouds");
        awards = Resources.LoadAll<GameObject>("Awards");
        gameCanvas = GameObject.Find("GameCanvas").transform;
        InvokeRepeating("CreateAll", 0, 1);  // 重复调用 CreateAll 函数
        count = 0;
    }

    void Update () {
        // 更新背景图像的偏移量和层数文本的显示内容
        bg.material.SetTextureOffset("_MainTex", new Vector2(0, Time.time / 5));
        Count.text = "层数:" + count.ToString();
    }

    // 生成云和奖励物品的函数
    private void CreateAll()
    {
        // 随机生成 0 到 4 的整数
        int rangeNum = Random.Range(0, 5);
        GameObject tempObject = null;
        if (0 == rangeNum)  // 如果随机数为 0,则生成乌云
        {
            tempObject = clouds[3];
        }
        else  // 否则随机生成一种云的预制体
        {
            tempObject = clouds[Random.Range(0, clouds.Length - 1)];
        }
        // 在随机位置生成云对象
        GameObject clude = Instantiate(tempObject, new Vector3(Random.Range(-340, 341), -800, 0), Quaternion.identity);
        clude.transform.SetParent(gameCanvas, false);  // 设置云对象的父对象为游戏画布
        GameObject award = CreateAward();  // 生成奖励物品
        if (award != null)  // 如果生成了奖励物品,则将其设置为云对象的子对象
        {
            Instantiate(award, new Vector3(0, 40, 0), Quaternion.identity).transform.SetParent(clude.transform, false);
        }
        clude.AddComponent<CloudsMove>();  // 在云对象上添加 CloudsMove 组件
        count++;  // 层数计数器加一
    }

    // 生成奖励物品的函数
    private GameObject CreateAward()
    {
        // 随机生成 0 到 8 的整数
        int num = Random.Range(0, 9);
        GameObject temp = null;
        if (0 == num)  // 如果随机数为 0,则生成金币
        {
            temp = awards[1];
        }
        else if (0 < num && num < 4)  // 如果随机数为 1、2、3,则生成钻石
        {
            temp = awards[0];
        }
        else  // 否则不生成奖励物品
        {
            temp = null;
        }
        return temp;  // 返回生成的奖励物品
    }

}

四、 玩家移动

制作行走动画
添加分数
添加生命值


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class PlayerControl : MonoBehaviour {
    // 定义私有变量
    private Animator ani;  // 动画控制器
    private int life;  // 生命值
    private int grade;  // 分数

    public Text Life;  // 显示生命值的文本组件
    public Text Grade;  // 显示分数的文本组件

    void Start() {
        // 初始化变量
        ani = GetComponent<Animator>();
        life = 1;
        grade = 0;
    }

    void Update() {
        // 判断是否超出屏幕范围,如果是则减少一点生命值,并将玩家移回屏幕中央
        if (Mathf.Abs(transform.localPosition.y) >= 800) {
            life--;
            transform.localPosition = new Vector3(0, 600, 0);
        }
        // 如果生命值小于等于 0,则停止游戏
        if (life <= 0)
            UnityEditor.EditorApplication.isPlaying = false;
        Move();  // 玩家移动
        // 更新生命值和分数的显示内容
        Life.text = "生命:" + life.ToString();
        Grade.text = "分数:" + grade.ToString();  
    }

    // 玩家移动的方法
    private void Move() {
        float h = Input.GetAxis("Horizontal");  // 获取玩家在水平方向上的输入
        if (Mathf.Abs(h) > 0.1f) {  // 如果输入的值大于 0.1,则表示需要移动
            if (h > 0)
                transform.localRotation = Quaternion.Euler(0, 0, 0);  // 如果输入值大于 0,则让玩家面向右侧
            else
                transform.localRotation = Quaternion.Euler(0, 180, 0);  // 如果输入值小于 0,则让玩家面向左侧

            // 根据输入的值和时间差,计算玩家应该移动的距离,并让玩家移动
            transform.Translate(h * transform.right * 5 * Time.deltaTime);
            ani.SetBool("Run", true);  // 设置动画状态为跑步
        }
        else {
            ani.SetBool("Run", false);  // 如果没有移动,则设置动画状态为停止
        }
    }

    // 当玩家与其他物体发生碰撞时,会调用这个方法
    public void OnTriggerEnter2D(Collider2D other) {
        if (other.tag == "Gold") {  // 如果碰到的物体是金币,则增加分数
            grade += 10;
        }
        else if (other.tag == "Life") {  // 如果碰到的物体是生命值,则增加生命值
            life++;
        }
        Destroy(other.gameObject);  // 销毁碰到的物体
    }
}

五、 云彩移动

云彩不断向上运动
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CloudsMove : MonoBehaviour {
	void Start () {
		
	}
	void Update () {
        transform.Translate(Vector3.up * Time.deltaTime * 3);
	}
}


六、 下载工程文件

https://wwez.lanzoul.com/iWorG0tgsala


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
男人就下100游戏源码,经典的flash游戏《是男人就下100》登录win8平台了,支持surface 以及 surface pro, 操作方式支持键盘左右键和触摸操作,该游戏现在android版,ios版已经上线了,但是wp版现在才开发的,喜欢的朋友可以了解一下吧。 项目介绍 这毕竟是个小游戏,本身其实没有什么技术难点,主要在于项目的设计,分为如下几个小模块 1、玩家 (Player) 玩家类我用了单例模式,继承自CCSprite,因为贯穿游戏一直会有玩家存在,在这个版本里也不会有第二个,所以单例成了我很好的选择。 封装了 运动、血量 等。整体的游戏运动采取了背景运动而人不动的方式,感觉在这里这种要更容易掌控一些,分很明显。 2、平台 这里我参照了 Floyd 的Js版本实现,以 BlockBase 作为所有平台游戏的基类,实现了向上运动,检测玩家碰撞,移除平台等基础功能。 然后根据不同的平台类型,继承该基类实现不同效果,比如跳起,伤害,左右平移等。 分别有:NormalBlock (最普通的平台) 、FlipBlock(让人弹跳的平台)、MissBlock(会破损的平台)、ThornBlock(带刺的平台)、LeftRunBlock、RightRunBlock (左右运动的平台) 还有个 BlockFactory 工厂类, 负责在恰当的时候创建合适的平台,创建的规则是随机类型,位置是从预先定义的几个里面随机取。 对于所有平台的管理, 本来最好应该是做个缓存池的,但是我发现这个性能降低实在是可以忽略,所以。。。 3、输入 输入这里,定义了一个基类,InputBase,因为最终肯定有几种输入的方式:PC(键盘、鼠标)、手势、重力感应等,所以这个从一开始就要考虑到。具体的处理方式是 给定一个固定的运动速度, 然后有输入事件的时候就让玩家按照这个速度来运行, 但是现在实际的效果感觉还不太理想。 4、场景 场景就是那么基础的几个了。。。游戏主界面采用了MVC的模式来设计,CCScene 作为 Controller ,其它的Layer 作为View。其它页面都比较简单,单Layer 实现。逻辑也都放在Layer里了。 另外,专门定义了一个 HideLayer ,目的是实现弹出对话框的效果,考虑到原场景中可能会有CCMenu,我将该 Layer 的 优先级设为了 与 CCMenu 相同,因为后添加的原因,所以总能屏蔽 Menu 的事件, 而且在 Layer 上再添加Menu 也不会有问题。 还有个比较有意思的是: 所有的场景我都继承了 IBackableScene 接口,这是我自己定义的一个抽象类,因为我发现对于 “后退” 按钮的处理在游戏中是非常常见的,所以这个接口里定义了 bool GoBack() = 0 函数, 所有需要响应后退事件的场景都要实现该方法,然后在该方法里实现具体的返回 代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

忽然602

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值