首页 > 其他分享 >暑期游戏案例---滚小球

暑期游戏案例---滚小球

时间:2023-07-23 22:00:13浏览次数:42  
标签:void 小球 System 暑期 transform --- Collections using public

游戏名称:滚小球

游戏玩法:玩家按下WASD操作小球进行方向移动,小球滚动撞击到场景中的金币后即收集成功,场景中所有金币收集完成后通关。

游戏实现

①小球移动

脚本:

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

public class PlayerController : MonoBehaviour
{
    public float moveForce;
    Rigidbody rb;


    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    void Update()    //每帧都要检测输入,故写在Update()
    {
        float h = 0;
        float v = 0;
        h =-Input.GetAxis("Horizontal");//右→1,左→-1,不按→0
        v =-Input.GetAxis("Vertical");

        rb.AddForce(new Vector3(h, 0, v).normalized * moveForce);
    }
}

注:需要在小球的Inspector中加入Rigidbody组件,设置moveForce的大小

 

 

②硬币的旋转、碰撞消失

脚本:

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

public class Coin : MonoBehaviour
{
    public float rotateSpeed;   

    void Update()
    {
        transform.Rotate(transform.right * rotateSpeed * Time.deltaTime);
    }

    private void OnTriggerEnter(Collider other)
    {
        Destroy(gameObject);
        FindObjectOfType<GameManager>().AddScore();
    }
}

注:硬币的Box colider组件中要勾选Is Trigger,使它成为触发器,设置rotateSpeed的大小

 

 

③得分系统、游戏音效

脚本:

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

public class GameManager : MonoBehaviour
{
    public TextMeshProUGUI scoreText;
    public GameObject winText;

    int score;
    int scoreToWin;

    public Transform GoldCoin;
    AudioSource au;

    public AudioClip getCoinFX;
    public AudioClip winFX;

    void Start()
    {
        au = GetComponent<AudioSource>();
        winText.SetActive(false);
        scoreToWin = GoldCoin.childCount;
    }

    public void AddScore()
    {
        au.clip = getCoinFX;
        au.Play();
        score++;
        scoreText.text = "Count: " + score;

        if(score>=scoreToWin)
        {
            winText.SetActive(true);
            au.clip = winFX;
            au.Play();
        }
    }
}

注:设置好对应资源后,对应拖拽到组件中,如下图

 

④小地图、摄像头跟随

脚本(小地图):

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

public class Marker : MonoBehaviour
{
    Transform parent;
    Vector3 angle;

    void Start()
    {
        parent = transform.parent;
        angle = transform.eulerAngles;
    }


    void Update()
    {
        transform.eulerAngles = angle;
        transform.position = parent.position + Vector3.up;
    }
}

注:小地图需要一个marker标记,脚本中会将marker相对小球的角度固定住

脚本(摄像头跟随):

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

public class CameraFollow : MonoBehaviour
{
    public float smoothFollowSpeed;
    Vector3 offset;
    public Transform target;
    
    // Start is called before the first frame update
    void Start()
    {
        offset = target.position - transform.position;
    }

    private void LateUpdate()
    {
        Vector3 targetPos = target.position - offset;
        transform.position = Vector3.Lerp(transform.position, targetPos, smoothFollowSpeed);
    }
}

注:设置smoothFollowSpeed大小,选取对应Target

游戏截图:

 

 

 感谢b站up主OneCredit,帮助我成功入门这款小游戏,讲得非常好!

传送门:BV1RZ4y1n7Ro,BV1va4y1v7bE

标签:void,小球,System,暑期,transform,---,Collections,using,public
From: https://www.cnblogs.com/mklearn-u3d/p/17575928.html

相关文章

  • Kafka核心API -- Connect
    Connect基本概念KafkaConnect是Kafka流式计算的一部分KafkaConnect主要用来与其他中间件建立流式通道KafkaConnect支持流式和批量处理集成 环境准备创建两个表createtableusers_bak(`uuid`intprimarykeyauto_increment,`name`VARCHAR(20),`ag......
  • 牛客多校第二场-H
    H-0and1inBIT op1-->-x-1op2-->x+1由线性代数知识推每次操作要乘的矩阵,线段树维护一个矩阵信息 [op,d,1]就是代表一个f(x)=kx+b的方程,根据线性代数知识用矩阵表示该方程->f(x)=op*x+d,最后一个1只是凑矩阵用的,f代表该矩阵,因为刚开始就是x,所以op=1,d=0 #inclu......
  • mii-tool
    mii-tool配置网络设备协商方式的工具补充说明mii-tool命令是用于查看、管理介质的网络接口的状态,有时网卡需要配置协商方式,比如10/100/1000M的网卡半双工、全双工、自动协商的配置。但大多数的网络设备是不用我们来修改协商,因为大多数网络设置接入的时候,都采用自动协商来解决......
  • shell脚本-入侵检测与告警
    shell脚本-入侵检测与告警原理利用inotifywait命令对一些重要的目录作一个实施监控,例如:当/root、/usr/bin等目录发生改变的,利用inotifywait看可以对其作一个监控作用。inotifywait介绍inotifywait是一个Linux下的命令行工具,用于监视文件系统的变化。它基于inotify机......
  • Python入门 - 路径,文件夹
    路径#分隔符print(os.pathsep)#;print(os.altsep)#/print(os.extsep)#.#拼接print(os.path.join("a","b","c"))#a\b\c#绝对路径print(os.path.abspath("a/b/c"))#C:\Users\win\PycharmProjects\myTest\a\b\c......
  • Python入门 - 位运算
     a=0b1101b=0b1010print(a,b)#1310#与print(bin(a&b))#0b1000#或print(bin(a|b))#0b1111#异或print(bin(a^b))#0b0111,位不同的为1,相同的为0#非print(bin(~a))#-0b1110,-(a+1)#左移print(bin(a<<1))#0b11010#右移prin......
  • Shell编程教程 - 字符串变量表达式
    1.字符串变量表达式基本比较示例脚本-`string_comparison.sh`字符串长度检查示例脚本-`string_length.sh`逻辑运算符连接表达式示例脚本-`logical_operators.sh`2.执行示例脚本3.结论大树哥个人信息本教程将向你介绍Shell脚本中字符串变量表达式的使用。我们将学习如何......
  • 【雕爷学编程】Arduino动手做(168)---ATTINY85迷你USB开发板2
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞......
  • 2-8 编写一个函数 rightrot(x, n),该函数返回将 x 循环右移(即从最右端 移出的位将从最
    ArchlinuxGCC13.1.1 202304292023-07-2319:59:05星期日 点击查看代码#include<stdio.h>#include<stdint.h>intrightrot(unsignedintx,intn){uint8_ttmp;while(n>0){tmp=(x&1)<<7;//0000000......
  • 【雕爷学编程】Arduino动手做(168)---ATTINY85迷你USB开发板
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞......