【无标题】使用Unity引擎制作弹珠移动游戏、物体消失以及UI显示物体消失个数

使用Unity引擎制作弹珠移动游戏、物体消失以及UI显示物体消失个数

一、入门的弹珠移动游戏

在Unity中制作弹珠移动游戏非常简单。首先,创建一个新的3D项目,并添加一个球体(Sphere)对象作为玩家控制的弹珠。为了能够让弹珠移动,我们需要添加一个Rigidbody组件,并勾选“Is Kinematic”选项。

创建一个新的C#脚本,命名为“qiuyidon”,并将其附加到小球对象上。在脚本中,我们可以添加一些代码来控制小球的移动。例如,使用键盘输入来控制小球的移动方向和速度。

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

public class qiu : MonoBehaviour
{
    public Rigidbody rg;
    // Start is called before the first frame update
    void Start()
    {
        rg = GetComponent<Rigidbody>();
    }

    // Update is called once per frame
    void Update()
    {
        float h = Input.GetAxis("Horizontal");
        float v = Input.GetAxis("Vertical");
        rg.AddForce(new Vector3(h, 0, v));

    }
    private void OnCollisionEnter(Collision collision)
    {
        Debug.Log("开始发生");
    }
    private void OnCollisionStay(Collision collision)
    {
        Debug.Log("持续发生");
    }
    private void OnCollisionExit(Collision collision)
    {
        Debug.Log("结束碰撞");
    }
}
 

二、用于控制角色在场景中的移动、跳跃和得分。当按下特定的按键时,角色会向前或向后移动,向上跳跃,并与食物进行碰撞以增加分数。触发器碰到的物体标签为"food",则销毁该物体,增加分数,当分数达到13分时,会显示胜利条件。

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

public class Move : MonoBehaviour
{
    // 定义文本对象用于显示分数
    public Text fenshu;
    // 初始化分数为0
    public int score = 0;
    // 定义胜利条件显示对象
    public GameObject shengli;
    // 获取角色的刚体组件
    private Rigidbody rg;
    // 判断角色是否在地面上
    private bool isground = false;
    // 获取角色的Transform组件
    private Transform player;
    // Start方法在第一个帧更新之前被调用
    void Start()
    {
        rg = GetComponent<Rigidbody>();
        player = transform;
    }

    // Update方法每帧被调用一次
    void Update()
    {
        // 如果按下左Shift键且W键,则向前移动5个单位
        if (Input.GetKey(KeyCode.LeftShift))
        {
            if (Input.GetKey(KeyCode.W))
            {
                player.Translate(Vector3.forward * 5.0f * Time.deltaTime);
            }
        }
        // 如果W键未按下,则向前移动3个单位
        else
        {
            if (Input.GetKey(KeyCode.W))
            {
                player.Translate(Vector3.forward * 3.0f * Time.deltaTime);
            }
        }

        // 如果按下S键,则向后移动3个单位
        if (Input.GetKey(KeyCode.S))
        {
            player.Translate(Vector3.back * 3.0f * Time.deltaTime);
        }
        // 如果按下A键,则向左移动3个单位
        if (Input.GetKey(KeyCode.A))
        {
            player.Translate(Vector3.left * 3.0f * Time.deltaTime);
        }
        // 如果按下D键,则向右移动3个单位
        if (Input.GetKey(KeyCode.D))
        {
            player.Translate(Vector3.right * 3.0f * Time.deltaTime);
        }

        // 如果空格键被按下且角色在地面上,则向上施加200牛顿力
        if (Input.GetKeyDown(KeyCode.Space) && isground)
        {
            rg.AddForce(Vector3.up * 200);
        }
    }

    // OnTriggerEnter方法在触发器进入碰撞区域时被调用
    private void OnTriggerEnter(Collider other)
    {
        // 如果触发器碰撞到的对象标签为"food",则销毁该对象并增加分数
        if (other.gameObject.tag == "food")
        {
            Destroy(other.gameObject);
            score++;
            fenshu.text = "分数:" + score; // 更新分数显示文本
            // 如果分数达到13,激活胜利条件显示对象
            if (score == 13)
            {
                shengli.SetActive(true);
            }
        }
    }

    // OnCollisionEnter方法在角色与物体发生碰撞时被调用
    private void OnCollisionEnter(Collision collision)
    {
        // 如果碰撞到的对象标签为"ground",则将isground设置为true
        if (collision.collider.tag == "ground")
        {
            isground = true;
        }
    }

    // OnCollisionExit方法在角色离开物体碰撞区域时被调用
    private void OnCollisionExit(Collision collision)
    {
        // 如果离开的物体标签为"ground",则将isground设置为false
        if (collision.collider.tag == "ground")
        {
            isground = false;
        }
    }
}

添加标签

添加ui,点击右键ui添加文本。按住AIT+鼠标点击右上角ui

写“分数”

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,您需要实现的功能是使用Unity中的PICO手柄,当手柄射线悬停在物体上时,显示UI,并且当手柄移开时,隐藏UI。下面是一个简单的实现思路: 1. 在场景中创建一个空对象,作为射线起点。 2. 在手柄上添加一个射线检测组件,并设置射线起点为步骤1中的空对象。 3. 在需要悬停显示UI物体上添加一个Collider组件,并设置其为可触发。 4. 当手柄射线检测到物体时,获取物体上的UI组件,并将其显示出来。 5. 当手柄移开物体时,隐藏UI组件。 下面是示例代码: ```csharp using UnityEngine; public class HoverUI : MonoBehaviour { public Transform rayOrigin; //步骤1中的空对象 public float rayDistance = 10f; //射线检测距离 public LayerMask layerMask; //检测层级 private GameObject currentObject; //当前悬停的物体 private GameObject currentUI; //当前物体上的UI组件 void Update() { RaycastHit hit; if (Physics.Raycast(rayOrigin.position, rayOrigin.forward, out hit, rayDistance, layerMask)) { if (hit.collider.gameObject != currentObject) { currentObject = hit.collider.gameObject; currentUI = currentObject.GetComponent<Canvas>().gameObject; currentUI.SetActive(true); } } else { if (currentUI != null) { currentUI.SetActive(false); currentObject = null; currentUI = null; } } } } ``` 需要注意的是,上述代码中使用了Canvas组件作为UI显示容器,您需要在需要显示UI物体上添加一个Canvas组件,并在其下添加需要显示UI元素。此外,您还需要将需要检测的物体设置为可触发,例如添加一个BoxCollider组件。 希望这能对您有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值