Unity(2022.3.38LTS) - 初步学习C#

news2025/1/12 8:37:36

目录

一. C#简介

二. 配置代码编辑器

三. C#基本语法

四. 创建脚本

创建C#脚本的方式

1. 在文件夹新建

2. 直接在物体组件创建

五. 例子

扩展物体旋转的方式:



一. C#简介

Unity 中使用的 C# 是一种面向对象的编程语言,具有强大的功能和广泛的应用。

特点

  1. 类型安全:在编译时进行严格的类型检查,减少运行时错误。
  2. 面向对象:支持类、对象、继承、多态等面向对象的特性,使得代码组织更加清晰和可维护。
  3. 丰富的库和框架:.NET 框架提供了大量的类库,方便实现各种功能。

在 Unity 中的应用

  1. 控制游戏逻辑:编写脚本控制游戏对象的行为、状态和交互。
  2. 处理用户输入:响应玩家的操作,如键盘、鼠标输入等。
  3. 实现动画效果:通过代码控制动画的播放、暂停和切换。

基本语法

  1. 变量声明:int age = 25;
  2. 控制结构:包括 if-else 条件语句、for 循环、while 循环等。
  3. 类和对象:
class Player
{
    public int health;
    public void TakeDamage(int damage)
    {
        health -= damage;
    }
}

优势

  1. 高效性能:能满足 Unity 游戏开发中对性能的要求。
  2. 良好的可读性和可维护性:规范的语法结构有助于团队协作和代码维护。

例如,在一个射击游戏中,可以使用 C# 编写脚本实现敌人的生成逻辑、玩家的射击动作以及得分计算等功能。

二. 配置代码编辑器

编辑 ->首选项

外部工具 -> 外部脚本编辑器

选择vs2022.

可以用vsCode,也可以用Rider for Unity.但是用这俩的前提是最好熟练使用vs2022了.新手还是用vs2022比较好.

我还买了这个,但是基本上还都是再用vs2022.

三. C#基本语法

变量声明

int score = 100;  // 整数类型
float speed = 5.5f;  // 单精度浮点数类型,后缀 f 表示单精度
string name = "Player1";  // 字符串类型
bool isAlive = true;  // 布尔类型

数组声明

int[] numbers = {1, 2, 3, 4, 5};  // 整数数组
string[] names = new string[3];  // 声明一个长度为 3 的字符串数组

if-else 语句

if (score > 50)
{
    Debug.Log("High score!");
}
else
{
    Debug.Log("Low score.");
}

for 循环

for (int i = 0; i < 10; i++)
{
    Debug.Log(i);
}

while 循环

int count = 0;
while (count < 5)
{
    Debug.Log(count);
    count++;
}

类和对象

class Player
{
    public int health;

    public void TakeDamage(int damage)
    {
        health -= damage;
    }
}

Player player = new Player();
player.health = 100;
player.TakeDamage(20);

方法

public void MovePlayer(Vector3 direction)
{
    // 实现移动玩家的逻辑
}

函数

public int Add(int num1, int num2)
{
    return num1 + num2;
}

例如,在一个 Unity 游戏中,您可以使用 if 语句根据玩家的生命值决定是否显示游戏结束界面:

if (player.health <= 0)
{
    Debug.Log("Game Over");
    // 显示游戏结束的相关界面
}

有其他语言基础的,看这个一遍,就能写C#了,新手先简单了解一下,知道有这么个东西,后面就是熟能生巧了,死记硬背,忘的也快.在unity中使用,还是用Unity的API更多,很多方法和控制都给封装好了.

四. 创建脚本

在层级页面,右键,选择3D对象->立方体

创建C#脚本的方式

1. 在文件夹新建

右键创建->c#脚本

输入名字即可.

这种方式创建的脚本,需要在挂在对象下面.

点击添加组件

选择刚创建的脚本

创建之后,直接鼠标左键按住这个脚本,拖动到物体上,也可以.

2. 直接在物体组件创建

点击添加组件

选择 new script

输入合适的名字即可

就会直接创建完成,并且已经添加到物体组件了.

有个更简单的方法.点击了添加组件按钮之后

直接输入自定义的脚本名称,就可以直接创建脚本了

五. 例子

选择主摄像头,快捷键(Ctrl+Shift+F),可以让游戏页面显示当前场景页面的视图.

开始编写,物体旋转脚本.

左键双击脚本,会自动打开vs2022.

然后在Update方法里面输入

  transform.Rotate(Vector3.right * Time.deltaTime);

完整代码

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

public class Move : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        transform.Rotate(Vector3.right * Time.deltaTime);
    }
}

就可以看的这个正方体,在慢慢旋转了.

扩展物体旋转的方式:

在 Unity 中,实现物体旋转有多种方式。

使用 Transform 组件

通过修改 Transform 组件的 rotation 属性来实现旋转。

// 获取物体的 Transform 组件
Transform transform = gameObject.GetComponent<Transform>();

// 以欧拉角的方式设置旋转(绕 X、Y、Z 轴的旋转角度)
transform.rotation = Quaternion.Euler(30f, 45f, 60f);

使用 Rotate 方法

// 绕 X 轴旋转,每帧旋转 1 度
transform.Rotate(Vector3.right * Time.deltaTime);

// 绕指定轴旋转
transform.Rotate(new Vector3(1f, 2f, 3f) * Time.deltaTime);

使用物理引擎

如果物体受到物理影响,可以通过给物体添加 Rigidbody 组件,并施加扭矩来实现旋转。

Rigidbody rb = gameObject.GetComponent<Rigidbody>();
rb.AddTorque(Vector3.up * 10f);

例如,在一个 3D 太空射击游戏中,敌机可以通过不断地绕自身的 Y 轴旋转来增加动态效果:

void Update()
{
    transform.Rotate(Vector3.up * Time.deltaTime * 10f);
}

或者在一个解谜游戏中,当玩家触发某个机关时,一个平台缓慢地绕 Z 轴旋转 90 度:

public void TriggerRotation()
{
    StartCoroutine(RotatePlatform());
}

IEnumerator RotatePlatform()
{
    float elapsedTime = 0f;
    float totalTime = 2f;  // 旋转总时长为 2 秒
    Vector3 startRotation = transform.rotation.eulerAngles;
    Vector3 targetRotation = startRotation + new Vector3(0f, 0f, 90f);

    while (elapsedTime < totalTime)
    {
        transform.rotation = Quaternion.Euler(Vector3.Lerp(startRotation, targetRotation, elapsedTime / totalTime));
        elapsedTime += Time.deltaTime;
        yield return null;
    }

    transform.rotation = Quaternion.Euler(targetRotation);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2040164.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【笔记】MSPM0G3507移植RT-Thread——MSPM0G3507与RT_Thread(二)

一.创建新工程 找到"driverlib\empty"空白工程&#xff0c;CTRLC然后CTRLV复制副本 重命名为G3507_RTT 打开KEIL工程 双击empty.syscfg&#xff0c;然后打开SYSCONFIG 我的不知道为啥没有48pin选项&#xff0c;如果你也一样&#xff0c;可以跟着我做&#xff0c;如果…

WebDeveloper:1靶机

端口扫描 靶机ip地址为192.168.153.158 目录扫描 访问80端口 拼接访问 /ipdata 发现了一个流量包 放在 wireshark 查看&#xff0c;找到 账号密码 账号&#xff1a;webdeveloper 密码&#xff1a;Te5eQg&4sBS!Yr$)wf%(DcAd 拼接 /wp-login.php 找到登录框 登录成功 找…

vue3+Element Plus功能组件封装——顶部导航(动态渲染+样式调整)

网页顶部的导航栏&#xff0c;一般由代码动态生成 菜单数据在文件内统一配置&#xff0c;方便增删改查&#xff0c;导入后可自动生成导航菜单 代码如下 1.dom部分&#xff08;简单示例&#xff09; <el-menu mode"horizontal" :default-active"currentPath…

java Spring|day1.Spring基础

框架 Core IoC容器AOP功能数据绑定类型转换等 TestingData AccessWeb Servlet 核心 IOC容器 定义 IoC&#xff08;Inversion of Control&#xff09;是控制反转的意思&#xff0c;这是一种面向对象编程的设计思想。 优点 在不采用这种思想的情况下&#xff0c;我们需要自…

51单片机-动态数码管显示

动态数码管显示就是在数码管中显示多个数字&#xff0c;利用了人眼的视觉差显示了数字&#xff0c;但是存在一个问题&#xff0c;在顺序执行显示数字和数值的设置时候&#xff0c;数码管的显示数据会出现错乱&#xff0c;因此&#xff0c;需要执行消影&#xff0c;每次在数码管…

机器学习速成第二集——监督学习之分类(理论部分)!

目录 分类算法的种类 分类问题的应用场景 模型选择与评估 结论 如何在不同数据集中选择最适合的监督学习分类算法&#xff1f; 监督学习中集成模型与单一模型相比有哪些具体的优势和劣势&#xff1f; 优势&#xff1a; 劣势&#xff1a; 在处理高维稀疏数据时&#xf…

AAAI论文截稿

标题&#xff1a;AAAI2025截稿不足36小时!抓住今年最后的机会&#xff01; 点击上方“会议之眼”关注 重磅干货&#xff0c;第一时间送达 会议之眼 快讯 AAAI&#xff08;Association for the Advancement of Artificial Intelligence&#xff09;全称国际顶级人工智能学术…

Promise 一个基于协程下的任务队列状态管理任务包 解决复杂的异步转同步问题

前言 一直都想写关于Promise的东西&#xff0c;Promise解决的问题特别多&#xff0c;而普通前端就把这东西结合ajax来做一个await request() ,如果仅仅作为这样一种东西使用那就太可惜了。 它是队列的任务包 前端同学应该是没听说过队列&#xff0c;但是大前端同学&#xff0…

Kubernetes-K8S

Kubernetes由于单词太长&#xff0c;省略掉中间8个字母简称为K8S。它介于应用服务和服务器之间。能够通过策略协调和管理多个服务&#xff0c;只需要一个YAML文件配置。定义应用的部署顺序等信息&#xff0c;自动部署应用到各个服务器&#xff0c;还可以自动扩容缩容。 架构原理…

RabbitMQ实现多线程处理接收消息

前言&#xff1a;在使用RabbitListener注解来指定消费方法的时候&#xff0c;默认情况是单线程去监听队列&#xff0c;但是这个如果在高并发的场景中会出现很多个任务&#xff0c;但是每次只消费一个消息&#xff0c;就会很缓慢。单线程处理消息容易引起消息处理缓慢&#xff0…

前程无忧 阿里227滑块 分析

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01;有相关问题请第一时间头像私信联系我删…

Qt下使用QtPdfium处理PDF文档

文章目录 前言一、使用QPdfDocument二、使用QtPdfium三、示例完整代码总结 前言 在我之前的文章中&#xff0c;有提到如何生成PDF&#xff0c;这个可以查看文末参考文章。如果要实现在Qt下进行PDF文档的处理&#xff08;读取显示&#xff09;&#xff0c;可以使用自带的PDF库以…

Unity(2022.3.38LTS) - 基础概念

目录 一. 场景 二. 游戏对象 三. 组件 四. 标签 五. 静态游戏对象 六. 保存 一. 场景 Unity 场景是游戏或应用开发中的一个重要概念。 Unity 场景的组成元素&#xff1a; 它通常包含了各种游戏对象&#xff0c;比如 3D 模型、灯光、摄像机、脚本组件、音频源等等。 作用…

串列翼无人机技术详解

串列翼无人机作为一种特殊布局的飞行器&#xff0c;其概念可追溯至早期航空探索时期。随着航空技术的不断进步&#xff0c;尤其是复合材料、先进控制算法及动力系统的革新&#xff0c;串列翼无人机逐渐从理论走向实践。这一设计初衷在于通过前后两组机翼的巧妙布局&#xff0c;…

Redis Cluster集群

redis-cluster集群 Redis Cluster是Redis官方提供的分布式解决方案。当遇到内存、并发、流量等瓶颈时&#xff0c;就可以采用Cluster架构达到负载均衡目的。 1.Redis单实例主要有单点故障&#xff0c;容量有限&#xff0c;流量压力上限的问题。 Redis单点故障&#xff0c;可以…

全开源智慧停车场微信小程序源码/智能停车系统源码/停车自助缴费系统/停车场管理收费+物业管理+物联网+自助缴费功能

源码简介&#xff1a; 智慧停车场微信小程序源码&#xff0c;全开源智能停车系统源码&#xff0c;停车自助缴费系统&#xff0c;具有停车场管理、停车收费、物业管理、物联网、自助缴费等多种功能。 这是一个全开源的智能停车系统&#xff0c;功能强大。它不仅能帮你管理停车…

如何平衡冷数据(历史库)的成本与性能?| OceanBase应用实践

随着数据量的迅猛增长&#xff0c;企业和组织在数据库管理方面遭遇的挑战愈发凸显。数据库性能逐渐下滑、存储成本节节攀升&#xff0c;以及数据运维复杂性的增加&#xff0c;这些挑战使得DBA和开发者在数据管理上面临更大的压力。 为了应对这些挑战&#xff0c;对数据生命周期…

音频去噪:使用Python和FFT增强音质

根据定义,声音去噪是从音频信号中去除不需要的噪音或干扰,以提高其质量和清晰度的过程。这涉及识别和隔离噪音成分(通常以不规则或高频元素为特征),并将其过滤掉,同时保持原始声音的完整性。 声音去噪目标是改善聆听体验以及音频分析和处理的准确性。过滤掉噪音对于高保真音频…

SQL每日一练-0814

今日SQL题难度&#xff1a;★☆☆☆☆☆☆☆☆☆ 1、题目要求 找出每个部门中薪资最高的员工显示部门ID、部门名称、员工ID、员工姓名以及对应的薪资 2、表和虚拟数据 现有两个表&#xff1a;Employees 和 Departments&#xff0c;记录了员工和部门信息。 CREATE TA…

MySQL-进阶篇-索引

文章目录 1. 准备工作2. 索引概述2.1 什么是索引2.2 索引的优缺点 3. 索引的结构3.1 索引结构介绍3.2 二叉树3.3 BTree3.4 BTree3.5 MySQL 中的 BTree3.6 Hash3.7 思考题&#xff1a;为什么 InnoDB 存储引擎选择使用 BTree 索引结构 4. 索引的分类5. 索引的语法5.1 创建索引5.2…