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.rhkb.cn/news/435889.html

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

相关文章

桥接(桥梁)模式

简介 桥接模式&#xff08;Bridge Pattern&#xff09;又叫作桥梁模式、接口&#xff08;Interface&#xff09;模式或柄体&#xff08;Handle and Body&#xff09;模式&#xff0c;指将抽象部分与具体实现部分分离&#xff0c;使它们都可以独立地变化&#xff0c;属于结构型…

【AAOS】CarService -- Android汽车服务

概述 Android Automative OS理解为Android OS + Android Automative Service,而CarService就是提供汽车相关功能的最主要模块。 CarService与Android OS的关系:CarService运行于独立的进程中,其作为原有Android服务的补充,在汽车设备上运行。CarService在整体车载通信中起…

JAVA线程基础二——锁的概述之乐观锁与悲观锁

乐观锁与悲观锁 乐观锁和悲观锁是在数据库中引入的名词,但是在并发包锁里面也引入了类似的思想&#xff0c;所以这里还是有必要讲解下。 悲观锁指对数据被外界修改持保守态度&#xff0c;认为数据很容易就会被其他线程修改&#xff0c;所以在数据被处理前先对数据进行加锁&…

python 如何引用变量

在字符串中引入变量有三种方法&#xff1a; 1、 连字符 name zhangsan print(my name is name) 结果为 my name is zhangsan 2、% 字符 name zhangsan age 25 price 4500.225 print(my name is %s%(name)) print(i am %d%(age) years old) print(my price is %f%(pric…

项目管理专业资质认证ICB 3中关于项目经理素质的标准

项目管理专业资质认证ICB 3中关于项目经理素质的标准&#xff0c;的确很全面&#xff0c;下面摘录之&#xff1a;

15年408计算机网络

第一题&#xff1a; 解析&#xff1a; 接收方使用POP3向邮件服务器读取邮件&#xff0c;使用的TCP连接&#xff0c;TCP向上层提供的是面向连接的&#xff0c;可靠的数据传输服务。 第二题&#xff1a; 解析&#xff1a;物理层-不归零编码和曼彻斯特编码 编码1&#xff1a;电平在…

LabVIEW项目编码器选择

在LabVIEW项目中&#xff0c;选择增量式&#xff08;Incremental Encoder&#xff09;和绝对式&#xff08;Absolute Encoder&#xff09;编码器取决于项目的具体需求。增量式编码器和绝对式编码器在工作原理、应用场景、精度和成本等方面存在显著差异。以下从多方面详细阐述两…

又一年国庆至,“打工人”在欢呼,OTA们在雀跃

国庆“黄金周”倒计时最后一天&#xff0c;旅游出行即将迎来新一轮高峰。 安信国际指出&#xff0c;国庆期间&#xff0c;出游人次的增长确定性高于人均消费的增长。预计国内旅游收入7,000-7,500亿元&#xff0c;较2019年同期增8%-15%&#xff1b;预计国内旅游人次8.5-9.0亿人…

今日指数项目A股大盘数据采集

1、A股大盘数据采集 1.1 A股大盘数据采集准备 1.1.1 配置ID生成器bean A股大盘数据采集入库时&#xff0c;主键ID保证唯一&#xff0c;所以在stock_job工程配置ID生成器&#xff1a; Configuration public class CommonConfig {/*** 配置基于雪花算法生成全局唯一id* 参与…

springboot+大数据+基于协同过滤算法的校园食堂订餐系统【内含源码+文档+部署教程】

博主介绍&#xff1a;✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久&#xff0c;选择我们就是选择放心、选择安心毕业✌ &#x1f345;由于篇幅限制&#xff0c;想要获取完整文章或者源码&#xff0c;或者代做&am…

Git常用方法——详解

一、下载安装git git官网&#xff1a; Git - Downloads (git-scm.com) 下载安装Git&#xff08;超详细超简单&#xff09;_git下载-CSDN博客 二、克隆下载至本地 1、复制HTTPS链接 在gitee或者gitLab或者gitHub上复制HTTPS链接 2、打开Open Git Bash here 在本地想要新建文…

闯关训练一:Linux基础

闯关任务&#xff1a;完成SSH连接与端口映射并运行hello_world.py 1.创建开发机 2.SSH连接 3. VS-Code 连接 选择 Linux 平台 &#xff0c;输入密码 &#xff0c;选择进入文件夹 4.端口映射 按照下文安装Docs pip install gradio 运行server.py import gradio as grdef …

工业制造场景中的设备管理深度解析

在工业制造的广阔领域中&#xff0c;设备管理涵盖多个关键方面&#xff0c;对企业的高效生产和稳定运营起着举足轻重的作用。 一、设备运行管理 1.设备状态监测 实时监控设备的运行状态是确保生产顺利进行的重要环节。通过传感器和数据采集系统等先进技术&#xff0c;获取设备…

新书速览|Stable Diffusion-ComfyUI AI绘画工作流解析

《Stable Diffusion-ComfyUI AI绘画工作流解析》 本书内容 《Stable Diffusion-ComfyUI AI绘画工作流解析》从零开始&#xff0c;详尽系统地讲解从本地部署ComfyUI、下载安装自定义节点&#xff0c;到搭建各种工作流程的全过程。同时&#xff0c;辅以3D形象转绘、艺术二维码和证…

思科dhcp的配置

以路由器为例 让pc3 自动获取ip地址并获取的网段为172.16.4.100-172.16.4.200 配置如下&#xff1a; R1(config)#interface GigabitEthernet0/2 R1(config)#ip address 172.16.4.254 255.255.255.0 R1(config)# no shutdown R1(config)#ip dhcp pool 4_pool //创建dhcp地址池…

【原创】java+swing+mysql企业招聘管理系统设计与实现

个人主页&#xff1a;程序员杨工 个人简介&#xff1a;从事软件开发多年&#xff0c;前后端均有涉猎&#xff0c;具有丰富的开发经验 博客内容&#xff1a;全栈开发&#xff0c;分享Java、Python、Php、小程序、前后端、数据库经验和实战 文末有本人名片&#xff0c;希望和大家…

【设计模式-模板】

定义 模板方法模式是一种行为设计模式&#xff0c;它在一个方法中定义了一个算法的骨架&#xff0c;并将一些步骤延迟到子类中实现。通过这种方式&#xff0c;模板方法允许子类在不改变算法结构的情况下重新定义算法中的某些特定步骤。 UML图 组成角色 AbstractClass&#x…

【DP解密多重背包问题】:优化策略与实现

文章目录 什么是多重背包问题&#xff1f;多重背包问题的数学模型 例题多重背包问题Ⅰ多重背包问题Ⅱ 总结 什么是多重背包问题&#xff1f; 多重背包问题是一个经典的组合优化问题。与标准背包问题不同&#xff0c;在多重背包问题中&#xff0c;每种物品可以选择多个&#xf…

基于php的律所管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

MQTT--EMQX入门+MQTTX使用

目录 1、什么是EMQX&#xff1f;1.1 EMQX介绍1.2 EMQX特点1.3 与物联网之间的关系以及主要的产品主要的产品 2、安装启动2.1 基本命令2.2 目录结构 3、MQTTX客户端3.1 连接配置 总结PS: 1、什么是EMQX&#xff1f; 首先你得有MQTT的知识&#xff0c;不认识MQTT的小伙伴可以先看…