制作保龄球游戏

有加分管理、碰撞检测、控制保龄球发射的代码

1.先搭建场景,建立地面(plane)防止保龄球超过跑到落入深渊,跑道(cube),保龄球(sphere),球瓶(capsule,这里简单的选这个,如果想更像可以用样条线旋转或放样制作)。

2.为了使球瓶被撞倒,需要为它加上刚体(rigibody),球瓶需要将rigibody的重力(use gravity)关上,关于重力(mass)可按生活自行调节,保龄球也需要加刚体(如果不加,球停不下来,因为球加不上力)

3.开始创建代码脚本,将代码赋予保龄球(此处代码是Z轴移动,需要保证保龄球方向朝向球瓶,如果方向相反,则要改变坐标轴方向,或者改变代码方向,还有可以重做保龄球)。下面是控制保龄球的代码

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

public class RoleControl : MonoBehaviour
{
    // 1.玩家控制一个保龄球,按下空格键,开始发射
    //拿到物体
    GameObject MainRole;//变量名字与场景名字无关,无需赋值
    Rigidbody Onerigi;
    public float ForceDATA = 100f;//public添加上可以在外边改变力的大小
    bool isDown = true;
    void Start()
    {
        MainRole = GameObject.Find("Baolingqiu");//此处需与场景名字一致
    }

    void Update()
    {
        if (Input.GetKey(KeyCode.Space) && isDown)//如果用户按下空格键)
        {
            //开始添加力给保龄球(需要先拿刚体组件刚体),要想拿先要存
            Onerigi = MainRole.GetComponent<Rigidbody>();//获取组件
            Onerigi.AddForce(new Vector3(0, 0, -1) * ForceDATA, ForceMode.Impulse);//添加力和方向
            isDown = false;//用户只能按一次
        }
    }
}

4.以2D形式在屏幕上显示加分。创建一个新脚本来进行加分,点UI文本,以2D模式改变得分框(新建文本框都会弹出一个窗口,选择点击如图所示),然后改变颜色,此处UI文本框的运用需要在代码中执行。

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

public class ScoreManager : MonoBehaviour
{
    // 如果撞倒了花瓶就加分
    //挂在物体上才能使用(物体没有要求,这里创建了空物体)
    TMP_Text OneWenBen;
    GameObject wenben;
    public static int currentScore = 0;//静态的,需在另一个代码中访问它


    private void Start()
    {
        wenben = GameObject.Find("Text (TMP)");//存储文本框
        OneWenBen = wenben.GetComponent<TMP_Text>();//获取组件
    }


    private void LateUpdate()//later是为了让加分发生在碰撞后
    {
        Debug.Log("恭喜你!得分了!你的分数是:" + currentScore);
        OneWenBen.text = "Score:" + currentScore.ToString();//使文本框实时存储分数
    }
}

5.创建一个专门检测碰撞的脚本。(此游戏我将碰撞代码、得分代码(加分的代码是随意的,也可挂在其他或者空物体上)、球的移动代码都赋予球身上)

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

public class CollisionTest : MonoBehaviour
{
    // 碰撞检测
    //这个是触发检测
    //private void OnTriggerEnter(Collider other)//other就是发生了碰撞,把谁存起来
    //{
    //发生了碰撞
       // ScoreManager.currentScore += 1;
       // Debug.Log("开始碰撞");
       // Debug.Log(other.gameObject.name);
   // }以上代码有问题可以不需要

    //这个是碰撞检测
    private void OnCollisionEnter(Collision collision)
    {
        Debug.Log("开始碰撞");
        if(collision .collider .gameObject .name!="Cube"&&collision.collider.gameObject.name != "Plane")
        {
            ScoreManager.currentScore += 1;//通知分数管理器类加分,两个类之间相互访问变量
        }
        Debug.Log(collision.collider.gameObject.name);
    }
}

目前来说这个游戏还有一些bug,就是假设你设置的保龄球撞击,它的分数记的是保龄球撞到的并且碰到的球瓶数量,而非保龄球撞击后倒下的球瓶数,也就是说哪怕球瓶全倒了,也可能不会是满分

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值