使用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
写“分数”