你好，欢迎光临，我是你的代码猴子，我们将继续 hello and welcome I am your code monkey
你好，欢迎光临，我是你的代码猴子，我们将继续 in this video we're going to make it on
磁带统一让我们VM tape in unity let's VM
所以在这里，我有一个通用的uiwindow，其中包含一些文本和一些按钮 so over here I have a generic uiwindow
所以在这里，我有一个通用的uiwindow，其中包含一些文本和一些按钮 it has some text and some buttons now we
当我们将鼠标移到上方时，想要显示一些额外的信息 would like to display some extra
当我们将鼠标移到上方时，想要显示一些额外的信息 information when we pass the mouse over
每个按钮和每个标签，因此我们将首先使用工具提示 each button and each label so we're
每个按钮和每个标签，因此我们将首先使用工具提示 going to use a tooltip to do that first
让我们创建工具提示和编辑器，让我们进入画布，在这里 let's create our tooltip and the editor
让我们创建工具提示和编辑器，让我们进入画布，在这里 so let's go into the canvas and here
首先创建一个新的空游戏对象名称为Salta first of all create a new empty game
首先创建一个新的空游戏对象名称为Salta object name is Salta
现在里面，我们将需要文本和背景，因此对于背景 now inside we're going to need text and
现在里面，我们将需要文本和背景，因此对于背景 a background so for the background just
添加一个简单的图像，并为文本和文本赋予它约一个的字体大小 add a simple image and for the text and
添加一个简单的图像，并为文本和文本赋予它约一个的字体大小 the text give it a font size of about
十二点并将其放置在左下角，现在我们将锚定 twelve and position it on the in lower
十二点并将其放置在左下角，现在我们将锚定 left corner now we're going to anchor
将它们全部放在左下角，并将它们全部归零 both of these to the in lower left
将它们全部放在左下角，并将它们全部归零 corner and put them all on zero all
对，就像我们要移动的这个游戏对象一样 right so just like that we have this
对，就像我们要移动的这个游戏对象一样 game object that we want to move around
现在背景的大小无关紧要，因为它不会动态 now the size of the background doesn't
现在背景的大小无关紧要，因为它不会动态 matter since it won't be dynamically
根据我们提供的任何文本进行修改，对于文本，我们将其放在 modified based on whatever text we give
根据我们提供的任何文本进行修改，对于文本，我们将其放在 it and for the text let's just put it on
四和四，所以我们有一点点边框，因此文本更易于阅读 four and four so we have a little bit of
四和四，所以我们有一点点边框，因此文本更易于阅读 a border so the text is easier to read
最后禁用重铸目标，以防万一我们需要点击我们的 and finally disabled recast target just
最后禁用重铸目标，以防万一我们需要点击我们的 in case we need to click through our
过滤好吧，这就是我们音调提示的变换，现在让我们 filter all right so that's the transform
过滤好吧，这就是我们音调提示的变换，现在让我们 for our tone tip now let's make the
类来实际处理代码，所以一个新的C-Sharp脚本，我叫Dalton，所以 class to actually handle the code so a
类来实际处理代码，所以一个新的C-Sharp脚本，我叫Dalton，所以 new c-sharp script my name is Dalton so
在这里，我们将有两个功能，一个私有的void show工具提示 in here we're going to have two
在这里，我们将有两个功能，一个私有的void show工具提示 functions a private void show tooltip
而我们做的私有虚空heidsontour的第一件事就是设置游戏对象 and a private void heidsontour first
而我们做的私有虚空heidsontour的第一件事就是设置游戏对象 thing we do is just set the game object
启用true或false以显示或隐藏它 to active either true or false
启用true或false以显示或隐藏它 in order to show or hide it salted for
显示工具提示作为参数，我们将接收 the show tooltip as a parameter we're
显示工具提示作为参数，我们将接收 going to receive a string for the
困扰的字符串和内部，我们将设置文本，以便保持 haunted string and inside we're going to
困扰的字符串和内部，我们将设置文本，以便保持 set the text so in order to keep our
代码简单漂亮，让我们首先在清醒时获取引用 code nice and simple
代码简单漂亮，让我们首先在清醒时获取引用 let's first grab references on our awake
好吧，首先要做的是先将提示音税点文字设置为我们的工具提示字符串 okay so first things first set the tone
好吧，首先要做的是先将提示音税点文字设置为我们的工具提示字符串 tip tax dot text to our tool tip string
现在我们需要计算背景的大小，所以我们为 and now we need to calculate the size of
现在我们需要计算背景的大小，所以我们为 our background so we do a vector2 for
现在我们的背景尺寸可以得到宽度，我们可以使用工具提示文本点 our background size now to get the width
现在我们的背景尺寸可以得到宽度，我们可以使用工具提示文本点 we get the tool tip text dot preferred
宽度和高度，我们没有首选高度的文字，这会给 width and for the height we don't have
宽度和高度，我们没有首选高度的文字，这会给 text at preferred height this will give
我们使用此字符串时文本占用的确切大小，因此我们 us the exact size that our text is
我们使用此字符串时文本占用的确切大小，因此我们 occupying while using this string so we
在编辑器中将文本稍微偏移一下，以便于 offset our text by a little bit in the
在编辑器中将文本稍微偏移一下，以便于 editor in order to make it easier to
阅读，因此我们也需要在此处添加内容，以便为文本定义一个浮点数 read so we need to add that in here as
阅读，因此我们也需要在此处添加内容，以便为文本定义一个浮点数 well so we define a float for the text
填充大小，我们将其设置为4，因此我们将增加背景 padding size and we set it at four so
填充大小，我们将其设置为4，因此我们将增加背景 we're going to increase the background
填充的大小乘以2，因为我们在左侧和左侧都填充了 size by the padding multiplied by two
填充的大小乘以2，因为我们在左侧和左侧都填充了 since we got padding on the left and on
右边，最后我们只接受背景rect变换点 the right side and finally we simply
右边，最后我们只接受背景rect变换点 accept the background rect transform dot
可以将Delta大小设置为该背景大小，所以现在进行测试，让我们展示一下 size Delta to be this background size
可以将Delta大小设置为该背景大小，所以现在进行测试，让我们展示一下 okay so now for testing let's show it
带有一些文本，所以我们上到这里，我们只是做一个显示工具提示，让我们给 with some text so we go up here and we
带有一些文本，所以我们上到这里，我们只是做一个显示工具提示，让我们给 simply do a show tooltip and let's give
它可以是一些随机倾斜的文本，所以让我们测试一下，是的，有工具提示 it some random tilted text all right so
它可以是一些随机倾斜的文本，所以让我们测试一下，是的，有工具提示 let's test and yep there's the tooltip
如您所见，文本正确显示，背景也 and as you can see the text is correctly
如您所见，文本正确显示，背景也 displayed and the background is also
正确的大小以匹配我们现在输入的任何文本，让我们扔掉一些 correctly sized to match whatever text
正确的大小以匹配我们现在输入的任何文本，让我们扔掉一些 we put it now let's throw out some
随机标签以查看背景如何正确更改 random tags to see how the background is
随机标签以查看背景如何正确更改 correctly changing
好的，这是一些简单的测试代码，我正在创建一个功能周期 okay so here is some simple testing code
好的，这是一些简单的测试代码，我正在创建一个功能周期 I'm creating a function periodic which
是代码猴子的一部分，请注意，您可以从统一中免费获取 is part of the code monkey to notice
是代码猴子的一部分，请注意，您可以从统一中免费获取 that you can grab for free from unity
现在，代码猴子从容不迫，这将每半秒执行一次此操作 code monkey calm now essentially this
现在，代码猴子从容不迫，这将每半秒执行一次此操作 will run this action every half a second
所以我们将定义一个只包含一堆随机字符的字符串， so we're going to define a string with
所以我们将定义一个只包含一堆随机字符的字符串， just a bunch of random characters and
我们将在30至100次之间循环它，并增加 we're going to cycle through it between
我们将在30至100次之间循环它，并增加 30 and 100 50 times and increase by
在此显示文字中添加一个来自此字符串的简单字符，然后 adding to our show text a simple
在此显示文字中添加一个来自此字符串的简单字符，然后 character from this string and
然后显示总数，因此基本上这将始终是随机的，所以我看是否 afterwards show the total so essentially
然后显示总数，因此基本上这将始终是随机的，所以我看是否 this will always be random so I see if
无论我们使用什么文本，我们的代码都能正确调整背景大小 our code is correctly resizing our
无论我们使用什么文本，我们的代码都能正确调整背景大小 background regardless of what text we
随便看看，随便看看，随便看看 give it and yep as you can see
随便看看，随便看看，随便看看 regardless of the random text that goes
在其中正确调整背景大小以匹配其中的任何内容，并且 in it correctly resizes the background
在其中正确调整背景大小以匹配其中的任何内容，并且 to match whatever is in there and it
即使使用多行文本也可以使用现在，让我们从 works even with multi-line text okay now
即使使用多行文本也可以使用现在，让我们从 let's make our tool tip from of the
鼠标，以便执行此操作，让我们进入更新，在这里我们可以获取 mouse so in order to do that let's go to
鼠标，以便执行此操作，让我们进入更新，在这里我们可以获取 the update so in here we can get the
使用输入鼠标位置的屏幕鼠标位置，但这是屏幕 screen mouse position using input Mouse
使用输入鼠标位置的屏幕鼠标位置，但这是屏幕 position however this is the screen
鼠标的位置而不是UI的位置，因此我们需要进行一次转换 position of the mouse and not the UI
鼠标的位置而不是UI的位置，因此我们需要进行一次转换 position so we need to do a conversion
因此，为了做到这一点，我们将使用rect转换实用程序并执行 so in order to do that we're going to
因此，为了做到这一点，我们将使用rect转换实用程序并执行 use the rect transform utility and do a
屏幕上的第二点和矩形中的欢迎点 screen point two and welcome point in
屏幕上的第二点和矩形中的欢迎点 rectangle for the rectangle we want to
将转换为将成为屏幕的转换点父级 convert into is going to be our
将转换为将成为屏幕的转换点父级 transform dot parent for the screen
点，我们将要使用的鼠标位置用于相机 point we're going to use the mouse
点，我们将要使用的鼠标位置用于相机 position for the camera we're going to
需要引用我们的UI相机，最后我们将此值返回到 need a reference to our UI camera and
需要引用我们的UI相机，最后我们将此值返回到 finally we return this value into a
本地点，所以我们需要参考我们的相机，所以让我们在这里做一个 local point so we need the reference to
本地点，所以我们需要参考我们的相机，所以让我们在这里做一个 our camera so let's go up here make a
UI相机的专用相机，并使其成为序列化字段，因此我们可以设置 private camera for the UI camera and
UI相机的专用相机，并使其成为序列化字段，因此我们可以设置 make it a serialize field so we can set
它在编辑器中，在这里它需要一个rect变换，所以让我们开始吧 it in the editor and here it requires a
它在编辑器中，在这里它需要一个rect变换，所以让我们开始吧 rect transform so let's do a get
组件还可以，因此我们可以正确转换输入鼠标 component okay so with this we are
组件还可以，因此我们可以正确转换输入鼠标 correctly converting the input mouse
位置到此转换的父级内部的位置，因此我们拥有 position into a position inside the
位置到此转换的父级内部的位置，因此我们拥有 parent of this transform so we have the
在本地点是卸货组成，所以在这里我们要做的就是 in local point which is the unload
在本地点是卸货组成，所以在这里我们要做的就是 composition so in here all we need to do
是低构成的转化 is that the
是低构成的转化 transform that low composition to be
这个本地点还可以，所以让我们测试一下 this local point
这个本地点还可以，所以让我们测试一下 okay so let's test and see if the
工具提示跟随鼠标，请确保我们现在将相机拖到此处，因为 tooltip is following the mouse make sure
工具提示跟随鼠标，请确保我们现在将相机拖到此处，因为 we drag the camera onto here now since
我们正在设置画布以使用屏幕空间摄像头，那么我们需要UI we are setting up our canvas to use
我们正在设置画布以使用屏幕空间摄像头，那么我们需要UI screen space camera then we need our UI
相机参考，但如果我们使用屏幕空间覆盖，则不会 camera reference but if we were using
相机参考，但如果我们使用屏幕空间覆盖，则不会 screen space overlay then we would not
需要相机参考，我们将其保留为否，因此让我们来看一下 need the camera reference and we would
需要相机参考，我们将其保留为否，因此让我们来看一下 simply leave it as no so let's see and
是的，您可以看到工具提示正在随机更改 yep there you go as you can see the
是的，您可以看到工具提示正在随机更改 tooltip is randomly changing the
背景一些单词一切都有些单词，现在跟随鼠标 background some words everything some
背景一些单词一切都有些单词，现在跟随鼠标 words and it is now following the mouse
好吧，现在让我们做一些静态功能来显示和隐藏我们的工具提示 okay now let's make some static
好吧，现在让我们做一些静态功能来显示和隐藏我们的工具提示 functions to show and hide our tooltip
因此，我们将使一个公共静态void显示20个静态并赋予它相同的值 so we're going to make a public static
因此，我们将使一个公共静态void显示20个静态并赋予它相同的值 void show 20 static and give it the same
参数，因此是工具提示字符串的字符串，我们将公开 parameter so a string for the tooltip
参数，因此是工具提示字符串的字符串，我们将公开 string and we're going to have a public
static void我不是静态的，我们正在创建静态函数，因此我们可以 static void I don't it static we're
static void我不是静态的，我们正在创建静态函数，因此我们可以 creating static functions so we can
轻松地从我们需要的任何其他课程中使用此课程，所以我们需要的只是上 easily use this class from any other
轻松地从我们需要的任何其他课程中使用此课程，所以我们需要的只是上 class we need so all we need is to go up
在这里为我们的实例创建一个私有的静态工具提示，然后立即设置 here and create a private static tooltip
在这里为我们的实例创建一个私有的静态工具提示，然后立即设置 for our instance and on away set the
实例，这里只是不实例不显示工具提示 instance to this and here simply do
实例，这里只是不实例不显示工具提示 instance not show tooltip give it the
工具提示字符串和此处的相同内容，所以我们现在公开了这两个 tooltip string and same thing in here
工具提示字符串和此处的相同内容，所以我们现在公开了这两个 all right so we now got these two public
我们可以在代码中的其他地方使用的功能，因此仅用于测试 functions that we can use from elsewhere
我们可以在代码中的其他地方使用的功能，因此仅用于测试 in our code so just for testing we're
将向这些按钮和这些标签添加工具提示，以了解如何使用 going to add a tool tip to these buttons
将向这些按钮和这些标签添加工具提示，以了解如何使用 and these labels to see how we could use
在最终游戏中，这些按钮具有按钮UI组件， this on a final game these buttons have
在最终游戏中，这些按钮具有按钮UI组件， a button UI component which again is
代码猴子Tonys的一部分，它是一个非常简单的功能，其中包含一些 part of the code monkey Tonys it's a
代码猴子Tonys的一部分，它是一个非常简单的功能，其中包含一些 very simple function that has some
类，以便我们可以移至上方并单击我们的按钮 classes so that we can move over and
类，以便我们可以移至上方并单击我们的按钮 click our button which is what we're
实施我们的汤顿将需要 going to need in order to implement our
实施我们的汤顿将需要 Taunton
因此，为了进行测试，创建一个新的C Sharp脚本，这将是我们的窗口 so just for testing create a new C sharp
因此，为了进行测试，创建一个新的C Sharp脚本，这将是我们的窗口 script this will be our window
因此，在按钮UI上，我将鼠标悬停在一次funk上，仅触发一个动作 so on the button UI I have a mouse over
因此，在按钮UI上，我将鼠标悬停在一次funk上，仅触发一个动作 once funk which triggers an action only
一旦鼠标移到按钮上，这正是我们需要的按钮 once when the mouse goes over the button
一旦鼠标移到按钮上，这正是我们需要的按钮 which is exactly what we need in order
以显示我们的tanta，所以当我将鼠标移到上方时，动作将进入 to show our tanta so the action when I
以显示我们的tanta，所以当我将鼠标移到上方时，动作将进入 pass the mouse over will go into the
总课，并称表演为嘲讽静态-在这种情况下，说攻击和 total class and call the show taunted
总课，并称表演为嘲讽静态-在这种情况下，说攻击和 static - in this case say attack and
然后我将鼠标放开一次，当鼠标触发一次 then I have the mouse out once funk
然后我将鼠标放开一次，当鼠标触发一次 which triggers once when the mouse
离开按钮，使其非常适合静态胶带上的高度，因此让我们应用 leaves the button so it is perfect for
离开按钮，使其非常适合静态胶带上的高度，因此让我们应用 the height on tape static so let's apply
所有按钮和所有标签都可以，所以这里非常简单 this to all the buttons and all the
所有按钮和所有标签都可以，所以这里非常简单 labels okay so here it is pretty simple
当我们将鼠标移到上方时，我们将显示一些不会显示的字符串 we have some strings that won't be
当我们将鼠标移到上方时，我们将显示一些不会显示的字符串 displayed when we pass the mouse over a
按钮，然后当我们离开按钮时，我们只是隐藏吨，所以让我们来看看 button and then when we leave the button
按钮，然后当我们离开按钮时，我们只是隐藏吨，所以让我们来看看 we simply hide the tonton so let's see
实际上，这是窗口，如果我将鼠标移过 that in action okay here's the window
实际上，这是窗口，如果我将鼠标移过 and if I pass the mouse over yep there
我们走了，我得到一个不错的提示，说这是攻击按钮，这是防御 we go I got a nice stone tip saying this
我们走了，我得到一个不错的提示，说这是攻击按钮，这是防御 is the attack button this is the defend
尽可能按一下巡逻的健康程度移动速度和攻击力 button the patrol health amount movement
尽可能按一下巡逻的健康程度移动速度和攻击力 speed and attack damage and as you can
看到它跟随鼠标，所以现在我们可以轻松地给播放器一些额外的东西 see it follows the mouse so now we can
看到它跟随鼠标，所以现在我们可以轻松地给播放器一些额外的东西 easily give the player some extra
信息，只要我们需要，您就可以使用-创建了一个工具提示 information whenever we need to so there
信息，只要我们需要，您就可以使用-创建了一个工具提示 you have it - created a tooltip to
在使代码动态适应的同时向播放器显示额外的信息 display extra information to the player
在使代码动态适应的同时向播放器显示额外的信息 while making the code dynamically adapt
到我们在下一个视频中提供的任何文本的大小 to the size of whatever text we give it
到我们在下一个视频中提供的任何文本的大小 in the next video we're going to make
确保我们的工具提示永远不会离开屏幕，并且始终如您所愿地始终位于屏幕顶部 sure our tooltip never leaves the screen
确保我们的工具提示永远不会离开屏幕，并且始终如您所愿地始终位于屏幕顶部 and it's always on top as always you can
如果有的话，可以从统一代码Monkey comm下载实用程序中的项目文件 download the project files in utilities
如果有的话，可以从统一代码Monkey comm下载实用程序中的项目文件 from unity code monkey comm if you have
任何问题都会在评论中发布，我会尽力回答 any questions post them in the comments
任何问题都会在评论中发布，我会尽力回答 and I'll do my best answer them
订阅更多视频，我下次见 subscribe for more videos and I'll see
订阅更多视频，我下次见 you next time
您 you