ui金币收集效果

很多时候我们需要做一个金币移动效果。

比如,点击某个按钮之后,按钮附近出现各种零散的金币,然后他们都会向着显示金币的框框飞。

一般如果按钮都是固定的话,那么可以直接使用一个例子系统,然后调整好方向和速度,就可以达到要求!但是呢,有时候我们需要在很多地方都会使用这个效果。

一开始,我也是打算自己写一个类去自动生成一个个的小Image,然后里面加逻辑去控制他们移动。后面写到一半,感觉实在太费事了,为什么就不能控制粒子系统里面粒子移动呢?

于是在官方文档看到这个控制粒子属性的方法,还挺方便的,在这里贴一下。

自己写了一个类去控制,不用去记录粒子的位置,可是省了很多麻烦哦~

[RequireComponent(typeof(ParticleSystem))]
public class ParMove : MonoBehaviour {
    ParticleSystem par;
    ParticleSystem.Particle[] arrPar;
    int arrCount = 0;
    public RectTransform target;//指向要移动的目的
    public float speed = 0.1f;
    void Awake()
    {
        par = GetComponent<ParticleSystem>();
        arrPar = new ParticleSystem.Particle[par.main.maxParticles];
    }
    void Update () {
        if (target && par && par.isPlaying){
            arrCount = par.GetParticles(arrPar);//获取到当前激活的粒子
            Vector3 pos = Vector3.zero;
            for(var i=0;i<arrCount;i++){
                arrPar[i].position = Vector3.Lerp(arrPar[i].position, pos, speed);//设置他们的位置
            }
            par.SetParticles(arrPar, arrCount);//再把更新过的粒子数据设置回去
        }
    }
    public void Play(){
        if (par.isStopped){
            par.Play(true);//供外边调用
        }
    }
}

我加了一个target指向移动目的地,开始不知道怎么回事,移动的老是不对,这是因为他们的坐标系不同,所以需要转换一下。

我这里后面再次加了一个设置Target的函数,然后在里面做了设置,主要是将粒子生成的空间改成和target是一样的,这样就只要让粒子都移动到0,0,0的位置就可以了

public void SetTarget(RectTransform transform){
        target = transform;
        ParticleSystem.MainModule module = par.main;//更改生成的空间,使用自定义的
        module.simulationSpace = ParticleSystemSimulationSpace.Custom;
        module.customSimulationSpace = transform;//把target设置给它
    }
    public void Play(RectTransform transform){//新加了一个play,可以根据不同需求去设置并且播放。
        SetTarget(transform);
        Play();
    }

这些都做好之后,我后面还加了一个碰撞区域,是用来让粒子产生碰撞,自动消失的。想想粒子飞到金币框之后,是不是要让他消失呢,所以需要在target对象上面添加一个box collider 2d组件,不然粒子会超过金币框,知道它的生命时间终结为止哦。
最后把粒子系统的Trigger打上勾,如下图所示:

 

Colliders 要设置成金币框,这个其实也可以在代码中设置,我是都固定飞往一个地方,所以直接在编辑器中设置了。

好了,到此,本效果就新鲜出炉啦~

看看效果,金币不会超过哟~它们会在碰到框框之后小时,因为上面我选择的是Kill。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,接金币小游戏可以使用Python的pygame库来实现。以下是一个简单的示例代码: ```python import pygame import random # 初始化pygame pygame.init() # 设置屏幕大小和标题 screen_width = 500 screen_height = 500 screen = pygame.display.set_mode((screen_width, screen_height)) pygame.display.set_caption("Catch the Coin Game") # 加载图片 player_img = pygame.image.load("player.png") coin_img = pygame.image.load("coin.png") # 设置玩家和金币的初始位置和速度 player_x = 200 player_y = 450 player_speed = 5 coin_x = random.randint(0, screen_width-50) coin_y = 0 coin_speed = 2 # 定义字体 font = pygame.font.Font(None, 36) # 游戏主循环 game_running = True score = 0 while game_running: # 处理事件 for event in pygame.event.get(): if event.type == pygame.QUIT: game_running = False # 移动玩家 keys = pygame.key.get_pressed() if keys[pygame.K_LEFT]: player_x -= player_speed if keys[pygame.K_RIGHT]: player_x += player_speed # 移动金币 coin_y += coin_speed if coin_y > screen_height: coin_x = random.randint(0, screen_width-50) coin_y = 0 score += 1 # 检测是否接到金币 if player_x < coin_x + 50 and player_x + 50 > coin_x and player_y < coin_y + 50 and player_y + 50 > coin_y: coin_x = random.randint(0, screen_width-50) coin_y = 0 score += 1 # 绘制屏幕和元素 screen.fill((255, 255, 255)) screen.blit(player_img, (player_x, player_y)) screen.blit(coin_img, (coin_x, coin_y)) score_text = font.render("Score: " + str(score), True, (0, 0, 0)) screen.blit(score_text, (10, 10)) pygame.display.update() # 退出游戏 pygame.quit() ``` 在该示例中,玩家需要通过左右键控制移动,接住下落的金币。每接到一个金币,分数就加一。如果金币落到屏幕底部,则重新随机生成一个位置。游戏结束后,退出pygame。 请注意,该示例代码中使用的图片需要自己准备,并且要与代码文件放在同一目录下。 ### 回答2: Python 接金币小游戏规则很简单:主要目标是通过控制一个角色来接住飞下来的金币。下面我来介绍一下这个游戏的基本设计和实现过程。 首先,我们需要使用 Python 编程语言创建游戏窗口和游戏角色。可以使用 Pygame 这个库来实现窗口的创建和角色的绘制功能。 接下来,我们需要定义金币的属性,包括位置、下落速度和得分。我们可以使用一个列表来储存金币对象,并在每个游戏帧中更新它们的位置。 然后,我们需要实现主角的控制功能。可以使用键盘输入事件来实现主角的左右移动功能。当主角与金币接触时,得分增加,金币对象从列表中移除。 在游戏过程中,我们需要实现游戏的计时和得分统计功能。可以使用计时器来控制金币的产生速度,并在游戏结束时显示得分。 最后,我们需要实现游戏的循环。在每个游戏帧中,我们需要更新金币的位置,检测主角与金币的碰撞,并绘制游戏界面。当游戏结束条件满足时,退出游戏循环。 总的来说,Python 接金币小游戏需要使用 Pygame 创建游戏窗口和角色,实现金币的下落和主角的控制功能,并在游戏过程中计时和统计得分。通过以上步骤,我们就可以完成这个小游戏的实现了。 ### 回答3: Python接金币小游戏是一款简单而有趣的游戏,通过编写Python代码来实现。在游戏开始时,玩家控制一个角色来收集不断下落的金币。 首先,我们需要创建一个窗口来显示游戏画面。可以使用Python的游戏库,例如Pygame库,来实现这一点。然后,我们可以设置角色的初始位置,并将其绘制到窗口上。 接下来,我们需要编写代码来使金币不断地下落,并处理角色与金币的碰撞。可以通过使用循环和计时器来控制金币的下落速度和生成频率。当角色接到金币时,可以记录得分,并更新得分显示。 在游戏中还可以添加一些额外的功能,如障碍物的出现、特殊道具的获取和使用等。这可以通过引入更多的对象和事件处理来实现。例如,可以创建障碍物和特殊道具的类,并为它们设置相应的行为和碰撞效果。 最后,我们还需要设置游戏结束的条件。可以根据玩家的得分或生命值来判断游戏是否结束,并在游戏结束时显示最终得分。 通过编写Python代码来实现接金币小游戏,不仅可以锻炼对Python语言的理解和运用,还可以培养逻辑思维和动手能力。此外,通过添加更多的功能和优化游戏体验,可以不断提高自己的编程能力和创造力。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值