cpp,git,unity学习

c#中的?

1. 空值类型(Nullable Types)

? 可以用于值类型(例如 intbool 等),使它们可以接受 null通常,值类型不能为 null,但是通过 ? 可以表示它们是可空的。

int? number = null; // 可空类型,可以为 null

2. 空条件运算符(Null-conditional Operator)

这个 ? 用在对象或委托前面,用于在调用成员或方法时检查对象是否为 null。如果对象为 null,那么整个表达式返回 null,而不是抛出异常。

MyClass obj = null;
int? length = obj?.Length; // 如果 obj 为 null,length 会是 null 而不是抛出异常

在委托上,也可以用来安全地调用委托,避免调用 null 委托时抛出异常:

Action action = null;
action?.Invoke(); // 如果 action 是 null,什么也不做,而不会抛出异常

3. 空合并运算符(Null-coalescing Operator)

?? 是另一个与 ? 相关的运算符,它用于提供一个默认值,当左侧表达式为 null 时,返回右侧的值。

string name = null;
string displayName = name ?? "Unknown"; // 如果 name 是 null,displayName 为 "Unknown"

4. 空合并赋值运算符(Null-coalescing Assignment Operator)

从 C# 8.0 开始,??= 是空合并赋值运算符,它判断变量是否为空,如果为空就把后面的值给赋上(这里是把后面的“hello world 赋值给message”)。

string message = null;
message ??= "Hello, World!"; // 如果 message 是 null,赋值为 "Hello, World!"

5. 三元运算符(Ternary Conditional Operator)

最后就是最简单常见的用法,三元运算符? A:B 条件判断值。

int x = 5;
string result = (x > 3) ? "Greater" : "Less"; // 如果 x 大于 3,result 是 "Greater"

抽象类

 变量和字段:抽象类可以定义实例变量(字段)和静态变量,它们可以赋值并存储数据,和普通类没有区别。

public abstract class Animal
{public string Name { get; set; } = "Unnamed Animal"; // 普通属性private int age = 5; // 私有字段public int GetAge(){return age; // 非抽象方法可以访问私有字段}
}

必须继承才能使用:因为抽象类不能直接实例化,任何抽象类中的方法、字段和属性都只能通过继承它的类来使用。 

单例panel

GUI.Label

GUI.Label的重载主要有以下几种:

  1. GUI.Label(Rect position, string text):根据指定位置绘制文本标签。
  2. GUI.Label(Rect position, GUIContent content):使用GUIContent对象绘制标签,可以包含文本和图像。
  3. GUI.Label(Rect position, string text, GUIStyle style):使用指定样式绘制标签。
  4. GUI.Label(Rect position, GUIContent content, GUIStyle style):使用指定样式和GUIContent绘制标签。

GUI

核心五参

 GUI里的东西都是在代码里写的,现在更多的是程序测试的作用,在lateupdate 和ondisable之间执行,只有继承mono才能在OnGUI里写ui

unity编译器版本不同(issue)

使用不同版本的 Unity 编译器时,可能会遇到以下问题:

  1. API 不兼容

    • 新版本可能移除或更改某些 API,导致编译错误或警告。
  2. 脚本行为变化

    • 脚本的执行顺序、生命周期方法(如 Awake, Start)的行为可能会有所不同。
  3. 资源导入设置

    • 材质、模型和其他资源在新版本中可能需要重新导入,可能导致外观变化。
  4. 新特性和弃用

    • 新版本中引入的新特性可能无法在旧版本中使用,而被弃用的特性可能在新版本中仍会触发警告。
  5. 编辑器界面变化

    • 编辑器的布局和功能可能会有所不同,影响工作流程。

git再触发

gitlab是帮用户协同开发的,然后,里面的概念为组,同一个组的就可以协同修改一个项目

组的概念

    • 组是一个集合,通常包含多个项目和用户。它可以用于组织和管理团队的工作。
    • 同一个组的成员可以协同开发,共享项目和资源
  1. 项目

    • 一个组可以有一个或多个项目。项目是具体的代码库和开发环境,团队成员可以在其中进行协作。
  2. 协同开发

    • 组内成员可以对项目进行代码修改、提交、合并请求等操作,进行协同开发。
    • 组中的权限可以根据角色(如拥有者、维护者、开发者等)进行设置,以控制不同用户的访问和操作权限。

组员权限是怎么样的,有等级制度吗

权限等级

  1. 拥有者(Owner)

    • 具有最高权限,可以管理组和所有项目设置成员权限删除项目等。
  2. 维护者(Maintainer)

    • 可以进行大多数管理操作,包括合并请求、推送代码、管理项目设置等。
  3. 开发者(Developer)

    • 可以推送代码、创建分支、提交合并请求,但不能删除项目或修改某些设置
  4. 报告者(Reporter)

    • 主要用于查看和评论代码,可以查看项目,但不能推送或更改代码。
  5. 访客(Guest)

    • 权限最低,通常只能查看公开项目的信息,无法进行任何修改。

首先是进组,然后得到组长给的权限,这个组里的所有项目都可以看

项目成员

  • 目可以从组中自动继承成员。如果您将一个项目添加到组中,组内的成员可以根据角色访问该项目。
  • 也就是你开了新项目,默认就把你组里的人全拉进去了,但是在项目里,你也可以自己再调控成员的权限

只有你自己创建的组,你是组长,才可以往组里拉人,

可以只项目拉人,不让他进组是吗:是的,在 GitLab 中,您可以单独将用户添加到某个项目,而不将他们添加到整个组。

但在你组里的人会自动继承到你的项目里,要改他的权限就必须改组里他的权限

 项目单独拉进的人可以改权限,组里的则是直接继承权限,只能改组的权限

组里可做多个项目,每个项目又可单独修改人员,而如果是组的人员,会继承组里的权限

组里的人在项目里,权限只能更高不能更低 

组开项目,组员权限只能比组里高不能低,项目可以邀请非组员,任意设置权限大小

组可多个,组里的项目也可多个,除了组员的权限,各个项目相互独立

mono(生命周期函数)执行顺序

Awake():在对象创建时调用,用于初始化。

Start():在所有 Awake() 完成后首次激活时调用,适合依赖其他组件的初始化。

梯队一样

  1. 执行顺序

    • Unity 在每一帧中依次检查并调用不同的生命周期方法,按以下顺序:
      • Awake():首先检查所有对象的 Awake() 方法并执行。
      • OnEnable():接着检查所有对象的 OnEnable() 方法并执行。
      • Start():然后检查所有对象的 Start() 方法并执行。
      • FixedUpdate():按固定时间间隔调用,适用于物理更新。在每个物理帧中执行。
      • Update():最后进入每帧调用的 Update() 方法。
      • LateUpdate():在所有 Update() 方法之后,调用所有对象的 LateUpdate() 方法。
      • OnGUI()
      • OnDisable():如果对象在这一帧中被失活,OnDisable() 会在所有更新方法之后被调用。
  2. 激活与失活的影响

    • 激活:如果一个对象被激活,它的 OnEnable() 会被调用。首次激活时,如果对象还没有调用过 Awake()Start(),则会按照顺序执行。
    • 失活:当对象失活时,OnDisable() 会被调用,之后的 Update() 不会再执行。

FixedUpdateLateUpdate

FixedUpdate

  • 用途FixedUpdate 主要用于处理物理相关的逻辑,比如 Rigidbody 的移动和碰撞检测。
  • 调用频率:它在固定时间间隔内被调用,不受帧率影响,通常每秒调用 50 次(可在项目设置中调整)。
  • 使用示例
    void FixedUpdate()
    {// 处理物理运动Rigidbody rb = GetComponent<Rigidbody>();rb.MovePosition(rb.position + Vector3.forward * Time.fixedDeltaTime);
    }
    

    LateUpdate

  • 用途LateUpdate 在所有 Update 方法执行后调用,适合处理相机跟随、动画等逻辑,这样可以确保在更新其他对象后再执行。
  • 调用频率:与 Update 相同,每帧调用一次。
  • 使用示例
    void LateUpdate()
    {// 确保在所有更新后执行,比如相机跟随Camera.main.transform.position = new Vector3(transform.position.x, transform.position.y + 5, transform.position.z - 10);
    }
    
  • FixedUpdate:用于物理计算,适合处理 Rigidbody。
  • LateUpdate:用于依赖于其他对象更新后的逻辑,比如相机跟随。

对象失活的注意事项

  1. 对象失活

    • 当一个 GameObject 被设为失活时,它及其所有子对象的组件(包括脚本、渲染器等)都不会运行。这意味着 UpdateAwakeStart 等生命周期方法都不会被调用。
  2. 脚本的执行顺序

    • Unity 在游戏运行时根据对象的激活状态来决定是否调用脚本的方法。例如,只有在对象激活时,AwakeStart 方法才会被执行。
  3. 对象状态的影响

    • 如果您希望在对象激活后执行某些逻辑,您需要确保在激活之前设置好所需的数据。可以使用其他方法(如事件、消息系统等)来在对象激活后通知它执行特定的操作。
  4. 检测对象状态

    • 在脚本中,可以使用 gameObject.activeSelfgameObject.activeInHierarchy 来检查对象的状态,以便在需要时做出适当的响应。

被失活对象的 OnDisable 方法会在当前帧的末尾被调用,意味着在调用 SetActive(false) 之后,该对象的逻辑在这一帧内可以继续运行,直到该帧结束。

1. Controller.cs(控制器脚本)

这个脚本会在每帧中打印一条消息,并在第二次更新时将目标对象失活。

using UnityEngine;public class Controller : MonoBehaviour
{public GameObject targetObject; // 目标对象private int frameCount = 0;void Update(){frameCount++;Debug.Log("Controller Update - Frame: " + frameCount);// 在第2帧将目标对象失活if (frameCount == 2){Debug.Log("Disabling targetObject");targetObject.SetActive(false);}}
}

2. Target.cs(目标对象脚本)

这个脚本会在每帧中打印一条消息,并在被失活时打印另外一条消息。

using UnityEngine;public class Target : MonoBehaviour
{void Update(){Debug.Log("Target Update - I'm still active!");}void OnDisable(){Debug.Log("Target has been disabled.");}
}

使用说明

  1. 创建对象

    • 在 Unity 中,创建两个对象:一个名为 Controller(挂载 Controller.cs),另一个名为 Target(挂载 Target.cs)。
  2. 连接目标

    • Controller 对象的 Inspector 中,将 Target 对象拖放到 targetObject 字段中。
  3. 运行场景

    • 当您运行场景时,您将看到控制器每帧打印的信息。到达第二帧时,控制器会调用 SetActive(false) 使目标对象失活。

输出示例

在控制台中,您可能会看到类似如下的输出:

 

关键点

  • 在第二帧,TargetUpdate 方法仍然被调用,直到 SetActive(false) 后,该对象的 OnDisable 方法被调用。
  • 通过这个示例,您可以直观感受 SetActive(false) 的效果。

在 Unity 中,当您调用 SetActive(false) 使对象失活时,所有 MonoBehaviour 的生命周期方法(包括 UpdateFixedUpdateLateUpdate 和其他方法)会继续在当前帧执行,直到该帧结束。 

数据保存的问题

对于一个panel脚本,挂载到对象身上,如果一开始对象就是失活的,里面的脚本也不会被执行

 也就是里面的初始化数据什么的,对象赋值和引用什么的,都不成立,该对象甚至也为空

如果您需要在对象失活时更新数据(例如,分数、状态等),您可以通过其他脚本或类来管理这些数据。在失活状态下,您无法直接修改该对象的数据,但可以通过外部逻辑进行修改。

如何保持数据一致性

  • 在激活时更新显示
    • 当您再次激活对象时,可以在 OnEnable 方法中读取这些字段,并在 UI 或其他地方显示最新的数据。

. 面板数据的保存

  • 数据管理:可以通过脚本保存面板的数据,例如使用 ScriptableObject、PlayerPrefs 或自定义数据结构。

  • 在失活时保持数据:如果一个对象失活,其数据不会被清除。您可以在脚本中定义一个变量来保存面板状态,然后在对象被激活时读取该数据并更新 UI。

大多数的信息显示同步问题,我们看到的,打开什么界面的信息显示,

其实都是对该显示信息的对象的数值的及时更改达成效果的,实际上,这个显示信息数据的对象,更应该看做是一个数据显示器,激活和失活都只是一个显示器的启动和关闭,每次如果是要加载新的对象则是一个新的显示器,已有显示器的激活和失活,则是保留了上一次数据赋值的显示器而已,

这个显示器同样存在自己的信息,比如transform和各种挂在自己身上的组件,因为和外部信息有时候的确是有灰色地带,所以确实,因为面向对象过头,反而让信息有些混乱

NGUI 

层级的 depth

NGUI 中,层级的 depth 值决定了 UI 元素的渲染顺序,depth 值越大,元素就会越上面,越小的 depth 值则表示该元素位于更底层。

一个slider有三个sprite对象,挂谁身上

slider详解

最标准的slider创建为,一个空widget,(不一定要父子关系)

带上thumb,foreground,background三个sprite

fore是slider中变化的sprite,所以他attach了collider也没用的(foreground作为slider组件挂载对象时除外)

collider是作为fore变化的触发区域(更详细的说是,启动点击拖动的触发区域)必须要的,不然不能拖动

这个组件关键在于附上了的三个物体,仅得到这三个物体的单个组件信息,共同达成slider的功能

组件功能总结:将该组件下的,background的sprite范围,thumb的sprite范围 作为拖动触发区域,调整foreground的sprite

slider组件与挂载在哪个对象无关,仅需在组件内的三个对象信息,即可得到slider的完全效果

注:若slider脚本挂载对象为foreground,foreground自己的已有条也是可以点的(反而繁琐,不推荐) 

概括:

最好,任一对象挂slider,三个sprite往上拖,collider加在back或者thumb作为拖动触发区

StreamingAssets

在 Unity 中,StreamingAssets 文件夹用于存储游戏在运行时需要直接访问的文件。这些文件可以是文本文件、图像、音频、视频或其他资源,Unity 不会对它们进行压缩或加密,因此可以在运行时直接读取。

主要特点

  1. 直接访问StreamingAssets 中的文件可以通过 Application.streamingAssetsPath 轻松访问。这意味着你可以在游戏运行时直接读取这些文件,而不需要使用 Unity 的资源管理器。

  2. 平台独立:Unity 会根据不同的平台(如 Windows、macOS、Android、iOS 等)处理 StreamingAssets 中的文件。文件路径在不同平台上可能有所不同,但 Unity 会提供正确的路径。

  3. 未压缩:与资源文件不同,StreamingAssets 中的文件不会被 Unity 的打包系统压缩或更改格式,因此你可以保存原始文件,适合需要读取外部数据的场景。

常见用途

  • 配置文件:存储游戏的配置数据,如设置、关卡信息等。
  • 外部数据:加载外部数据文件,如 JSON、XML 或文本文件。
  • 音频和视频:存储大文件,如音频和视频,以便在游戏中直接播放。

忽略触发器

通过使用 QueryTriggerInteraction,你可以在进行物理查询时选择不考虑变成触发器的 Collider。这允许你在射线检测或重叠检测时,灵活地决定是否要将触发器包含在内。

RaycastHit hit;
if (Physics.Raycast(ray, out hit, maxDistance, layerMask, QueryTriggerInteraction.Ignore))
{// 处理与非触发器碰撞的逻辑
}

具体用法

QueryTriggerInteraction 有三个选项:

  1. UseGlobal:使用全局设置,通常取决于项目的物理设置(可以在unity设置里找到),默认情况下会考虑触发器。

  2. Ignore:在进行物理查询时忽略所有触发器。这意味着只有非触发器的 Collider 会被考虑。

  3. Collide:在进行物理查询时将触发器视为有效的碰撞体,这样触发器也会被包含在查询结果中

Collider 组件有一个选项可以勾选“Is Trigger”。当你勾选这个选项时,这个 Collider 将变成触发器。

触发器功能:触发器不会产生物理碰撞效果,物体可以穿过它。

意味着,当物体进入或离开触发器区域时,会触发相应的事件,比如 OnTriggerEnterOnTriggerExit。你可以在这些事件中编写代码,以处理进入或离开触发器时要执行的操作。

比如,你想制作一个区域,当玩家进入这个区域时触发某个事件(如打开门、播放动画等),这时就可以使用触发器。

忽略碰撞(Physics.IgnoreCollision)

定义:有时候你可能不希望某两个物体之间产生任何碰撞反应,不论它们是否为触发器。可以通过编程来实现。

用法

  • 你可以在代码中使用 Physics.IgnoreCollision(colliderA, colliderB) 来忽略两个 Collider 之间的碰撞。这样,colliderAcolliderB 在物理计算中将不会相互影响。
  • void Start() {Collider colliderA = GameObject.Find("ObjectA").GetComponent<Collider>();Collider colliderB = GameObject.Find("ObjectB").GetComponent<Collider>();Physics.IgnoreCollision(colliderA, colliderB);
    }
    

    默认不勾选,带了collider的就是真物理碰撞器,要是勾了is trigger, 就会变成空间感应器

Input.GetAxis

在 Unity 中,用于获取轴向输入的值,通常用于处理用户的输入,例如键盘、鼠标或游戏手柄的输入。这个函数返回一个 float 值,表示某个轴的输入值,范围通常在 -11 之间

具体来说,它经常用于移动或旋转角色、物体等场景。比如:

  • "Horizontal" 轴对应键盘上的左右箭头键(或 A、D 键),返回值会在 -1(左)和 1(右)之间变化。
  • "Vertical" 轴对应上下箭头键(或 W、S 键),返回值在 -1(下)和 1(上)之间变化。

了解所有的git之类的奇奇怪怪的东西

签出分支 (Checkout Branch) 是 Git 中一个常用的操作,主要用于以下几个目的:

  1. 切换分支

    • 当你执行签出操作时,Git 会将你的工作目录切换到指定的分支。这样,你就可以开始在该分支上进行开发或查看该分支的内容。
  2. 创建新分支

    • 使用 git checkout -b <new-branch-name> 命令时,可以创建一个新分支并立即切换到该分支。这允许你在新分支上开始新的开发工作,而不影响其他分支。
  3. 恢复文件状态

    • 如果你想查看某个分支在某个特定提交时的状态,可以使用签出操作恢复到那个状态。这可以用来检查历史版本或调试。

推送分支是?从a推送到b什么意思,是把a里的修改合并到b里吗

没戳,你理解得很对。

  • 推送分支:这是指你在本地所做更改的分支,比如你在开发一个新功能的分支 a

  • 从 a 推送到 b:这意味着你要将本地分支 a 的更改推送到远程的分支 b。如果 b 是远程仓库中的一个分支,那么推送操作会将 a 中的修改合并到 b 中。

关键点:

  • 推送实际上是将本地的提交(更改记录)发送到远程仓库。
  • a 如果目标分支 b 目前在远程仓库中存在,推送后 b 会更新的状态。
  • 如果目标分支 b 在远程仓库中不存在,通常会创建一个新的分支。

所以,推送是一种把你在本地开发的内容上传到远程的方式,而不只是简单的合并。

在 Git 中,“提交”和“提交并推送”有以下区别:

  1. 提交 (Commit):

    • 本地操作:提交是把你当前的修改记录保存到本地的 Git 仓库中。提交之后,这些更改只会保存在你自己的计算机上,其他人无法看到这些修改。
    • 提交的作用是创建一个“快照”,记录你当前的代码状态。
  2. 提交并推送 (Commit and Push):

    • 本地+远程操作:提交并推送首先会在本地保存你的修改(和普通提交一样),然后把这些修改推送到远程仓库(比如 GitHub、GitLab 等)。
    • 推送之后,其他人就能在远程仓库中看到你的更改,下载或合并你的代码。

总结:

  • 如果只是提交 (Commit),修改只会保存到你本地,其他人看不到。
  • 如果提交并推送 (Commit and Push),修改不仅会保存到本地,还会同步到远程仓库,其他人才能看到并获取你的修改。

所以,如果你想把修改上传给别人,需要选择“提交

git是什么软

  • CI/CD 是一种自动化流程,帮助你管理代码的更新和发布。

  • 持续集成 (CI):每当你或其他人修改代码并提交时,系统会自动运行测试,确保这些修改没有引入错误。

  • 持续交付 (CD):当代码通过测试后,系统会自动将代码部署到服务器上,使得新版本随时可以上线。

设置 CI/CD 意味着你为项目配置了这些自动化流程,可以减少手动操作,提高开发效率和软件质量。

SSH 密钥可以看作是一种密码,但它更安全,因为它由一对密钥(公钥和私钥)组成。使用 SSH 密钥的主要原因是:

  1. 安全性:SSH 密钥比传统密码更安全,避免了密码泄露的风险。

  2. 身份验证:当你尝试推送或拉取代码时,系统会使用你的密钥来验证你的身份。

如果你不设置 SSH 密钥,就无法通过 SSH 进行推送和拉取,因为系统无法确认你是否有权限访问该存储库。你可以选择使用 HTTPS 连接,这样就不需要 SSH 密钥,但每次操作时需要输入用户名和密码。

  1. 代码托管:允许开发者在云端存储和管理代码仓库。

  2. 协作工具:提供合并请求、问题追踪、代码审查等工具,支持团队协作。

  3. CI/CD 集成:都支持持续集成和持续交付(CI/CD),自动化构建和测试流程。

  4. 项目管理:提供项目管理功能,如任务板和里程碑,以便团队更好地组织工作。

区别

  • 平台和用户群:Gitee 更加关注中国用户,提供中文界面和本地化服务;而 GitLab 是国际化的,支持多种语言。
  • 自托管选项:GitLab 提供自托管版本,允许用户在自己的服务器上运行 GitLab,而 Gitee 主要是一个云平台。

总的来说,GitLab 和 Gitee 的主要功能相似,但它们的定位和用户群体有所不同。

Git 和 Gitee 之间的关系如下:

  1. Git:Git 是一个分布式版本控制系统,用于跟踪代码更改和管理项目的历史记录。它是一种工具,可以在本地和远程仓库中使用。

  2. Gitee:Gitee 是一个基于 Git 的代码托管平台,类似于 GitHub。它提供了一个在线平台,用于存储、共享和协作开发项目。Gitee 允许开发者使用 Git 命令来管理代码,但它提供了图形界面、问题追踪、代码审查等附加功能。

# 进入项目目录
cd ~/MyUnityProject# 查看当前状态
git status# 拉取最新的更改
git pull origin main# 修改了脚本中的变量,添加了新物体# 查看修改内容
git diff# 添加所有修改的文件
git add .# 提交更改
git commit -m "更新了变量值,添加了新物体"# 推送更改到远程仓库
git push origin main# 创建一个新分支用于新功能开发
git checkout -b new-game-mechanic# 在新分支上进行一些修改# 查看当前状态
git status# 添加更改
git add .# 提交新功能的更改
git commit -m "添加新的游戏机制"# 切换回主分支
git checkout main# 合并新功能分支到主分支
git merge new-game-mechanic# 删除已合并的功能分支
git branch -d new-game-mechanic# 推送更新后的主分支
git push origin main

不用这些gui,git也可以用么

是的,Git 完全可以通过命令行使用。实际上,许多开发者更喜欢使用命令行,因为它提供了更大的灵活性和控制。你可以使用命令来执行所有 Git 操作,如提交、推送、拉取、分支管理等。命令行方式在处理复杂操作或自动化任务时特别有效。只要熟悉相关命令,就可以高效地使用 Git。

GitExtensions 是一个 Git 的图形用户界面(GUI)工具,它使得使用 Git 更加直观和方便。虽然 GitExtensions 本身不是 Git,但它提供了一个界面,帮助用户更轻松地执行 Git 的各种操作,比如提交、推送、拉取和合并等。因此,你可以把它看作是一个增强 Git 使用体验的工具。

离线?意思是不联网我也可以上传吗

不完全是。在 Git 中,"离线操作" 指的是你可以在本地进行修改和提交,而不需要时时联网。具体来说:

  1. 本地更改和提交:你可以在没有网络连接的情况下修改代码并使用 git commit 将更改记录到本地仓库。

  2. 上传:一旦你有了网络连接,就可以使用 git push 将本地的提交上传到远程仓库。这个过程需要联网。

  3. 同步:同样地,若想从远程获取其他人的更改(使用 git pull),也需要联网。

Git 的离线操作指的是开发者可以在本地进行更改,而无需时刻连接到远程仓库。具体来说:

  1. 本地更改:你可以在自己的计算机上修改代码、提交更改,甚至创建分支,而不需要立即上传到远程仓库。

  2. 同步:当你完成本地的工作后,可以通过 git push 将你的更改上传到远程仓库,或使用 git pull 从远程获取最新的更改。

  3. 冲突解决:如果其他人已经更新了远程仓库,而你在本地进行了更改,推送时可能会遇到冲突。这时,Git 会提示你先拉取(pull)远程的更改,解决冲突后再进行推送。

常来说,多个人一起写一个项目,不会在同一时间一起写是吗,因为如果有人已经改了,那就会比较麻烦,或者说两个人协商好写完全不耦合的东西,然后互相没拉取对方的情况下都提交,这时虽然提示冲突,但实际上,只要安排好两个人有正常的提交顺序就行,只不过依然提示为冲突

是的,你的理解是正确的。如果三个人同时对同一个项目进行修改,情况可能会这样:

  1. 版本1:项目的初始状态。
  2. 开发者A 上传了更改,使版本变为 版本2
  3. 开发者B开发者C 仍然在使用 版本1,并进行各自的修改,假设他们的修改将版本变为 版本3

如果 开发者B开发者C 试图上传他们的更改(基于 版本1)而不先拉取 版本2,就会出现冲突。Git 会提示有冲突,要求他们手动解决这些问题,决定如何合并他们的更改。因此,在多人协作时,及时拉取最新的更改非常重要,以避免冲突。

当多个人同时更改同一部分代码时,Git 提供工具来帮助解决这些冲突

协作:多个开发者可以同时在同一个项目上工作,通过推送(push)和拉取(pull)操作共享更改。

正是这样!分支允许你在不影响原项目的情况下进行实验和开发。如果分支上的功能经过测试并且可用,你可以将其合并到主分支中;如果功能不再需要,可以直接删除分支,原项目不会受到影响。这种灵活性使得团队开发更高效,减少了错误和冲突的风险。

Git 是一个分布式版本控制系统,它可以帮助多个开发者共同协作管理和修改同一个项目的代码。以下是一些 Git 的主要功能和特点:

  1. 版本控制Git 记录每次代码更改的历史,可以轻松查看和恢复到之前的版本。

  2. 分支管理开发者可以在不同的分支上独立工作,不会影响主代码库,分支可以随时合并。

  3. 项目代码的一个独立版本。在分支上,你可以进行实验性开发、修复 bug 或添加新功能,而不会影响主分支(通常是 mainmaster)的稳定性。

  4. 协作:多个开发者可以同时在同一个项目上工作,通过推送(push)和拉取(pull)操作共享更改。

  5. 离线操作:由于 Git 是分布式的,开发者可以在本地进行更改,之后再与远程仓库同步。

  6. 解决冲突:当多个人同时更改同一部分代码时,Git 提供工具来帮助解决这些冲突。

总之,Git 是一个强大的工具,特别适合团队协作和管理复杂的项目。如果你有兴趣,可以进一步了解它的命令和工作流程!

GameObject.Instantiate(GameObject.CreatePrimitive(PrimitiveType.Sphere),fa);

会在里面先生成一个初始,然后把这个初始又当预设体生成了一次,所以会生成双倍数

Vector3 a = new Vector3(Random.Range(-100, 100), Random.Range(-100, 100), Random.Range(-100, 100));

GameObject.Instantiate(GameObject.CreatePrimitive(PrimitiveType.Sphere), fa); // 只设置父物体 newObject.transform.localPosition = a; // 设置相对父物体的位移

直接调用该一般函数,一般函数里存对invoke的调用

延迟执行,如果不要repeat就在函数里面嵌套

延迟函数只声明一次,之后会记住自己执行

在运行时,会根据对象的实际类型调用其对应的方法,而不是根据变量的类型。Java 的多态主要体现在方法重写上,而不是变量。

一般情况下的 int

  • 位数:32 位
  • 范围
    • 有符号 int-2^312^31 - 1,即约 -2.1 × 10^92.1 × 10^9

longlong是2的64次方,9.2*10^18

v.push_back()

  • 这个方法会将计算得到的结果追加vector v 的末尾。

在 C++ 中,数组的大小必须是一个常量表达式(在编译时已知的常量)

数组大小必须是编译时已知的常量:在 C++ 中,数组的大小必须是编译时常量,这意味着你不能使用运行时的变量来定义数组的大小。例如,const int maxn=1e3; 确保 maxn 是一个编译时常量,从而数组 c[maxn][maxn] 的大小在编译时就确定了。

const int maxn = 1000;  // 编译时常量
int arr[maxn];  // 正确,数组大小是编译时已知的

const 表示不可修改的常量const 修饰的变量在定义后不能修改。例如,const int maxn = 1e3; 表示 maxn 的值为 1000,且在程序运行过程中它不能被更改。如果你尝试修改它,编译器会报错。

const int maxn = 1000;
maxn = 2000;  // 错误!编译器会报错,因为 maxn 是 const

#include <bits/stdc++.h>

#include <bits/stdc++.h> 是一个非标准的头文件,通常只在某些编译器(如 GCC)的环境下提供,用于快速包含几乎所有的标准库头文件。它包含了几乎所有常见的 C++ 标准库,类似于 "一站式" 的解决方案

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

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

相关文章

使用 SSH 连接 Docker 服务器:IntelliJ IDEA 高效配置与操作指南

使用 SSH 连接 Docker 服务器&#xff1a;IntelliJ IDEA 高效配置与操作指南 本文详细介绍了如何在 2375 端口未开放的情况下&#xff0c;通过 SSH 连接 Docker 服务器并在 Idea 中进行开发。通过修改用户权限、生成密钥对以及配置 SSH 访问&#xff0c;用户可以安全地远程操作…

NASA数据集:ATLAS/ICESat-2 L3B 每日和每月网格化海冰自由面高度,第 4 版

目录 简介 摘要 代码 引用 网址推荐 0代码在线构建地图应用 机器学习 ATLAS/ICESat-2 L3B Daily and Monthly Gridded Sea Ice Freeboard, Version 4 简介 ATLAS/ICESat-2 L3B Daily and Monthly Gridded Sea Ice Freeboard, Version 4数据是由NASA的ATLAS&#xff08…

Ubuntu 系统崩了,如何把数据拷下来

问题描述&#xff1a; Linux系统中安装输入法后&#xff0c;重启后&#xff0c;导致系统无法进入&#xff0c;进入 recovery mode下的resume 也启动不了&#xff0c;所以决定将需要的东西复制到U盘 解决方案&#xff1a; 1.重启ubuntu&#xff0c;随即点按Esc进入grub菜单&am…

OpenStack Yoga版安装笔记(十五)Horizon安装

1、官方文档 OpenStack Installation Guidehttps://docs.openstack.org/install-guide/ 本次安装是在Ubuntu 22.04上进行&#xff0c;基本按照OpenStack Installation Guide顺序执行&#xff0c;主要内容包括&#xff1a; 环境安装 &#xff08;已完成&#xff09;OpenStack…

HarmonyOS/OpenHarmony Audio 实现音频录制及播放功能

关键词&#xff1a;audio、音频录制、音频播放、权限申请、文件管理 在app的开发过程中时常会遇见一些需要播放一段音频或进行语音录制的场景&#xff0c;那么本期将介绍如何利用鸿蒙 audio 模块实现音频写入和播放的功能。本次依赖的是 ohos.multimedia.audio 音频管理模块&am…

AI日常绘画【国庆海报】:盛世迎华诞,Flux国庆节海报制作教程

大家好我是极可菌&#xff01;&#xff01;&#xff01; 马上就要到祖国母亲的节日了&#xff0c;想想心里都美滋滋的&#xff0c;终于可以放松一下了。相信AI绘画关于国庆主题肯定也会精彩纷呈吧&#xff0c;今天和大家分享几组关于国庆海报的制作教程。 本文使用基于Flux的相…

windows 驱动实例分析系列-定时日志的COM驱动

本文章的前置文章为: windows 驱动编写原则 windows COM驱动 案例 windows COM驱动的I/O处理 在前面的设计中,主要是对windows提供的VirtualSerial源代码的讲解,但是那个驱动其实是一个空壳驱动,用于学习的,在I/O处理中,也讲述了serial I/O处理的本质,接下来会将这些…

【EXCEL数据处理】000009 案列 EXCEL单元格数字格式。文本型数字格式和常规型数字格式的区别

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 【EXCEL数据处理】000009 案列 EXCEL单元格数字格式。文本型数字格式和…

如何使用SCCMSecrets识别SCCM策略中潜在的安全问题

关于SCCMSecrets SCCMSecrets是一款针对SCCM策略的安全扫描与检测工具&#xff0c;该工具旨在提供一种有关 SCCM 策略的全面安全检测方法。 该工具可以从各种权限级别执行&#xff0c;并将尝试发现与策略分发相关的潜在错误配置。除了分发点上托管的包脚本外&#xff0c;它还将…

【C++篇】启航——初识C++(下篇)

接上篇【C篇】启航——初识C&#xff08;上篇&#xff09; 目录 一、引用 1.引用的概念 2.引用的基本语法 3.引用的特点 3.1 别名 3.2 不占用额外内存 3.3 必须初始化 3.4 不能为 NULL 4.引用的使用 4.1 函数参数传递 4.2 返回值 4.3 常量引用 5.引用和指针的关…

网站建设公司如何选?2024专业网站建设公司哪家好TOP3

要找一家靠谱的网站建设公司&#xff0c;可以根据以下五点判断&#xff1a; 1.企业的工商信息 企业有多少人、什么时候成立的、成立资金是多少、是否有违约记录这些都可以在查企业的那种app里可以看到&#xff0c;去查的时候一定要仔细甄别&#xff0c;别最后找了一家皮包公司…

PCL 索引空间采样

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 索引空间采样 2.1.2 可视化原始点云和下采样后的点云 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接&#xff1a; PCL点云算法与项目实战案例汇总&#xf…

软件设计师——计算机网络

&#x1f4d4;个人主页&#x1f4da;&#xff1a;秋邱-CSDN博客☀️专属专栏✨&#xff1a;软考——软件设计师&#x1f3c5;往期回顾&#x1f3c6;&#xff1a;&#x1f31f;其他专栏&#x1f31f;&#xff1a;C语言_秋邱 一、OSI/ RM七层模型(⭐⭐⭐) ​ 层次 名称 主要功…

【Iceberg分析】调研Iceberg中表的原地演变

调研Iceberg中表的原地演变 文章目录 调研Iceberg中表的原地演变原生非分区表文件关系图表的原地演变之表schema演变新增字段new_column文件关系变化图为新增字段写入数据文件关系变化图删除新增字段文件关系变化图新增字段new_column2文件关系变化图删除数据文件关系变化图 原…

C++ | Leetcode C++题解之第433题最小基因变化

题目&#xff1a; 题解&#xff1a; class Solution { public:int minMutation(string start, string end, vector<string>& bank) {int m start.size();int n bank.size();vector<vector<int>> adj(n);int endIndex -1;for (int i 0; i < n; i)…

爬虫及数据可视化——运用Hadoop和MongoDB数据进行分析

作品详情  运用Hadoop和MongoDB对得分能力数据进行分析&#xff1b;  运用python进行机器学习的模型调理&#xff0c;利用Pytorch框架对爬取的评论进行情感分析预测&#xff1b;  利用python和MySQL对网站的数据进行爬取、数据清洗及可视化。

快速实现AI搜索!Fivetran 支持 Milvus 作为数据迁移目标

Fivetran 现已支持 Milvus 向量数据库作为数据迁移的目标&#xff0c;能够有效简化 RAG 应用和 AI 搜索中数据源接入的流程。 数据是 AI 应用的支柱&#xff0c;无缝连接数据是充分释放数据潜力的关键。非结构化数据对于企业搜索和检索增强生成&#xff08;RAG&#xff09;聊天…

SpringBoot框架下体育馆管理系统的构建

1引言 1.1课题背景 当今时代是飞速发展的信息时代。在各行各业中离不开信息处理&#xff0c;这正是计算机被广泛应用于信息管理系统的环境。计算机的最大好处在于利用它能够进行信息管理。使用计算机进行信息控制&#xff0c;不仅提高了工作效率&#xff0c;而且大大的提高了其…

江协科技STM32学习- P19 TIM编码器接口

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黄桃罐头&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​…

Redis篇(Java操作Redis)

目录 讲解一&#xff1a;简介 讲解二&#xff1a;Jedis Github 一、创建项目、 二、添加依赖 三、配置文件 四、Java连接Redis 五、通过Redis连接池获取连接对象并操作服务器 六、封装JedisUtil对外提供连接对象获取方法 七、Java操作Redis五种数据类型 1. 连接与释放…