目录
一. C#简介
二. 配置代码编辑器
三. C#基本语法
四. 创建脚本
创建C#脚本的方式
1. 在文件夹新建
2. 直接在物体组件创建
五. 例子
扩展物体旋转的方式:
一. C#简介
Unity 中使用的 C# 是一种面向对象的编程语言,具有强大的功能和广泛的应用。
特点:
- 类型安全:在编译时进行严格的类型检查,减少运行时错误。
- 面向对象:支持类、对象、继承、多态等面向对象的特性,使得代码组织更加清晰和可维护。
- 丰富的库和框架:.NET 框架提供了大量的类库,方便实现各种功能。
在 Unity 中的应用:
- 控制游戏逻辑:编写脚本控制游戏对象的行为、状态和交互。
- 处理用户输入:响应玩家的操作,如键盘、鼠标输入等。
- 实现动画效果:通过代码控制动画的播放、暂停和切换。
基本语法:
- 变量声明:
int age = 25;
- 控制结构:包括
if-else
条件语句、for
循环、while
循环等。 - 类和对象:
class Player
{
public int health;
public void TakeDamage(int damage)
{
health -= damage;
}
}
优势:
- 高效性能:能满足 Unity 游戏开发中对性能的要求。
- 良好的可读性和可维护性:规范的语法结构有助于团队协作和代码维护。
例如,在一个射击游戏中,可以使用 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);
}