private CharacterData m_CharacterData; private CharacterSkillPart m_SkillPart; private AttackModeItem m_CurAttackModeItem; //当前选中修行方式item private int m_ClickSkillItemIndex; //点击选中的技能预制体的索引 private List<ItemSubSelectSkill> m_ItemsSelectSkill = new List<ItemSubSelectSkill>(); //选择技能预制体 private List<SkillFightFunctionEvaluationItem> m_SkillFunctionEvaluationScoreItems = new List<SkillFightFunctionEvaluationItem>(); //技能功能类型评分item集合 private const string StrongerKey = "FormUnitDetail.SubUICultivation.Stronger"; //有擅长 private const string WeaknessKey = "FormUnitDetail.SubUICultivation.Weakness"; //有较弱 private const string BalanceKey = "FormUnitDetail.SubUICultivation.Balance"; //均衡 protected void OnEnable() { GameEntry.Event.Subscribe(EventSelectedSkillAppoint.EventId, OnEventSelectedSkillAppoint); } protected void OnDisable() { if (GameEntry.Event.Check(EventSelectedSkillAppoint.EventId, OnEventSelectedSkillAppoint)) { GameEntry.Event.Unsubscribe(EventSelectedSkillAppoint.EventId, OnEventSelectedSkillAppoint); } } private void Awake() { m_SelectModeDropdown.onValueChanged.AddListener(CultivationSelectMode); InitFightSkill(); InitAttackMode(); InitSelectMode(); }
时间: 2024-02-10 19:26:41 浏览: 22
这段代码是一个类的成员变量和方法的定义。它包含了一些私有的成员变量,如CharacterData、CharacterSkillPart、AttackModeItem等。还有一些整型变量和集合类型的成员变量。
在OnEnable()方法中,订阅了一个名为EventSelectedSkillAppoint的事件。
在OnDisable()方法中,取消订阅了EventSelectedSkillAppoint事件,如果之前有订阅的话。
在Awake()方法中,给一个下拉列表m_SelectModeDropdown添加了一个事件监听器,并调用了InitFightSkill()、InitAttackMode()和InitSelectMode()方法。
以上就是这段代码的主要内容。
相关问题
java base58编码_base58 编码、解码
Base58编码是一种用于数字和字母的编码方式,它主要用于比特币地址、IPFS哈希等。
Java中实现Base58编码的方法如下:
```java
import java.math.BigInteger;
import java.util.Arrays;
public class Base58 {
private static final char[] ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz".toCharArray();
private static final int BASE_58 = ALPHABET.length;
public static String encode(byte[] input) {
if (input.length == 0) {
return "";
}
// Count leading zeros.
int zeros = 0;
while (zeros < input.length && input[zeros] == 0) {
++zeros;
}
// Convert base-256 digits to base-58 digits (plus conversion to ASCII characters)
byte[] temp = Arrays.copyOf(input, input.length); // since we modify it in-place
char[] encoded = new char[temp.length * 2]; // upper bound
int outputStart = encoded.length;
for (int inputStart = zeros; inputStart < temp.length; ) {
encoded[--outputStart] = ALPHABET[divmod(temp, inputStart, 256, BASE_58)];
if (temp[inputStart] == 0) {
++inputStart; // optimization - skip leading zeros
}
}
// Preserve exactly as many leading encoded zeros in output as there were leading zeros in input.
while (outputStart < encoded.length && encoded[outputStart] == ALPHABET[0]) {
++outputStart;
}
while (--zeros >= 0) {
encoded[--outputStart] = ALPHABET[0];
}
// Return encoded string (including encoded leading zeros).
return new String(encoded, outputStart, encoded.length - outputStart);
}
public static byte[] decode(String input) {
if (input.length() == 0) {
return new byte[0];
}
// Convert the base58-encoded ASCII chars to a base58 byte sequence (base58 digits).
byte[] input58 = new byte[input.length()];
for (int i = 0; i < input.length(); ++i) {
char c = input.charAt(i);
int digit58 = -1;
if (c >= '1' && c <= '9') {
digit58 = c - '1';
} else if (c >= 'A' && c <= 'H') {
digit58 = c - 'A' + 9;
} else if (c >= 'J' && c <= 'N') {
digit58 = c - 'J' + 17;
} else if (c >= 'P' && c <= 'Z') {
digit58 = c - 'P' + 22;
} else if (c >= 'a' && c <= 'k') {
digit58 = c - 'a' + 33;
} else if (c >= 'm' && c <= 'z') {
digit58 = c - 'm' + 44;
} else if (c == 'l' || c == 'i') {
digit58 = 34;
} else if (c == 'o' || c == '0') {
digit58 = 0;
}
if (digit58 == -1) {
throw new IllegalArgumentException("Illegal character " + c + " at position " + i);
}
input58[i] = (byte) digit58;
}
// Count leading zeros.
int zeros = 0;
while (zeros < input58.length && input58[zeros] == 0) {
++zeros;
}
// Convert base-58 digits to base-256 digits.
byte[] temp = new byte[input.length()];
int outputStart = temp.length;
for (int inputStart = zeros; inputStart < input58.length; ) {
temp[--outputStart] = divmod(input58, inputStart, BASE_58, 256);
if (input58[inputStart] == 0) {
++inputStart; // optimization - skip leading zeros
}
}
// Ignore extra leading zeros that were added during the calculation.
while (outputStart < temp.length && temp[outputStart] == 0) {
++outputStart;
}
// Return decoded data (including original number of leading zeros).
return Arrays.copyOfRange(temp, outputStart - zeros, temp.length);
}
private static byte divmod(byte[] number, int firstDigit, int base, int divisor) {
// this is just long division which accounts for the base of the input digits
int remainder = 0;
for (int i = firstDigit; i < number.length; i++) {
int digit = (int) number[i] & 0xFF;
int temp = remainder * base + digit;
number[i] = (byte) (temp / divisor);
remainder = temp % divisor;
}
return (byte) remainder;
}
}
```
使用方法:
```java
String input = "Hello, world!";
byte[] data = input.getBytes();
String encoded = Base58.encode(data);
byte[] decoded = Base58.decode(encoded);
String output = new String(decoded);
System.out.println("Input: " + input);
System.out.println("Encoded: " + encoded);
System.out.println("Decoded: " + output);
```
输出结果如下:
```
Input: Hello, world!
Encoded: 2NEpo7TZRX1LZEdD3V7LzF5awNk6JZLTbbU
Decoded: Hello, world!
```
Base58编码在比特币等加密货币中有广泛应用。
unity TMP_Text设置鼠标光标,不使用Tmp_inputfield
要在 Unity 中使用 TMP_Text 设置鼠标光标,需要实现以下步骤:
1. 为 TMP_Text 组件添加 EventTrigger 组件,该组件可以捕捉鼠标事件。
2. 在 EventTrigger 组件中添加 PointerEnter 和 PointerExit 事件,用于设置光标的可见性。
3. 在 PointerEnter 事件中设置光标可见,并且使用 TMP_Text 的 GetCursorPosition 方法获取鼠标当前位置的字符索引。
4. 在 PointerExit 事件中设置光标不可见。
5. 使用 Input.compositionCursorPos 属性将光标位置设置为获取的字符索引。
以下是示例代码:
```csharp
using UnityEngine;
using UnityEngine.EventSystems;
using TMPro;
public class TMP_TextCursor : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
{
public TMP_Text text;
private bool isHovering = false;
public void OnPointerEnter(PointerEventData eventData)
{
isHovering = true;
Cursor.visible = false;
}
public void OnPointerExit(PointerEventData eventData)
{
isHovering = false;
Cursor.visible = true;
}
private void Update()
{
if (isHovering)
{
int characterIndex = text.GetCursorPosition(Input.mousePosition);
Input.compositionCursorPos = text.GetCharacterRect(characterIndex).position;
}
}
}
```
在该示例代码中,需要将 TMP_Text 组件分配给“text”字段。在 PointerEnter 事件中,将光标设置为不可见,在 PointerExit 事件中将光标设置为可见。在 Update 方法中,如果鼠标正在悬停在 TMP_Text 上,则获取当前鼠标位置的字符索引,并将光标位置设置为字符索引对应的位置。