Unity 初步了解

1.Unity 是啥

Unity是一个实时3D互动内容创作和运营平台。它可以帮助游戏开发、美术、建筑、汽车设计、影视等行业的创作者将创意变为现实。Unity平台提供了一套完善的软件解决方案,用于创作、运营和变现任何实时互动的2D和3D内容,支持的平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备等。

Unity具有许多特点和优势,包括强大的图形引擎、易于学习和使用、多种工具和插件支持、社区支持和资源丰富、物理引擎、灵活性和可扩展性等。这些特点使得Unity在游戏开发、动画行业、工业等领域有着广泛的应用。

Unity的历史可以追溯到2004年,自那时起,它不断发展和壮大,成为全球领先的实时3D互动内容创作和运营平台之一。Unity的用户遍布全球190多个国家和地区,其创作者社区也非常活跃,为开发者提供了丰富的资源和支持。

总的来说,Unity是一个功能强大、易于使用和高度可扩展的实时3D互动内容创作和运营平台,适用于各种行业和领域。

2.在Unity中绘制一个三角形

在Unity中绘制一个三角形,你通常不需要直接使用DirectX API,因为Unity已经为你提供了一个高级的渲染系统。在Unity中,你可以通过创建自定义的顶点数据和材质来绘制任何形状的图形,包括三角形。

以下是一个简单的示例,说明如何在Unity中使用C#脚本来绘制一个三角形:

  1. 创建一个新的Unity项目:确保你已经安装了Unity编辑器,并创建一个新的3D项目。

  2. 创建一个新的C#脚本 :在Project视图中,右键点击Assets文件夹,选择Create -> C# Script,并命名为TriangleDrawer.cs

  3. 编写脚本 :打开TriangleDrawer.cs脚本,并编写以下代码来绘制一个三角形:

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

    [RequireComponent(typeof(MeshFilter), typeof(MeshRenderer))]
    public class TriangleDrawer : MonoBehaviour
    {
    void Start()
    {
    // 创建一个新的Mesh对象
    Mesh mesh = new Mesh();

         // 设置三角形的顶点  
         Vector3[] vertices = new Vector3[3]  
         {  
             new Vector3(-0.5f, 0.5f, 0f), // 顶部左侧  
             new Vector3(0f, -0.5f, 0f),   // 底部中央  
             new Vector3(0.5f, 0.5f, 0f)   // 顶部右侧  
         };  
    
         // 设置顶点索引以形成三角形  
         int[] triangles = new int[3] { 0, 1, 2 };  
    
         // 将顶点数据赋值给Mesh  
         mesh.vertices = vertices;  
         mesh.triangles = triangles;  
    
         // 你可以设置更多Mesh属性,如法线、UV坐标等  
    
         // 获取MeshFilter组件,并将Mesh赋给它  
         MeshFilter meshFilter = GetComponent<MeshFilter>();  
         meshFilter.mesh = mesh;  
    
         // (可选)设置Material  
         MeshRenderer renderer = GetComponent<MeshRenderer>();  
         renderer.material = new Material(Shader.Find("Standard"));  
         renderer.material.color = Color.red; // 设置三角形颜色为红色  
     }  
    

    }

  4. 将脚本附加到游戏对象 :在Unity的Hierarchy视图中,创建一个新的3D Object(比如Cube),然后将TriangleDrawer.cs脚本拖放到这个对象上。由于脚本上有一个RequireComponent属性,它会自动为你添加MeshFilterMeshRenderer组件。

  5. 运行场景:点击Unity编辑器顶部的播放按钮来运行场景,你应该能在Game视图中看到一个红色的三角形。

这个示例代码创建了一个Mesh对象,并设置了它的顶点数据和三角形索引来形成一个三角形。然后,它将这个Mesh赋值给一个MeshFilter组件,并将一个带有红色材质的MeshRenderer组件附加到游戏对象上,以便在场景中渲染这个三角形。

3.Unity 是收费的吗

Unity引擎本身并不完全收费。Unity提供了多个版本,其中Unity Personal(个人版)是免费的,而Unity Plus和Unity Pro(专业版和企业版)则需要付费。

具体来说,Unity Plus的价格为每月35美元或每年299美元,而Unity Pro的价格为每月125美元或每年1500美元。这些付费版本提供了更多的功能和支持,例如Unity Hub、Unity Ads、Unity Cloud和Unity Technical Support等。

另外,Unity在2024年1月1日起实施了一项新的收费政策,即对于通过Unity Pro和Unity Enterprise进行的游戏开发,将需要支付运行时费用。然而,开发者可以选择两种缴费方式:一种是按照收入的2.5%进行收费,另一种则是根据每月参与游戏的新玩家数量来计算收费金额。

此外,Unity还曾经宣布过一项基于"游戏安装量"的收费方式,但这一政策在颁布后不久就被调整,改为用个人版开发将不收取安装费用,直接免费;而专业版和企业版的收费标准将上调。

请注意,以上信息可能会随着Unity官方政策的更新而发生变化。建议访问Unity官方网站或与Unity销售团队联系以获取最新的定价信息。

4.c# Unity 绘制一个立方体

在 Unity 中,使用 C# 绘制一个立方体(通常称为"Cube"或"Box")通常意味着在场景中添加一个立方体对象。这可以通过几种方式实现,但最常见的是使用内置的 GameObject.CreatePrimitive 方法或直接在 Unity 的编辑器中放置一个立方体。

以下是如何使用 C# 脚本在 Unity 中动态创建一个立方体的步骤:

  1. 打开 Unity 并创建一个新的 3D 项目

  2. 创建一个新的 C# 脚本 。例如,你可以将其命名为 CreateCube.cs

  3. 编写 C# 脚本以创建立方体

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

    public class CreateCube : MonoBehaviour
    {
    // Start is called before the first frame update
    void Start()
    {
    // 创建一个立方体并设置其位置
    GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
    cube.transform.position = new Vector3(0, 0, 5); // 将立方体放置在 (0, 0, 5) 的位置

         // (可选)设置立方体的其他属性,如缩放和颜色  
         cube.transform.localScale = new Vector3(2, 2, 2); // 设置立方体的大小为 2x2x2  
         Renderer renderer = cube.GetComponent<Renderer>();  
         renderer.material.color = Color.red; // 设置立方体的颜色为红色  
    
         // (可选)给立方体添加标签或层,以便在后续脚本中引用  
         cube.tag = "MyCube";  
         cube.layer = LayerMask.NameToLayer("MyLayer"); // 确保在 Unity 的 Tag 和 Layer Manager 中设置了这些  
     }  
    
     // Update is called once per frame  
     void Update()  
     {  
         // 这里通常不需要更新代码,除非你想在运行时改变立方体  
     }  
    

    }

  4. 将脚本附加到一个 GameObject 。你可以创建一个空的 GameObject 并将其命名为"Cube Creator"或任何你喜欢的名字,然后将 CreateCube.cs 脚本附加到这个 GameObject 上。

  5. 运行场景。当场景开始运行时,你应该会在场景中看到一个红色的立方体。

注意:在 Unity 的实际使用中,你通常会通过 Unity 的编辑器来放置和设置对象,而不是在代码中动态创建它们。但是,动态创建对象对于游戏逻辑和运行时生成内容非常有用。

5.new Vector3(-0.5f, 0.5f, 0f) 的三个参数啥意思

在Unity中,Vector3 是一个用于表示三维空间中点或向量的结构。当你创建一个新的 Vector3 实例,如 new Vector3(-0.5f, 0.5f, 0f),你正在指定这个三维点或向量的x、y和z坐标。

  • 第一个参数 -0.5f 是x坐标。它表示这个点或向量在x轴上的位置或方向。在这个例子中,x坐标是-0.5,意味着它在x轴的负方向上稍微偏移了原点(原点坐标为(0, 0, 0))。
  • 第二个参数 0.5f 是y坐标。它表示这个点或向量在y轴上的位置或方向。在这个例子中,y坐标是0.5,意味着它在y轴的正方向上稍微偏移了原点。
  • 第三个参数 0f 是z坐标。它表示这个点或向量在z轴上的位置或方向。在这个例子中,z坐标是0,意味着它在z轴上没有偏移,即它位于z轴的零点上。

将这些坐标组合起来,new Vector3(-0.5f, 0.5f, 0f) 描述了一个在三维空间中位于(-0.5, 0.5, 0)的点或向量。

在Unity的上下文中,这个Vector3实例经常用于设置物体的位置、旋转(作为欧拉角或四元数的部分)、速度、加速度等。例如,你可以用它来设置一个GameObject的位置:

|---|---------------------------------------------------------------|
| | GameObject myObject = new GameObject("My Object"); |
| | myObject.transform.position = new Vector3(-0.5f, 0.5f, 0f); |

这段代码创建了一个新的GameObject,并将其位置设置为三维空间中的(-0.5, 0.5, 0)点。

6.c# Unity 绘制一个三棱锥

在Unity中,你可以使用C#脚本来创建一个自定义的三棱锥(也称为四面体)。以下是一个简单的步骤指南,说明如何在Unity中使用C#脚本来绘制一个三棱锥:

步骤 1: 创建Unity项目和C#脚本

  1. 打开Unity Hub并创建一个新的3D项目。
  2. 在Unity编辑器中,右键点击Assets文件夹 -> Create -> C# Script,并命名为Tetrahedron.cs

步骤 2: 编写C#脚本

Tetrahedron.cs中,编写以下代码来创建三棱锥的Mesh:

using System.Collections;  
using System.Collections.Generic;  
using UnityEngine;  
  
public class Tetrahedron : MonoBehaviour  
{  
    void Start()  
    {  
        // 三棱锥的顶点坐标(假设单位长度为1)  
        Vector3[] vertices = new Vector3[4]  
        {  
            new Vector3(0.5f, Mathf.Sqrt(0.75f), 0),  
            new Vector3(-0.5f, Mathf.Sqrt(0.75f), 0),  
            new Vector3(0, -Mathf.Sqrt(0.75f), 0.5f),  
            new Vector3(0, -Mathf.Sqrt(0.75f), -0.5f)  
        };  
  
        // 三棱锥的三角形索引  
        int[] triangles = new int[12]  
        {  
            0, 2, 1, // 第一个三角形:底部三角形  
            0, 1, 3, // 第二个三角形:与顶点相连的三角形  
            0, 3, 2, // 第三个三角形:与顶点相连的三角形  
            1, 2, 3  // 第四个三角形:与顶点相连的三角形(可选,确保封闭)  
        };  
  
        // 创建一个新的Mesh对象  
        Mesh mesh = new Mesh();  
        mesh.vertices = vertices;  
        mesh.triangles = triangles;  
  
        // 计算法线(可选,但可以提高渲染质量)  
        mesh.RecalculateNormals();  
  
        // 将Mesh赋给GameObject的MeshFilter组件  
        GetComponent<MeshFilter>().mesh = mesh;  
  
        // 创建一个简单的材质并应用到GameObject上(可选)  
        // Material material = new Material(Shader.Find("Standard"));  
        // GetComponent<Renderer>().material = material;  
    }  
}

步骤 3: 将脚本附加到GameObject上

  1. 在Unity编辑器中,创建一个新的空GameObject(可以命名为TetrahedronObject)。
  2. Tetrahedron.cs脚本拖动到TetrahedronObject上,或者将TetrahedronObject拖入到Tetrahedron.cs的Inspector窗口中,以将脚本附加到GameObject上。

步骤 4: 运行场景并查看效果

  1. 点击Unity编辑器顶部的播放按钮来运行场景。
  2. 你应该能在Scene视图和Game视图中看到你的三棱锥。

注意:上述代码中,三棱锥的顶点坐标和三角形索引是硬编码的,你可以根据需要调整它们来改变三棱锥的形状和大小。此外,我还添加了一个可选的注释部分来创建一个简单的材质,但通常Unity会自动为你创建一个默认的材质。如果你想要更复杂的材质或纹理,你可以取消注释那部分代码,并修改它以满足你的需求。

7.c# Unity 绘制一个旋转的三棱锥

在Unity中,绘制一个旋转的三棱锥涉及到创建三棱锥的Mesh,并为其添加旋转的动画。以下是一个步骤指南,以及相应的C#代码示例:

步骤 1: 创建Unity项目和C#脚本

  1. 打开Unity Hub并创建一个新的3D项目。
  2. 在Unity编辑器中,创建一个新的C#脚本,命名为RotatingTetrahedron.cs

步骤 2: 编写C#脚本

RotatingTetrahedron.cs中,编写以下代码来创建并旋转三棱锥:

using UnityEngine;  
  
public class RotatingTetrahedron : MonoBehaviour  
{  
    // 三棱锥的Mesh数据  
    private Mesh tetrahedronMesh;  
  
    // 旋转速度  
    public float rotationSpeed = 50f;  
  
    void Start()  
    {  
        // 创建三棱锥的Mesh  
        CreateTetrahedronMesh();  
  
        // 将Mesh赋给GameObject的MeshFilter组件  
        GetComponent<MeshFilter>().mesh = tetrahedronMesh;  
  
        // 添加一个默认的材质(可选)  
        GetComponent<Renderer>().material = new Material(Shader.Find("Standard"));  
    }  
  
    void CreateTetrahedronMesh()  
    {  
        // 三棱锥的顶点坐标(假设单位长度为1)  
        Vector3[] vertices = new Vector3[4]  
        {  
            new Vector3(0.5f, Mathf.Sqrt(0.75f), 0),  
            new Vector3(-0.5f, Mathf.Sqrt(0.75f), 0),  
            new Vector3(0, -Mathf.Sqrt(0.75f), 0.5f),  
            new Vector3(0, -Mathf.Sqrt(0.75f), -0.5f)  
        };  
  
        // 三棱锥的三角形索引  
        int[] triangles = new int[12]  
        {  
            0, 2, 1, // 底部三角形  
            0, 1, 3, // 与顶点连接的第一个三角形  
            0, 3, 2, // 与顶点连接的第二个三角形  
            1, 2, 3  // 确保封闭(可省略,但通常为了正确渲染需要)  
        };  
  
        // 创建一个新的Mesh对象  
        tetrahedronMesh = new Mesh();  
        tetrahedronMesh.vertices = vertices;  
        tetrahedronMesh.triangles = triangles;  
  
        // 计算法线(提高渲染质量)  
        tetrahedronMesh.RecalculateNormals();  
    }  
  
    void Update()  
    {  
        // 旋转GameObject  
        transform.Rotate(Vector3.up, rotationSpeed * Time.deltaTime);  
    }  
}

步骤 3: 将脚本附加到GameObject上

  1. 在Unity编辑器中,创建一个新的空GameObject(可以命名为RotatingTetrahedronObject)。
  2. RotatingTetrahedron.cs脚本拖动到RotatingTetrahedronObject上,或者将RotatingTetrahedronObject拖入到RotatingTetrahedron.cs的Inspector窗口中,以将脚本附加到GameObject上。

步骤 4: 运行场景并查看效果

  1. 点击Unity编辑器顶部的播放按钮来运行场景。
  2. 你应该能在Scene视图和Game视图中看到你的三棱锥在旋转。

注意:上述代码中的rotationSpeed变量用于控制三棱锥的旋转速度。你可以根据需要调整其值来改变旋转速度。此外,我还添加了一个默认的材质到Renderer组件上,但你可以根据需要更改材质和着色器。

8.c# Unity 绘制一个圆形

在Unity中,使用C#绘制一个圆形通常涉及两种主要方法:一种是使用Unity的GUI系统(现在称为UnityEngine.UI),另一种是直接在3D世界中绘制一个圆形的几何体(如使用Mesh或Particle System)。

使用Unity的GUI系统(UI)

如果你想要在一个UI Canvas上绘制一个圆形,你可以使用Image组件配合一个圆形的Sprite。但如果你想要用代码动态绘制,你可以使用Graphics.DrawTextureGUI.DrawTexture(但请注意,GUI.DrawTexture主要用于旧版本的Unity UI系统,并且不建议在新项目中使用)。

然而,对于更高级的UI绘图,你可能需要创建一个自定义的EditorWindow或使用UI.DrawCall API,但这超出了简单绘图的范畴。

在3D世界中绘制圆形

在3D世界中绘制圆形通常涉及创建一个Mesh。以下是一个简单的示例,展示了如何创建一个圆形的Mesh并在Unity中渲染它:

using System.Collections;  
using System.Collections.Generic;  
using UnityEngine;  
  
public class CircleDrawer : MonoBehaviour  
{  
    public float radius = 1f;  
    public int segments = 32;  
    Mesh mesh;  
  
    void Start()  
    {  
        mesh = new Mesh();  
        GetComponent<Renderer>().material.shader = Shader.Find("Standard");  
  
        Vector3[] vertices = new Vector3[segments + 1];  
        Vector2[] uvs = new Vector2[segments + 1];  
        int[] triangles = new int[segments * 3];  
  
        float step = Mathf.PI * 2f / segments;  
  
        for (int i = 0; i <= segments; i++)  
        {  
            float angle = i * step;  
            vertices[i] = new Vector3(Mathf.Cos(angle) * radius, 0, Mathf.Sin(angle) * radius);  
            uvs[i] = new Vector2(vertices[i].x / radius + 0.5f, vertices[i].z / radius + 0.5f);  
  
            if (i < segments)  
            {  
                triangles[i * 3] = 0;  
                triangles[i * 3 + 1] = i + 1;  
                triangles[i * 3 + 2] = i;  
            }  
        }  
  
        mesh.vertices = vertices;  
        mesh.uv = uvs;  
        mesh.triangles = triangles;  
  
        GetComponent<MeshFilter>().mesh = mesh;  
    }  
}

这个脚本会创建一个Mesh,它表示一个中心在原点、半径为radius、由segments个线段组成的圆形。这个Mesh被附加到包含此脚本的GameObject的MeshFilter组件上。注意,这个圆形是在XY平面上绘制的,Z轴为0。如果你想要在不同的平面上绘制圆形,你需要相应地调整顶点的坐标。

9.c# Unity 绘制一个茶壶

在Unity中使用C#来绘制一个茶壶并不直接意味着"绘制"这个动作,因为Unity是一个游戏引擎,它使用预制的3D模型(如茶壶)并通过渲染管线来显示它们。但是,你可以通过以下步骤来在Unity中展示一个茶壶:

  1. 导入茶壶模型 :首先,你需要一个茶壶的3D模型。这个模型可以是.fbx.obj.dae(Collada)或其他Unity支持的格式。你可以从网上下载免费的3D模型,或者使用3D建模软件(如Blender)自己创建一个。

  2. 将模型导入Unity :将茶壶模型文件拖放到Unity项目的Assets文件夹中。Unity会自动导入并转换模型,使其可以在编辑器中查看和在游戏中使用。

  3. 在场景中创建茶壶:在Unity编辑器中,你可以通过以下步骤来创建一个茶壶GameObject:

    a. 在Hierarchy窗口中,右键点击并选择3D Object > Mesh(如果你的茶壶是一个Mesh而不是Prefab)。

    b. 或者,你可以直接从Project窗口中拖动茶壶模型文件到Hierarchy窗口来创建一个带有该模型的GameObject。

  4. 调整茶壶属性和设置:在Inspector窗口中,你可以调整茶壶的位置、旋转、缩放等属性。你还可以更改其材质(Material)来改变其外观。

  5. 编写C#脚本来控制茶壶(如果需要):虽然简单地展示茶壶并不需要编写任何C#代码,但如果你想要通过脚本来控制茶壶(例如,使其移动、旋转或改变其属性),你可以创建一个新的C#脚本并将其附加到茶壶的GameObject上。

  6. 运行场景:点击Unity编辑器中的播放按钮来运行场景,并在Game视图中查看茶壶。

下面是一个简单的C#脚本示例,它附加到一个茶壶GameObject上,并使其在游戏中循环旋转:

using System.Collections;  
using System.Collections.Generic;  
using UnityEngine;  
  
public class RotateTeapot : MonoBehaviour  
{  
    public float rotationSpeed = 50f;  
  
    void Update()  
    {  
        // 使茶壶围绕其Y轴旋转  
        transform.Rotate(0, rotationSpeed * Time.deltaTime, 0);  
    }  
}

在这个示例中,RotateTeapot脚本包含一个rotationSpeed公共变量,你可以在Unity编辑器中设置这个变量的值。在Update方法中,我们使用Time.deltaTime来确保旋转速度是帧速率无关的,并使用transform.Rotate方法来使茶壶围绕其Y轴旋转。

10.c# Unity 创建一个动画

在Unity中创建一个动画通常涉及几个步骤,包括导入动画模型(如果模型已带有动画),或者为现有模型创建动画。以下是一个基本的指南,说明如何在Unity中使用C#和Unity的动画系统为3D模型创建一个简单的动画。

步骤 1: 导入模型

首先,你需要一个带有动画的3D模型,或者一个没有动画的模型,你可以为其创建动画。将模型文件(如.fbx、.obj、.dae等)导入到Unity的Assets文件夹中。

步骤 2: 配置模型

在Unity编辑器中,将模型拖放到场景中,并在Inspector窗口中配置其属性。如果模型已带有动画,你可能需要为其指定一个Animator Controller。

步骤 3: 创建Animator Controller

  1. 在Project窗口中,右键点击Assets文件夹,选择Create > Animator Controller。这将创建一个新的Animator Controller文件。

  2. 将新创建的Animator Controller文件拖放到场景中模型的Animator组件中。这会将Animator Controller与模型关联起来。

步骤 4: 创建动画状态

  1. 在Project窗口中双击Animator Controller文件,打开Animator窗口。

  2. 在Animator窗口中,你可以创建动画状态(States)和转换(Transitions)。每个状态代表模型的一个动画姿势,而转换则定义了从一个状态过渡到另一个状态的条件。

  3. 你可以通过点击Animator窗口中的"Create State"按钮来创建新的状态,并为其指定一个动画片段(Animation Clip)。动画片段可以在模型的Animation窗口中创建或导入。

步骤 5: 设置转换

在Animator窗口中,你可以通过拖动状态之间的箭头来创建转换。然后,你可以设置转换的条件,如参数阈值、时间等。

步骤 6: 编写C#脚本来控制动画

如果你想要通过脚本来控制动画的播放,你可以使用Animator组件的API。以下是一个简单的示例,展示了如何使用C#脚本来触发一个动画状态:

using System.Collections;  
using System.Collections.Generic;  
using UnityEngine;  
  
public class AnimationController : MonoBehaviour  
{  
    private Animator animator;  
  
    void Start()  
    {  
        // 获取Animator组件  
        animator = GetComponent<Animator>();  
  
        // 假设你有一个名为"Walk"的动画状态  
        // 你可以通过Animator.SetBool、Animator.SetInteger等方法来触发状态转换  
        // 这里我们使用SetBool作为一个示例  
        animator.SetBool("IsWalking", true); // 开始播放"Walk"动画  
    }  
  
    // 其他方法,如Update,可以在这里添加以根据条件触发动画  
    // ...  
}

在上面的示例中,我们假设Animator Controller中有一个布尔参数IsWalking,它控制从默认状态到"Walk"状态的转换。当IsWalkingtrue时,动画将过渡到"Walk"状态。

步骤 7: 测试动画

最后,运行场景并查看动画是否按预期工作。你可以使用Unity的Play、Pause和Step按钮来测试动画的不同部分。

相关推荐
向宇it10 小时前
【unity小技巧】unity 什么是反射?反射的作用?反射的使用场景?反射的缺点?常用的反射操作?反射常见示例
开发语言·游戏·unity·c#·游戏引擎
Heaphaestus,RC12 小时前
【Unity3D】获取 GameObject 的完整层级结构
unity·c#
芋芋qwq12 小时前
Unity UI射线检测 道具拖拽
ui·unity·游戏引擎
tealcwu12 小时前
【Unity服务】关于Unity LevelPlay的基本情况
unity·游戏引擎
大眼睛姑娘15 小时前
Unity3d场景童话梦幻卡通Q版城镇建筑植物山石3D模型游戏美术素材
unity·游戏美术
鹿野素材屋19 小时前
Unity Dots下的动画合批工具:GPU ECS Animation Baker
unity·游戏引擎
小春熙子1 天前
Unity图形学之着色器之间传递参数
unity·游戏引擎·技术美术·着色器
虾球xz1 天前
游戏引擎学习第15天
学习·游戏引擎
Java Fans1 天前
在Unity中实现电梯升降功能的完整指南
unity·游戏引擎
GrimRaider2 天前
[Unity]TileMap开发,TileMap地图缝隙问题
unity·游戏引擎·tilemap