Unity实现简单计算器

  1. 游戏对象(GameObjects)和资源(Assets)的区别与联系:

    • 游戏对象是在Unity场景中实际存在的实体,可以是角色、道具、相机等。它们可以拥有组件,如Transform、Renderer、Collider等,控制它们的行为和外观。

    • 资源是在Unity项目中的文件,如纹理、声音、模型、脚本等,用于创建游戏对象。资源可以在多个场景和游戏对象之间共享。

    • 联系:资源用于创建游戏对象。游戏对象可以引用资源,将资源实例化为实际游戏对象。游戏对象本身也可以被保存为资源,以便在不同场景中重用。

  2. 资源和游戏对象组织结构示例:

    这里以一款射击游戏为例:
    • 戏根目录结构

      • Assets:包含游戏中使用的所有资源,如模型、纹理、声音、动画等。

      • Scripts:包含游戏的脚本文件,用于定义游戏逻辑和行为。

      • Scenes:包含游戏场景文件,每个场景代表游戏中的一个关卡或界面。

      • Prefabs:包含预制件(Prefab),这是可以在多个场景中重复使用的游戏对象。

      • Materials:包含游戏材质的文件,用于定义游戏对象的外观。

      • UI:包含与用户界面相关的资源,如按钮、面板、字体等。

      • Audio:包含游戏中使用的音频文件。

      • Animations:包含游戏对象的动画文件。

    • 游戏对象树的层次结构

      • GameManager

        :负责整个游戏的逻辑控制。

        • Player

          :代表玩家角色。

          • PlayerModel:包含玩家的3D模型和动画。

          • PlayerController:处理玩家输入和行为。

          • PlayerHealth:管理玩家的生命值和伤害。

        • Enemies

          :包含敌人。

          • Enemy1:一个具体的敌人对象。

          • Enemy2:另一个敌人对象。

        • Items

          :包含游戏中的可交互物品。

          • HealthPickup:用于恢复玩家生命值的道具。

          • AmmoPickup:用于玩家武器的弹药道具。

  3. 使用Debug语句验证MonoBehaviour基本行为或事件触发的条件:

    csharpCopy codeusing UnityEngine;
    ​
    public class ExampleScript : MonoBehaviour
    {
        private void Awake()
        {
            Debug.Log("Awake() called");
        }
    ​
        private void Start()
        {
            Debug.Log("Start() called");
        }
    ​
        private void Update()
        {
            Debug.Log("Update() called");
        }
    ​
        private void FixedUpdate()
        {
            Debug.Log("FixedUpdate() called");
        }
    ​
        private void LateUpdate()
        {
            Debug.Log("LateUpdate() called");
        }
    ​
        private void OnGUI()
        {
            Debug.Log("OnGUI() called");
        }
    ​
        private void OnDisable()
        {
            Debug.Log("OnDisable() called");
        }
    ​
        private void OnEnable()
        {
            Debug.Log("OnEnable() called");
        }
    }
  4. GameObject、Transform和Component对象的官方描述:

    • GameObject:Unity中的基本对象,它可以包含组件,用于构建场景中的实体。

    • Transform:控制游戏对象的位置、旋转和缩放。每个游戏对象都有一个Transform组件。

    • Component:Unity游戏对象的组成部分,用于添加功能和行为。例如,Collider组件用于检测碰撞,Script组件用于编写自定义脚本。

  5. 图中table对象的属性、Transform属性和部件:

    • table对象的属性:activeSelf(激活状态)、name(名称)、tag(标签)等。

    • table的Transform属性:position(位置)、rotation(旋转)、scale(缩放)等。

    • table的部件:Renderer(渲染器)、Collider(碰撞器)、Script组件等。

  6. UML图描述GameObject、Transform和Component的关系:

  1. 资源预设(Prefabs)与对象克隆(Instantiate):

    • 预设(Prefabs)是Unity中的一个功能,允许您创建可重复使用的游戏对象模板。预设包括游戏对象及其组件,可以在多个场景中实例化。

    • 对象克隆(Instantiate)是在运行时创建游戏对象的过程,可以通过实例化预设或已存在的游戏对象来创建新的游戏对象。

  2. 预设的好处:

    • 可重复使用性:预设允许您在多个场景和不同情况下使用相同的游戏对象模板,减少了重复工作。

    • 维护性:如果您需要对游戏对象模板进行更改,只需更新预设,所有引用该预设的实例都会受到影响。

  3. 预设与对象克隆的关系:

    • 预设是游戏对象的模板,对象克隆是在运行时创建的实例。对象克隆可以基于预设创建,也可以克隆现有的游戏对象。

  4. 制作table预制并实例化成游戏对象的代码示例:

    csharpCopy codeusing UnityEngine;
    ​
    public class GameManager : MonoBehaviour
    {
        public GameObject tablePrefab; // 拖拽table预制到这个字段中
    ​
        private void Start()
        {
            // 实例化table预制成游戏对象
            GameObject tableObject = Instantiate(tablePrefab, new Vector3(0f, 0f, 0f), Quaternion.identity);
        }
    }

上述代码首先在Unity编辑器中将table预制拖放到GameManager脚本的tablePrefab字段中,然后在游戏开始时使用Instantiate函数创建一个table游戏对象的实例,设置其位置为(0, 0, 0)并使用默认旋转。

2.编程实践,小游戏

这里实现了一个简单的计算器,代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
​
public class calmulator : MonoBehaviour
{
    // Start is called before the first frame update    
    private string operand1 = "";
    private string operand2 = "";
    private string result = "";
​
    private void OnGUI()
    {
        // 创建输入框和按钮
        GUI.Label(new Rect(10, 10, 80, 20), "Operand 1:");
        operand1 = GUI.TextField(new Rect(100, 10, 100, 20), operand1, 5);
​
        GUI.Label(new Rect(10, 40, 80, 20), "Operand 2:");
        operand2 = GUI.TextField(new Rect(100, 40, 100, 20), operand2, 5);
​
        if (GUI.Button(new Rect(10, 70, 50, 30), "Add"))
        {
            CalculateSum();
        }
​
        if (GUI.Button(new Rect(60, 70, 50, 30), "Minus"))
        {
            CalculateMinus();
        }
​
        if (GUI.Button(new Rect(110, 70, 50, 30), "Times"))
        {
            CalculateTimes();
        }
​
        if (GUI.Button(new Rect(160, 70, 50, 30), "Divided"))
        {
            CalculateDivided();
        }
​
        // 显示计算结果
        GUI.Label(new Rect(10, 100, 200, 20), "Result: " + result);
    }
​
    private void CalculateSum()
    {
        float num1, num2;
        if (float.TryParse(operand1, out num1) && float.TryParse(operand2, out num2))
        {
            float sum = num1 + num2;
            result = sum.ToString();
        }
        else
        {
            result = "Invalid Input";
        }
    }
​
    private void CalculateMinus()
    {
        float num1, num2;
        if (float.TryParse(operand1, out num1) && float.TryParse(operand2, out num2))
        {
            float sum = num1 - num2;
            result = sum.ToString();
        }
        else
        {
            result = "Invalid Input";
        }
    }
​
    private void CalculateTimes()
    {
        float num1, num2;
        if (float.TryParse(operand1, out num1) && float.TryParse(operand2, out num2))
        {
            float sum = num1 * num2;
            result = sum.ToString();
        }
        else
        {
            result = "Invalid Input";
        }
    }
​
    private void CalculateDivided()
    {
        float num1, num2;
        if (float.TryParse(operand1, out num1) && float.TryParse(operand2, out num2))
        {
            float sum = num1 / num2;
            result = sum.ToString();
        }
        else
        {
            result = "Invalid Input";
        }
    }
}

首先有三个全局变量:

operand1:操作数1 operand2:操作数2

result:输出结果。

在OnGUI()事件中,先创建了对应的标签(Label)和输入框(TextField)。接着还创建了对应的4个按钮。当用户按下对应的按钮后就会触发对应的函数来进行结算结果值。

最终的界面如下:

运行后在对应的输入框中输入数字后按下按钮即可输出结果值,案例如下:

b站演示视频链接:摆烂计算器_哔哩哔哩_bilibili

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值