Commit b1931ecf authored by Abdulrahman Mohammed's avatar Abdulrahman Mohammed

Done with all tags system & score Incorrect & etc...

parent 32ad6014
fileFormatVersion: 2
guid: 8bdd24772367c4eab9095baa28f7f53d
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
fileFormatVersion: 2
guid: 636b6cb26ff364cae97fed5c404063a5
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
using UnityEngine;
namespace ALArcade.ArabicTMP
{
/// <summary>
/// Static class providing character sets for Arabic font creation
/// </summary>
public static class ArabicCharsets
{
/// <summary>
/// Returns the complete Arabic character set for font asset creation
/// </summary>
public static string GetCompleteArabicCharset()
{
return
"0600-06FF\n" + // Arabic Basic
"0750-077F\n" + // Arabic Supplement
"08A0-08FF\n" + // Arabic Extended-A
"FB50-FDFF\n" + // Arabic Presentation Forms-A
"FE70-FEFF\n" + // Arabic Presentation Forms-B
"0020-007F\n"; // Basic Latin for mixed text
}
/// <summary>
/// Returns the basic Arabic character set for font asset creation (less comprehensive)
/// </summary>
public static string GetBasicArabicCharset()
{
return
"0600-06FF\n" + // Arabic Basic
"FE70-FEFF\n" + // Arabic Presentation Forms-B
"0020-007F\n"; // Basic Latin for mixed text
}
/// <summary>
/// Returns the essential Persian characters (چ پ ژ گ) to add to an Arabic font
/// </summary>
public static string GetPersianCharset()
{
return "067E, 0686, 0698, 06AF\n"; // Persian letters پ چ ژ گ
}
}
}
\ No newline at end of file
fileFormatVersion: 2
guid: 33cf026253e634291b2071b76a8e3e63
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
This diff is collapsed.
fileFormatVersion: 2
guid: c717d64c270b1469f9b32a6110e7eb26
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
using TMPro;
using UnityEngine;
using UnityEngine.EventSystems;
namespace ALArcade.ArabicTMP
{
[AddComponentMenu("UI/Arabic TextMeshPro - Input Field", 12)]
public class ArabicTMPInputField : TMP_InputField
{
[SerializeField] private bool m_ShowTashkeel = true;
[SerializeField] private bool m_PreserveNumbers = true;
[SerializeField] private bool m_FixTags = true;
[SerializeField] private bool m_ForceRTL = true; // FIXED: Default to true for better Arabic support
private string m_OriginalText = "";
private bool m_ProcessingInternalChange = false;
// Shadow the base .text property
public new string text
{
get => m_OriginalText;
set
{
if (m_OriginalText == value)
return;
m_OriginalText = value;
m_ProcessingInternalChange = true;
var processed = ArabicSupport.Fix(value, m_ShowTashkeel, m_PreserveNumbers, m_FixTags, m_ForceRTL);
base.SetTextWithoutNotify(processed);
m_ProcessingInternalChange = false;
}
}
protected override void Awake()
{
base.Awake();
if (textComponent != null)
{
// FIXED: Ensure text component is properly set up for RTL
textComponent.isRightToLeftText = true;
textComponent.alignment = TextAlignmentOptions.Right;
}
// Ensure text viewport has correct layout for RTL
if (textViewport != null)
{
// Adjust padding to make sure text appears correctly aligned
textComponent.margin = new Vector4(0, 0, 5, 0); // Add right margin for RTL text
}
}
protected override void Start()
{
base.Start();
onValueChanged.AddListener(OnValueChangedHandler);
if (!string.IsNullOrEmpty(m_OriginalText))
text = m_OriginalText;
}
private void OnValueChangedHandler(string value)
{
// Only update our stored original if this wasn't triggered by our own setText
if (!m_ProcessingInternalChange)
{
m_OriginalText = value;
}
}
public override void OnSelect(BaseEventData eventData)
{
base.OnSelect(eventData);
// When selected, ensure caretPosition is at the proper end for RTL
if (caretPosition == 0 && m_OriginalText.Length > 0)
{
caretPosition = 0; // For RTL, visual position 0 is at the right side
}
}
public override void OnDeselect(BaseEventData eventData)
{
base.OnDeselect(eventData);
// Ensure text is properly formatted on deselection
text = m_OriginalText;
}
// Override LateUpdate to re-process text before each frame render
protected override void LateUpdate()
{
base.LateUpdate();
// Apply Arabic shaping if the text changed and we're not in the middle of our own change
if (!m_ProcessingInternalChange)
{
var processed = ArabicSupport.Fix(m_OriginalText, m_ShowTashkeel, m_PreserveNumbers, m_FixTags, m_ForceRTL);
if (base.text != processed)
{
m_ProcessingInternalChange = true;
base.SetTextWithoutNotify(processed);
m_ProcessingInternalChange = false;
}
}
}
#if UNITY_EDITOR
protected override void OnValidate()
{
base.OnValidate();
if (!string.IsNullOrEmpty(m_OriginalText))
{
m_ProcessingInternalChange = true;
var processed = ArabicSupport.Fix(m_OriginalText, m_ShowTashkeel, m_PreserveNumbers, m_FixTags, m_ForceRTL);
base.SetTextWithoutNotify(processed);
m_ProcessingInternalChange = false;
}
if (textComponent != null)
{
textComponent.isRightToLeftText = true;
textComponent.alignment = TextAlignmentOptions.Right;
}
}
#endif
}
}
\ No newline at end of file
fileFormatVersion: 2
guid: 31f53d7c2368d4ca298130e8d6951abb
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
using TMPro;
using UnityEngine;
namespace ALArcade.ArabicTMP
{
/// <summary>
/// Arabic-enabled TextMeshPro component for 3D/World space
/// </summary>
[AddComponentMenu("Text/Arabic TextMeshPro - Text", 10)]
public class ArabicTextMeshPro : TextMeshPro
{
// Original (editable) Arabic text
[SerializeField] private string m_ArabicText;
// Plugin options
[Tooltip("Show Arabic diacritics (tashkeel)")]
[SerializeField] private bool m_ShowTashkeel = true;
[Tooltip("Keep Western digits (123) as-is instead of converting to Eastern Arabic")]
[SerializeField] private bool m_PreserveNumbers = true;
[Tooltip("Process rich text tags (color, bold, etc.)")]
[SerializeField] private bool m_FixTags = true;
[Tooltip("Force RTL even if text starts with Latin letters")]
[SerializeField] private bool m_ForceRTL = true; // FIXED: Default to true for better Arabic support
/// <summary>
/// The original Arabic text (not fixed for rendering)
/// </summary>
public string arabicText
{
get { return m_ArabicText; }
set
{
if (m_ArabicText == value)
return;
m_ArabicText = value;
// Apply Arabic text processing and update TMP text
text = ArabicSupport.Fix(m_ArabicText, m_ShowTashkeel, m_PreserveNumbers, m_FixTags, m_ForceRTL);
}
}
/// <summary>
/// Show or hide Arabic diacritics (tashkeel)
/// </summary>
public bool showTashkeel
{
get { return m_ShowTashkeel; }
set
{
if (m_ShowTashkeel == value)
return;
m_ShowTashkeel = value;
// Re-process text with new setting
if (!string.IsNullOrEmpty(m_ArabicText))
text = ArabicSupport.Fix(m_ArabicText, m_ShowTashkeel, m_PreserveNumbers, m_FixTags, m_ForceRTL);
}
}
/// <summary>
/// Preserve Western digits (123) as-is
/// </summary>
public bool preserveNumbers
{
get { return m_PreserveNumbers; }
set
{
if (m_PreserveNumbers == value)
return;
m_PreserveNumbers = value;
// Re-process text with new setting
if (!string.IsNullOrEmpty(m_ArabicText))
text = ArabicSupport.Fix(m_ArabicText, m_ShowTashkeel, m_PreserveNumbers, m_FixTags, m_ForceRTL);
}
}
/// <summary>
/// Process rich text tags (color, bold, etc.)
/// </summary>
public bool fixTags
{
get { return m_FixTags; }
set
{
if (m_FixTags == value)
return;
m_FixTags = value;
// Re-process text with new setting
if (!string.IsNullOrEmpty(m_ArabicText))
text = ArabicSupport.Fix(m_ArabicText, m_ShowTashkeel, m_PreserveNumbers, m_FixTags, m_ForceRTL);
}
}
/// <summary>
/// Force RTL even if text starts with Latin letters
/// </summary>
public bool forceRTL
{
get { return m_ForceRTL; }
set
{
if (m_ForceRTL == value)
return;
m_ForceRTL = value;
// Re-process text with new setting
if (!string.IsNullOrEmpty(m_ArabicText))
text = ArabicSupport.Fix(m_ArabicText, m_ShowTashkeel, m_PreserveNumbers, m_FixTags, m_ForceRTL);
}
}
#if UNITY_EDITOR
protected override void OnValidate()
{
base.OnValidate();
// Update displayed text whenever properties change in the editor
if (!string.IsNullOrEmpty(m_ArabicText))
{
text = ArabicSupport.Fix(m_ArabicText, m_ShowTashkeel, m_PreserveNumbers, m_FixTags, m_ForceRTL);
}
// Set alignment to right by default for Arabic text
if (alignment == TextAlignmentOptions.TopLeft ||
alignment == TextAlignmentOptions.Left ||
alignment == TextAlignmentOptions.BottomLeft)
{
alignment = TextAlignmentOptions.Right;
}
}
#endif
protected override void Awake()
{
base.Awake();
// Initialize with proper alignment for RTL text
if (alignment == TextAlignmentOptions.TopLeft)
alignment = TextAlignmentOptions.TopRight;
else if (alignment == TextAlignmentOptions.Left)
alignment = TextAlignmentOptions.Right;
else if (alignment == TextAlignmentOptions.BottomLeft)
alignment = TextAlignmentOptions.BottomRight;
// Set RTL flag (for TMP's own RTL awareness)
isRightToLeftText = true;
// Initial text processing
if (!string.IsNullOrEmpty(m_ArabicText))
{
text = ArabicSupport.Fix(m_ArabicText, m_ShowTashkeel, m_PreserveNumbers, m_FixTags, m_ForceRTL);
}
}
}
}
\ No newline at end of file
fileFormatVersion: 2
guid: 6288886329a3741578473981df735c34
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
using TMPro;
using UnityEngine;
namespace ALArcade.ArabicTMP
{
[AddComponentMenu("UI/Arabic TextMeshPro - Text (UI)", 11)]
public class ArabicTextMeshProUGUI : TextMeshProUGUI
{
[Header("Arabic Settings")]
[SerializeField] private string m_ArabicText = "";
[SerializeField] private bool m_ShowTashkeel = true;
[SerializeField] private bool m_PreserveNumbers = true;
[SerializeField] private bool m_FixTags = true;
[SerializeField] private bool m_ForceRTL = true;
public string arabicText
{
get => m_ArabicText;
set
{
if (m_ArabicText == value) return;
m_ArabicText = value;
UpdateDisplayText();
}
}
public bool showTashkeel
{
get => m_ShowTashkeel;
set
{
if (m_ShowTashkeel == value) return;
m_ShowTashkeel = value;
UpdateDisplayText();
}
}
public bool preserveNumbers
{
get => m_PreserveNumbers;
set
{
if (m_PreserveNumbers == value) return;
m_PreserveNumbers = value;
UpdateDisplayText();
}
}
public bool fixTags
{
get => m_FixTags;
set
{
if (m_FixTags == value) return;
m_FixTags = value;
UpdateDisplayText();
}
}
public bool forceRTL
{
get => m_ForceRTL;
set
{
if (m_ForceRTL == value) return;
m_ForceRTL = value;
UpdateDisplayText();
}
}
private void UpdateDisplayText()
{
if (!string.IsNullOrEmpty(m_ArabicText))
{
text = ArabicSupport.Fix(m_ArabicText, m_ShowTashkeel, m_PreserveNumbers, m_FixTags, m_ForceRTL);
}
}
protected override void Awake()
{
base.Awake();
// Set RTL properties
isRightToLeftText = true;
// Set default alignment for Arabic
if (alignment == TextAlignmentOptions.TopLeft)
alignment = TextAlignmentOptions.TopRight;
else if (alignment == TextAlignmentOptions.Left)
alignment = TextAlignmentOptions.Right;
else if (alignment == TextAlignmentOptions.BottomLeft)
alignment = TextAlignmentOptions.BottomRight;
UpdateDisplayText();
}
#if UNITY_EDITOR
protected override void OnValidate()
{
base.OnValidate();
UpdateDisplayText();
}
#endif
}
}
\ No newline at end of file
fileFormatVersion: 2
guid: 0e20cc1eab1d04e7c9515c000ca5ba22
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
fileFormatVersion: 2
guid: d384d57467e8841c89e614799f272161
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
#if UNITY_EDITOR
using UnityEditor;
using UnityEngine;
using TMPro;
using TMPro.EditorUtilities;
using System.IO;
using System.Text;
namespace ALArcade.ArabicTMP.Editor
{
public class ArabicFontAssetCreator : EditorWindow
{
private Font sourceFont;
private string savePath = "Assets/";
private string saveFileName = "New Arabic Font Asset";
private int samplingPointSize = 90;
private int atlasPadding = 9;
private int atlasWidth = 1024;
private int atlasHeight = 1024;
private bool includeArabicBasic = true;
private bool includeArabicSupplement = true;
private bool includeArabicExtendedA = true;
private bool includeArabicPresentationA = true;
private bool includeArabicPresentationB = true;
private bool includePersian = true;
private TMP_FontAsset createdFontAsset;
private readonly string[] arabicRanges = new string[] {
// Basic Arabic
"0600-06FF",
// Arabic Supplement
"0750-077F",
// Arabic Extended-A
"08A0-08FF",
// Arabic Presentation Forms-A
"FB50-FDFF",
// Arabic Presentation Forms-B
"FE70-FEFF",
// Persian Characters
"067E, 0686, 0698, 06AF"
};
[MenuItem("Window/AL-Arcade/Arabic TMP/Font Asset Creator")]
public static void ShowWindow()
{
EditorWindow.GetWindow<ArabicFontAssetCreator>("Arabic Font Asset Creator");
}
private void OnGUI()
{
GUILayout.Label("Create Arabic TextMeshPro Font Asset", EditorStyles.boldLabel);
EditorGUILayout.Space();
// Source font selection
sourceFont = (Font)EditorGUILayout.ObjectField("Source Font File", sourceFont, typeof(Font), false);
// Atlas settings
EditorGUILayout.Space();
EditorGUILayout.LabelField("Atlas Settings", EditorStyles.boldLabel);
samplingPointSize = EditorGUILayout.IntField("Sampling Point Size", samplingPointSize);
atlasPadding = EditorGUILayout.IntField("Atlas Padding", atlasPadding);
atlasWidth = EditorGUILayout.IntField("Atlas Width", atlasWidth);
atlasHeight = EditorGUILayout.IntField("Atlas Height", atlasHeight);
// Character sets
EditorGUILayout.Space();
EditorGUILayout.LabelField("Character Sets to Include", EditorStyles.boldLabel);
includeArabicBasic = EditorGUILayout.Toggle("Arabic Basic (0600-06FF)", includeArabicBasic);
includeArabicSupplement = EditorGUILayout.Toggle("Arabic Supplement (0750-077F)", includeArabicSupplement);
includeArabicExtendedA = EditorGUILayout.Toggle("Arabic Extended-A (08A0-08FF)", includeArabicExtendedA);
includeArabicPresentationA = EditorGUILayout.Toggle("Arabic Presentation Forms-A (FB50-FDFF)", includeArabicPresentationA);
includeArabicPresentationB = EditorGUILayout.Toggle("Arabic Presentation Forms-B (FE70-FEFF)", includeArabicPresentationB);
includePersian = EditorGUILayout.Toggle("Persian Letters (پ چ ژ گ)", includePersian);
// Save settings
EditorGUILayout.Space();
EditorGUILayout.LabelField("Save Settings", EditorStyles.boldLabel);
savePath = EditorGUILayout.TextField("Save Path", savePath);
saveFileName = EditorGUILayout.TextField("Asset Name", saveFileName);
// Create button
EditorGUILayout.Space();
if (sourceFont == null)
{
EditorGUILayout.HelpBox("A Source Font File is required to create a font asset.", MessageType.Error);
}
EditorGUI.BeginDisabledGroup(sourceFont == null);
if (GUILayout.Button("Create Font Asset"))
{
GenerateFontAsset();
}
EditorGUI.EndDisabledGroup();
// Show the created font asset
EditorGUILayout.Space();
if (createdFontAsset != null)
{
EditorGUILayout.ObjectField("Created Font Asset", createdFontAsset, typeof(TMP_FontAsset), false);
}
// Help box
EditorGUILayout.Space();
EditorGUILayout.HelpBox(
"This utility creates a TextMeshPro Font Asset with all necessary Arabic Unicode ranges.\n\n" +
"1. Select a source font that contains Arabic glyphs.\n" +
"2. Choose which character sets to include.\n" +
"3. Set the save location and asset name.\n" +
"4. Click 'Create Font Asset'.\n\n" +
"The created asset will be ready for use with the Arabic TMP components.",
MessageType.Info);
}
private void GenerateFontAsset()
{
if (sourceFont == null)
{
EditorUtility.DisplayDialog("Error", "A Source Font File is required to create a font asset.", "OK");
return;
}
// Generate the character set string for TMP Font Asset Creator
StringBuilder charSetBuilder = new StringBuilder();
// Add selected character ranges
if (includeArabicBasic) charSetBuilder.Append(arabicRanges[0] + "\n");
if (includeArabicSupplement) charSetBuilder.Append(arabicRanges[1] + "\n");
if (includeArabicExtendedA) charSetBuilder.Append(arabicRanges[2] + "\n");
if (includeArabicPresentationA) charSetBuilder.Append(arabicRanges[3] + "\n");
if (includeArabicPresentationB) charSetBuilder.Append(arabicRanges[4] + "\n");
if (includePersian) charSetBuilder.Append(arabicRanges[5] + "\n");
// Add basic Latin range for mixed text
charSetBuilder.Append("0020-007F\n"); // Basic Latin
string characterSet = charSetBuilder.ToString();
// Create temp file with character set
string tempFilePath = Path.Combine(Path.GetTempPath(), "ArabicCharSet.txt");
File.WriteAllText(tempFilePath, characterSet);
// Ensure the save path exists
if (!Directory.Exists(savePath))
{
Directory.CreateDirectory(savePath);
}
// Generate the font asset using TMP_FontAsset.CreateFontAsset
string fullPath = Path.Combine(savePath, saveFileName + ".asset");
// Create the font asset
TMP_FontAsset fontAsset = TMP_FontAsset.CreateFontAsset(
sourceFont,
samplingPointSize,
atlasPadding,
UnityEngine.TextCore.LowLevel.GlyphRenderMode.SDFAA,
atlasWidth,
atlasHeight,
TMPro.AtlasPopulationMode.Dynamic,
true);
// Initialize character table with our character set
fontAsset.ReadFontAssetDefinition();
// Save the created font asset
AssetDatabase.CreateAsset(fontAsset, fullPath);
// Save the material as a sub-asset
fontAsset.material.name = saveFileName + " Material";
AssetDatabase.AddObjectToAsset(fontAsset.material, fontAsset);
// Update atlas texture and add it as sub-asset
if (fontAsset.atlasTexture != null)
{
fontAsset.atlasTexture.name = saveFileName + " Atlas";
AssetDatabase.AddObjectToAsset(fontAsset.atlasTexture, fontAsset);
}
// The following is a workaround to "load" character set into the font
// In practice, this will set these characters to be loaded when needed
string sampleText = "السلام عليكم مرحبا بكم في يونيتي";
fontAsset.TryAddCharacters(sampleText);
// Save all assets
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
// Store the created font asset reference
createdFontAsset = fontAsset;
EditorUtility.DisplayDialog("Success", "Arabic font asset created successfully at:\n" + fullPath, "OK");
// Clean up temp file
try
{
File.Delete(tempFilePath);
}
catch
{
// Ignore cleanup errors
}
// Select the created asset
EditorGUIUtility.PingObject(fontAsset);
}
}
}
#endif
\ No newline at end of file
fileFormatVersion: 2
guid: c0cd9abaf612f42b39a5bdafbba6d610
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
#if UNITY_EDITOR
using UnityEditor;
using UnityEngine;
using TMPro;
using ALArcade.ArabicTMP;
namespace ALArcade.ArabicTMP.Editor {
[CustomEditor(typeof(ArabicTMPInputField)), CanEditMultipleObjects]
public class ArabicTMPInputFieldEditor : TMPro.EditorUtilities.TMP_InputFieldEditor {
// SerializedProperties for Arabic input field options
SerializedProperty m_ShowTashkeelProp;
SerializedProperty m_PreserveNumbersProp;
SerializedProperty m_FixTagsProp;
SerializedProperty m_ForceRTLProp;
protected override void OnEnable() {
base.OnEnable();
// Get references to serialized properties
m_ShowTashkeelProp = serializedObject.FindProperty("m_ShowTashkeel");
m_PreserveNumbersProp = serializedObject.FindProperty("m_PreserveNumbers");
m_FixTagsProp = serializedObject.FindProperty("m_FixTags");
m_ForceRTLProp = serializedObject.FindProperty("m_ForceRTL");
}
public override void OnInspectorGUI() {
serializedObject.Update();
// Draw the Arabic options before the base inspector
EditorGUILayout.LabelField("Arabic Input Options", EditorStyles.boldLabel);
EditorGUILayout.PropertyField(m_ShowTashkeelProp, new GUIContent("Show Diacritics (Tashkeel)", "Display Arabic diacritic marks"));
EditorGUILayout.PropertyField(m_PreserveNumbersProp, new GUIContent("Preserve Numbers", "Keep Western numerals (123) as-is"));
EditorGUILayout.PropertyField(m_FixTagsProp, new GUIContent("Fix Rich Text Tags", "Process rich text tags like <color> properly"));
EditorGUILayout.PropertyField(m_ForceRTLProp, new GUIContent("Force RTL", "Force right-to-left rendering even if text starts with Latin characters"));
EditorGUILayout.Space();
// Call the base class's OnInspectorGUI
base.OnInspectorGUI();
serializedObject.ApplyModifiedProperties();
// Show helpful notes for first-time users
EditorGUILayout.Space();
EditorGUILayout.HelpBox("This component works best with an ArabicTextMeshProUGUI as the text component.", MessageType.Info);
}
}
}
#endif
\ No newline at end of file
fileFormatVersion: 2
guid: 3f229dce16e154883bb9eca9f8c5ef0c
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
This diff is collapsed.
fileFormatVersion: 2
guid: 4d5aca6a679854ad287e5f80e22df0e3
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
#if UNITY_EDITOR
using UnityEditor;
using UnityEngine;
using TMPro;
using ALArcade.ArabicTMP;
namespace ALArcade.ArabicTMP.Editor {
[CustomEditor(typeof(ArabicTextMeshPro)), CanEditMultipleObjects]
public class ArabicTextMeshProEditor : TMPro.EditorUtilities.TMP_EditorPanelUI {
// SerializedProperties for Arabic text component
SerializedProperty m_ArabicTextProp;
SerializedProperty m_ShowTashkeelProp;
SerializedProperty m_PreserveNumbersProp;
SerializedProperty m_FixTagsProp;
SerializedProperty m_ForceRTLProp;
protected override void OnEnable() {
base.OnEnable();
// Get references to serialized properties
m_ArabicTextProp = serializedObject.FindProperty("m_ArabicText");
m_ShowTashkeelProp = serializedObject.FindProperty("m_ShowTashkeel");
m_PreserveNumbersProp = serializedObject.FindProperty("m_PreserveNumbers");
m_FixTagsProp = serializedObject.FindProperty("m_FixTags");
m_ForceRTLProp = serializedObject.FindProperty("m_ForceRTL");
}
public override void OnInspectorGUI() {
if (target == null)
return;
serializedObject.Update();
// Draw Arabic text input field
EditorGUILayout.LabelField("Arabic Text", EditorStyles.boldLabel);
EditorGUI.BeginChangeCheck();
string newText = EditorGUILayout.TextArea(m_ArabicTextProp.stringValue, GUILayout.MinHeight(80));
if (EditorGUI.EndChangeCheck()) {
m_ArabicTextProp.stringValue = newText;
// Ensure immediate update in editor
foreach (var obj in targets) {
if (obj is ArabicTextMeshPro arabicText) {
arabicText.arabicText = newText;
}
}
}
// Draw options section
EditorGUILayout.Space();
EditorGUILayout.LabelField("Arabic Options", EditorStyles.boldLabel);
EditorGUILayout.PropertyField(m_ShowTashkeelProp, new GUIContent("Show Diacritics (Tashkeel)", "Display Arabic diacritic marks"));
EditorGUILayout.PropertyField(m_PreserveNumbersProp, new GUIContent("Preserve Numbers", "Keep Western numerals (123) as-is"));
EditorGUILayout.PropertyField(m_FixTagsProp, new GUIContent("Fix Rich Text Tags", "Process rich text tags like <color> properly"));
EditorGUILayout.PropertyField(m_ForceRTLProp, new GUIContent("Force RTL", "Force right-to-left rendering even if text starts with Latin characters"));
EditorGUILayout.Space();
// Draw default TMP properties
EditorGUILayout.LabelField("TextMeshPro Settings", EditorStyles.boldLabel);
// Hide the original text property since we're using our custom one
SerializedProperty prop = serializedObject.FindProperty("m_text");
if (prop != null) {
// Make the TMP text field read-only to prevent editing it directly
GUI.enabled = false;
EditorGUILayout.PropertyField(prop, new GUIContent("Processed Text (Read Only)"));
GUI.enabled = true;
}
DrawMainSettings();
DrawExtraSettings();
serializedObject.ApplyModifiedProperties();
// Show helpful notes for first-time users
EditorGUILayout.Space();
EditorGUILayout.HelpBox("Enter Arabic text in the 'Arabic Text' field above. It will be automatically shaped and displayed correctly.", MessageType.Info);
}
}
}
#endif
\ No newline at end of file
fileFormatVersion: 2
guid: 870f69856c80f48a59fe7ebc1f74dde8
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
#if UNITY_EDITOR
using UnityEditor;
using UnityEngine;
using TMPro;
using ALArcade.ArabicTMP;
namespace ALArcade.ArabicTMP.Editor {
[CustomEditor(typeof(ArabicTextMeshProUGUI)), CanEditMultipleObjects]
public class ArabicTextMeshProUGUIEditor : TMPro.EditorUtilities.TMP_EditorPanelUI {
// SerializedProperties for Arabic text component
SerializedProperty m_ArabicTextProp;
SerializedProperty m_ShowTashkeelProp;
SerializedProperty m_PreserveNumbersProp;
SerializedProperty m_FixTagsProp;
SerializedProperty m_ForceRTLProp;
protected override void OnEnable() {
base.OnEnable();
// Get references to serialized properties
m_ArabicTextProp = serializedObject.FindProperty("m_ArabicText");
m_ShowTashkeelProp = serializedObject.FindProperty("m_ShowTashkeel");
m_PreserveNumbersProp = serializedObject.FindProperty("m_PreserveNumbers");
m_FixTagsProp = serializedObject.FindProperty("m_FixTags");
m_ForceRTLProp = serializedObject.FindProperty("m_ForceRTL");
}
public override void OnInspectorGUI() {
if (target == null)
return;
serializedObject.Update();
// Draw Arabic text input field
EditorGUILayout.LabelField("Arabic Text", EditorStyles.boldLabel);
EditorGUI.BeginChangeCheck();
string newText = EditorGUILayout.TextArea(m_ArabicTextProp.stringValue, GUILayout.MinHeight(80));
if (EditorGUI.EndChangeCheck()) {
m_ArabicTextProp.stringValue = newText;
// Ensure immediate update in editor
foreach (var obj in targets) {
if (obj is ArabicTextMeshProUGUI arabicText) {
arabicText.arabicText = newText;
}
}
}
// Draw options section
EditorGUILayout.Space();
EditorGUILayout.LabelField("Arabic Options", EditorStyles.boldLabel);
EditorGUILayout.PropertyField(m_ShowTashkeelProp, new GUIContent("Show Diacritics (Tashkeel)", "Display Arabic diacritic marks"));
EditorGUILayout.PropertyField(m_PreserveNumbersProp, new GUIContent("Preserve Numbers", "Keep Western numerals (123) as-is"));
EditorGUILayout.PropertyField(m_FixTagsProp, new GUIContent("Fix Rich Text Tags", "Process rich text tags like <color> properly"));
EditorGUILayout.PropertyField(m_ForceRTLProp, new GUIContent("Force RTL", "Force right-to-left rendering even if text starts with Latin characters"));
EditorGUILayout.Space();
// Draw default TMP properties
EditorGUILayout.LabelField("TextMeshPro Settings", EditorStyles.boldLabel);
// Hide the original text property since we're using our custom one
SerializedProperty prop = serializedObject.FindProperty("m_text");
if (prop != null) {
// Make the TMP text field read-only to prevent editing it directly
GUI.enabled = false;
EditorGUILayout.PropertyField(prop, new GUIContent("Processed Text (Read Only)"));
GUI.enabled = true;
}
DrawMainSettings();
DrawExtraSettings();
serializedObject.ApplyModifiedProperties();
// Show helpful notes for first-time users
EditorGUILayout.Space();
EditorGUILayout.HelpBox("Enter Arabic text in the 'Arabic Text' field above. It will be automatically shaped and displayed correctly.", MessageType.Info);
}
}
}
#endif
\ No newline at end of file
fileFormatVersion: 2
guid: a0c1457171b094e90af03f669b460a4d
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
This diff is collapsed.
fileFormatVersion: 2
guid: 978f208d0ffc7d24b925e17faf828775
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
This diff is collapsed.
fileFormatVersion: 2
guid: 4b1038618804cf140a96475a05e3c66c
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
...@@ -550,6 +550,7 @@ MonoBehaviour: ...@@ -550,6 +550,7 @@ MonoBehaviour:
m_Name: m_Name:
m_EditorClassIdentifier: Assembly-CSharp::AnimalDetails m_EditorClassIdentifier: Assembly-CSharp::AnimalDetails
<animalProperties>k__BackingField: {fileID: 11400000, guid: 9c4c9c8f3b059674d8ea903f0baa73f1, type: 2} <animalProperties>k__BackingField: {fileID: 11400000, guid: 9c4c9c8f3b059674d8ea903f0baa73f1, type: 2}
<isCorrect>k__BackingField: 0
--- !u!65 &3134386485418195282 --- !u!65 &3134386485418195282
BoxCollider: BoxCollider:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
...@@ -569,8 +570,8 @@ BoxCollider: ...@@ -569,8 +570,8 @@ BoxCollider:
m_ProvidesContacts: 0 m_ProvidesContacts: 0
m_Enabled: 1 m_Enabled: 1
serializedVersion: 3 serializedVersion: 3
m_Size: {x: 3.7020752, y: 7.6251206, z: 9.196465} m_Size: {x: 52429.523, y: 7.6251206, z: 9.196465}
m_Center: {x: 0, y: 3.9071233, z: 1.1254215} m_Center: {x: -26212.887, y: 3.9071233, z: 1.1254215}
--- !u!1 &821623542764607179 --- !u!1 &821623542764607179
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
...@@ -1614,6 +1615,7 @@ MonoBehaviour: ...@@ -1614,6 +1615,7 @@ MonoBehaviour:
m_EditorClassIdentifier: Assembly-CSharp::BodyPart m_EditorClassIdentifier: Assembly-CSharp::BodyPart
<AnimalPart>k__BackingField: 1 <AnimalPart>k__BackingField: 1
healthScript: {fileID: 4577948788861265325} healthScript: {fileID: 4577948788861265325}
animalDetails: {fileID: 7439170055329331585}
--- !u!1 &4814410725735562131 --- !u!1 &4814410725735562131
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
...@@ -1984,8 +1986,8 @@ CapsuleCollider: ...@@ -1984,8 +1986,8 @@ CapsuleCollider:
m_ProvidesContacts: 0 m_ProvidesContacts: 0
m_Enabled: 1 m_Enabled: 1
serializedVersion: 2 serializedVersion: 2
m_Radius: 1.96 m_Radius: 2.41
m_Height: 7.300329 m_Height: 7.79
m_Direction: 2 m_Direction: 2
m_Center: {x: 0, y: 0, z: -0.48516464} m_Center: {x: 0, y: 0, z: -0.48516464}
--- !u!114 &3160737932670797696 --- !u!114 &3160737932670797696
...@@ -2002,6 +2004,7 @@ MonoBehaviour: ...@@ -2002,6 +2004,7 @@ MonoBehaviour:
m_EditorClassIdentifier: Assembly-CSharp::BodyPart m_EditorClassIdentifier: Assembly-CSharp::BodyPart
<AnimalPart>k__BackingField: 0 <AnimalPart>k__BackingField: 0
healthScript: {fileID: 4577948788861265325} healthScript: {fileID: 4577948788861265325}
animalDetails: {fileID: 7439170055329331585}
--- !u!1 &5648405520980593439 --- !u!1 &5648405520980593439
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
......
This diff is collapsed.
public enum AnimalName public enum AnimalName
{ {
// Ice // Ice
Penguin, بطريق,
PolarBear, دب_قطبي,
Seal, كلب_البحر,
Walrus, أسد_البحر,
// Forest // Forest
Deer, غزال,
Monkey, قرد,
Bear, دب,
Elephant, فيل,
GorillaBlack, غوريلا,
// Desert // Desert
SnakeRed, ثعبان,
Ostrich, نعامة,
ثعلب ثعلب
} }
public enum AnimalType public enum AnimalType
{ {
Bird, طائر,
Mammal, ثديي,
Reptile زاحف
} }
public enum FoodType public enum FoodType
{ {
Carnivore, يأكل_اللحم,
Herbivore, يأكل_العشب,
Omnivore يأكل_كل_شيء
} }
public enum Environment public enum Environment
{ {
Ice, يعيش_في_الجليد,
Desert, يعيش_في_الصحراء,
Forest يعيش_في_الغابة
} }
public enum SpecialAbilities public enum SpecialAbilities
{ {
CanSwim, يستطيع_السباحة,
CanRun, يستطيع_الجري,
CanClimb, يستطيع_التسلق,
NightVision, رؤية_ليل,
Venomous سام
} }
public enum Reproduction public enum Reproduction
{ {
LaysEggs, يضع_البيض,
LiveBirth, يولد,
} }
public enum AnimalPart public enum AnimalPart
......
...@@ -13,8 +13,9 @@ public class MatchManager : MonoBehaviour ...@@ -13,8 +13,9 @@ public class MatchManager : MonoBehaviour
[SerializeField] TextMeshProUGUI matchRoundText; [SerializeField] TextMeshProUGUI matchRoundText;
[SerializeField] int maxMatchRound; [SerializeField] int maxMatchRound;
[SerializeField] int maxRoundTimer; [SerializeField] int maxRoundTimer;
[SerializeField] AnimalsQuestionGenerator animalsQuestionGenerator;
[SerializeField] AnimalsSpawner animalsSpawner; [SerializeField] AnimalsSpawner animalsSpawner;
TransitionManager _transitionManager; TransitionManager _transitionManager;
int currentMatch; int currentMatch;
...@@ -53,6 +54,7 @@ public class MatchManager : MonoBehaviour ...@@ -53,6 +54,7 @@ public class MatchManager : MonoBehaviour
} }
void ChangeRound() void ChangeRound()
{ {
animalsQuestionGenerator.GengenerateNewQuestions(currentMatch);
animalsSpawner.SpawnAnimals(); animalsSpawner.SpawnAnimals();
StopNPC(false); StopNPC(false);
matchRoundText.text = $"Round: {currentMatch}/{maxMatchRound}"; matchRoundText.text = $"Round: {currentMatch}/{maxMatchRound}";
......
...@@ -6,15 +6,16 @@ public class AnimalDetails : MonoBehaviour ...@@ -6,15 +6,16 @@ public class AnimalDetails : MonoBehaviour
{ {
[field: SerializeField] public AnimalProperties animalProperties { get; private set; } [field: SerializeField] public AnimalProperties animalProperties { get; private set; }
[SerializeField] List<Enum> animalTag = new List<Enum>(); [SerializeField] List<Enum> animalTag = new List<Enum>();
[SerializeField] bool isCorrect; [field: SerializeField] public bool isCorrect { get; private set; }
private void Start() private void Start()
{ {
AddAnimalTagsToList(); AddAnimalTagsToList();
Invoke("CheckIfAnimalIsCorrect", .1f); Invoke("CheckIfAnimalIsCorrect", .05f);
} }
void AddAnimalTagsToList() void AddAnimalTagsToList()
{ {
animalTag.Add(animalProperties.AnimalType); animalTag.Add(animalProperties.AnimalType);
......
...@@ -5,7 +5,16 @@ public class BodyPart : MonoBehaviour,IDamageable ...@@ -5,7 +5,16 @@ public class BodyPart : MonoBehaviour,IDamageable
[field: SerializeField] public AnimalPart AnimalPart { get; private set; } [field: SerializeField] public AnimalPart AnimalPart { get; private set; }
[SerializeField] Health healthScript; [SerializeField] Health healthScript;
[SerializeField] AnimalDetails animalDetails;
private void Start()
{
Invoke("CheckIfCorrectAnimal", .1f);
}
void CheckIfCorrectAnimal()
{
if (!animalDetails.isCorrect) gameObject.layer = LayerMask.NameToLayer("IncorrectAnimal");
}
public void TakeDamage(int amount, RaycastWeapon player) public void TakeDamage(int amount, RaycastWeapon player)
{ {
healthScript.TakeDamage(amount, player); healthScript.TakeDamage(amount, player);
......
...@@ -36,10 +36,14 @@ public class Health : MonoBehaviour ...@@ -36,10 +36,14 @@ public class Health : MonoBehaviour
if (isDie) return; if (isDie) return;
isDie = true; isDie = true;
int score = (int)healthSlider.maxValue;
score = animalDetails.isCorrect ? score : -score / 2;
if (firstPlayer == lastPlayer) if (firstPlayer == lastPlayer)
firstPlayer.AddScore((int)healthSlider.maxValue); firstPlayer.AddScore(score);
else else
lastPlayer.AddScore((int)healthSlider.maxValue / 2); lastPlayer.AddScore(score / 2);
// onDie?.Invoke(); // onDie?.Invoke();
......
...@@ -12,8 +12,8 @@ public class NPCsMovement : MonoBehaviour ...@@ -12,8 +12,8 @@ public class NPCsMovement : MonoBehaviour
NavMeshAgent _agent; NavMeshAgent _agent;
Vector3 _direction; Vector3 _direction;
[SerializeField] Collider[] animalsCollider = new Collider[3]; Collider[] animalsCollider = new Collider[2];
[SerializeField] Collider _currentTarget; Collider _currentTarget;
void Start() void Start()
{ {
_agent = GetComponent<NavMeshAgent>(); _agent = GetComponent<NavMeshAgent>();
......
...@@ -16,6 +16,8 @@ public class Score : MonoBehaviour ...@@ -16,6 +16,8 @@ public class Score : MonoBehaviour
private void AnimalDie(int score) private void AnimalDie(int score)
{ {
this.score += score; this.score += score;
this.score = Mathf.Max(0, this.score);
if (scoreText != null) if (scoreText != null)
scoreText.text = "Score: " + this.score.ToString(); scoreText.text = "Score: " + this.score.ToString();
} }
......
using System; using ALArcade.ArabicTMP;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
...@@ -10,77 +11,98 @@ public class AnimalsQuestionGenerator : MonoBehaviour ...@@ -10,77 +11,98 @@ public class AnimalsQuestionGenerator : MonoBehaviour
public static AnimalsQuestionGenerator Instance { get; private set; } public static AnimalsQuestionGenerator Instance { get; private set; }
public List<Enum> randomTags { get; private set; } = new List<Enum>(); public List<Enum> randomTags { get; private set; } = new List<Enum>();
[SerializeField] TextMeshProUGUI QuestionText; [SerializeField] ArabicTextMeshProUGUI QuestionText;
[SerializeField] StringBuilder text = new StringBuilder(); [SerializeField] StringBuilder textBuilder = new StringBuilder();
private void Awake() private void Awake()
{ {
if (Instance == null) if (Instance == null)
Instance = this; Instance = this;
else else
Destroy(this); Destroy(this);
}
private void Start()
{
GengenerateNewQuestions();
}
public void GengenerateNewQuestions() GengenerateNewQuestions(1);
}
string prevQuestion;
public void GengenerateNewQuestions(int numberOfTags)
{ {
string currentQuestionText = "";
do do
{ {
AddRandomTagToList(); AddRandomTagToList(numberOfTags);
currentQuestionText = BuildQuestionString();
} }
while (CheckIfTagsIsCorrect() == false); while (!CheckIfTagsIsCorrect() || currentQuestionText == prevQuestion);
text.Clear(); prevQuestion = currentQuestionText;
QuestionText.arabicText = currentQuestionText;
}
private string BuildQuestionString()
{
textBuilder.Clear();
for (int i = 0; i < randomTags.Count; i++) for (int i = 0; i < randomTags.Count; i++)
{ {
text.Append(randomTags[i].ToString()); textBuilder.Append(randomTags[i].ToString());
if (i != randomTags.Count - 1) if (i != randomTags.Count - 1)
text.Append(" And "); textBuilder.Append(" و ");
} }
Debug.Log(text); return textBuilder.ToString();
} }
private void AddRandomTagToList() private void AddRandomTagToList(int numberOfTag)
{ {
randomTags.Clear(); randomTags.Clear();
var AnimalType = (AnimalType[])Enum.GetValues(typeof(AnimalType)); if (numberOfTag >= 1)
randomTags.Add(AnimalType[UnityEngine.Random.Range(0, AnimalType.Length)]); {
var animalTypes = (AnimalType[])Enum.GetValues(typeof(AnimalType));
randomTags.Add(animalTypes[UnityEngine.Random.Range(0, animalTypes.Length)]);
}
var FoodType = (FoodType[])Enum.GetValues(typeof(FoodType)); if (numberOfTag >= 2)
randomTags.Add(FoodType[UnityEngine.Random.Range(0, FoodType.Length)]); {
var foodTypes = (FoodType[])Enum.GetValues(typeof(FoodType));
randomTags.Add(foodTypes[UnityEngine.Random.Range(0, foodTypes.Length)]);
}
//var Environment = (Environment[])Enum.GetValues(typeof(Environment)); if (numberOfTag >= 3)
//randomTags.Add(Environment[UnityEngine.Random.Range(0, Environment.Length)]); {
var environments = (Environment[])Enum.GetValues(typeof(Environment));
randomTags.Add(environments[UnityEngine.Random.Range(0, environments.Length)]);
}
//var SpecialAbilities = (SpecialAbilities[])Enum.GetValues(typeof(SpecialAbilities)); if (numberOfTag >= 4)
//randomTags.Add(SpecialAbilities[UnityEngine.Random.Range(0, SpecialAbilities.Length)]); {
var abilities = (SpecialAbilities[])Enum.GetValues(typeof(SpecialAbilities));
randomTags.Add(abilities[UnityEngine.Random.Range(0, abilities.Length)]);
}
//var Reproduction = (Reproduction[])Enum.GetValues(typeof(Reproduction)); if (numberOfTag >= 5)
//randomTags.Add(Reproduction[UnityEngine.Random.Range(0, Reproduction.Length)]); {
var reproductions = (Reproduction[])Enum.GetValues(typeof(Reproduction));
randomTags.Add(reproductions[UnityEngine.Random.Range(0, reproductions.Length)]);
}
} }
bool CheckIfTagsIsCorrect() bool CheckIfTagsIsCorrect()
{ {
if (randomTags.Contains(AnimalType.Bird) && randomTags.Contains(Reproduction.LiveBirth)) if (randomTags.Contains(AnimalType.طائر) && randomTags.Contains(Reproduction.يولد))
return false; return false;
if (randomTags.Contains(AnimalType.Mammal) && randomTags.Contains(Reproduction.LaysEggs)) if (randomTags.Contains(AnimalType.زاحف) && randomTags.Contains(Reproduction.يضع_البيض))
return false; return false;
if (randomTags.Contains(AnimalType.Mammal) && randomTags.Contains(SpecialAbilities.Venomous)) if (randomTags.Contains(AnimalType.زاحف) && randomTags.Contains(SpecialAbilities.سام))
return false; return false;
if (randomTags.Contains(Environment.Desert) && randomTags.Contains(SpecialAbilities.CanSwim)) if (randomTags.Contains(Environment.يعيش_في_الصحراء) && randomTags.Contains(SpecialAbilities.يستطيع_السباحة))
return false; return false;
if (randomTags.Contains(Environment.Ice) && !randomTags.Contains(SpecialAbilities.CanSwim)) if (randomTags.Contains(Environment.يعيش_في_الجليد) && !randomTags.Contains(SpecialAbilities.يستطيع_السباحة))
return false; return false;
if (randomTags.Contains(Environment.Ice) && !randomTags.Contains(SpecialAbilities.CanRun)) if (randomTags.Contains(Environment.يعيش_في_الجليد) && !randomTags.Contains(SpecialAbilities.يستطيع_الجري))
return false; return false;
if (randomTags.Contains(Environment.Ice) && randomTags.Contains(SpecialAbilities.Venomous)) if (randomTags.Contains(Environment.يعيش_في_الجليد) && randomTags.Contains(SpecialAbilities.سام))
return false; return false;
return true; return true;
......
...@@ -58,7 +58,7 @@ public class RaycastWeapon : MonoBehaviour ...@@ -58,7 +58,7 @@ public class RaycastWeapon : MonoBehaviour
if (Physics.Raycast(origin, direction, out RaycastHit hit, range, bodyPartLayer)) if (Physics.Raycast(origin, direction, out RaycastHit hit, range, bodyPartLayer))
{ {
if (hit.collider.TryGetComponent<IDamageable>(out IDamageable damageable)) if (hit.collider.TryGetComponent<IDamageable>(out IDamageable damageable))
{ {
if (damageable.AnimalPart == AnimalPart.Body) if (damageable.AnimalPart == AnimalPart.Body)
damageable.TakeDamage(BodyDamage,this); damageable.TakeDamage(BodyDamage,this);
else if (damageable.AnimalPart == AnimalPart.Head) else if (damageable.AnimalPart == AnimalPart.Head)
......
...@@ -63,7 +63,7 @@ Material: ...@@ -63,7 +63,7 @@ Material:
m_Scale: {x: 1, y: 1} m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0} m_Offset: {x: 0, y: 0}
- _MainTex: - _MainTex:
m_Texture: {fileID: 0} m_Texture: {fileID: 2800000, guid: f35f1725252dc4fd8a502e1a4d07a04c, type: 3}
m_Scale: {x: 1, y: 1} m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0} m_Offset: {x: 0, y: 0}
- _MetallicGlossMap: - _MetallicGlossMap:
......
...@@ -120,7 +120,7 @@ Material: ...@@ -120,7 +120,7 @@ Material:
- _ZWrite: 1 - _ZWrite: 1
m_Colors: m_Colors:
- _BaseColor: {r: 0.8039216, g: 0.60784316, b: 0.37647057, a: 1} - _BaseColor: {r: 0.8039216, g: 0.60784316, b: 0.37647057, a: 1}
- _Color: {r: 1, g: 1, b: 1, a: 1} - _Color: {r: 0.8039216, g: 0.60784316, b: 0.3764705, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _SpecColor: {r: 0.07352942, g: 0.07352942, b: 0.07352942, a: 1} - _SpecColor: {r: 0.07352942, g: 0.07352942, b: 0.07352942, a: 1}
m_BuildTextureStacks: [] m_BuildTextureStacks: []
......
...@@ -133,7 +133,7 @@ Material: ...@@ -133,7 +133,7 @@ Material:
- _ZWrite: 1 - _ZWrite: 1
m_Colors: m_Colors:
- _BaseColor: {r: 0.8627451, g: 0.7490196, b: 0.6039216, a: 1} - _BaseColor: {r: 0.8627451, g: 0.7490196, b: 0.6039216, a: 1}
- _Color: {r: 1, g: 1, b: 1, a: 1} - _Color: {r: 0.8627451, g: 0.7490196, b: 0.6039216, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _SpecColor: {r: 0.07352942, g: 0.07352942, b: 0.07352942, a: 1} - _SpecColor: {r: 0.07352942, g: 0.07352942, b: 0.07352942, a: 1}
m_BuildTextureStacks: [] m_BuildTextureStacks: []
......
...@@ -120,7 +120,7 @@ Material: ...@@ -120,7 +120,7 @@ Material:
- _ZWrite: 1 - _ZWrite: 1
m_Colors: m_Colors:
- _BaseColor: {r: 0.654902, g: 0.6313726, b: 0.61960775, a: 1} - _BaseColor: {r: 0.654902, g: 0.6313726, b: 0.61960775, a: 1}
- _Color: {r: 1, g: 1, b: 1, a: 1} - _Color: {r: 0.654902, g: 0.6313726, b: 0.61960775, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _SpecColor: {r: 0.07352942, g: 0.07352942, b: 0.07352942, a: 1} - _SpecColor: {r: 0.07352942, g: 0.07352942, b: 0.07352942, a: 1}
m_BuildTextureStacks: [] m_BuildTextureStacks: []
......
...@@ -133,7 +133,7 @@ Material: ...@@ -133,7 +133,7 @@ Material:
- _ZWrite: 1 - _ZWrite: 1
m_Colors: m_Colors:
- _BaseColor: {r: 1, g: 0.9019608, b: 0.43921566, a: 1} - _BaseColor: {r: 1, g: 0.9019608, b: 0.43921566, a: 1}
- _Color: {r: 1, g: 1, b: 1, a: 1} - _Color: {r: 1, g: 0.9019608, b: 0.43921563, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _SpecColor: {r: 0.07352942, g: 0.07352942, b: 0.07352942, a: 1} - _SpecColor: {r: 0.07352942, g: 0.07352942, b: 0.07352942, a: 1}
m_BuildTextureStacks: [] m_BuildTextureStacks: []
......
...@@ -120,7 +120,7 @@ Material: ...@@ -120,7 +120,7 @@ Material:
- _ZWrite: 1 - _ZWrite: 1
m_Colors: m_Colors:
- _BaseColor: {r: 0.4470588, g: 0.6627451, b: 0.23921564, a: 1} - _BaseColor: {r: 0.4470588, g: 0.6627451, b: 0.23921564, a: 1}
- _Color: {r: 1, g: 1, b: 1, a: 1} - _Color: {r: 0.4470588, g: 0.6627451, b: 0.23921561, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _SpecColor: {r: 0.07352942, g: 0.07352942, b: 0.07352942, a: 1} - _SpecColor: {r: 0.07352942, g: 0.07352942, b: 0.07352942, a: 1}
m_BuildTextureStacks: [] m_BuildTextureStacks: []
......
...@@ -120,7 +120,7 @@ Material: ...@@ -120,7 +120,7 @@ Material:
- _ZWrite: 1 - _ZWrite: 1
m_Colors: m_Colors:
- _BaseColor: {r: 0.8862745, g: 0.96078426, b: 0.2588235, a: 1} - _BaseColor: {r: 0.8862745, g: 0.96078426, b: 0.2588235, a: 1}
- _Color: {r: 1, g: 1, b: 1, a: 1} - _Color: {r: 0.8862745, g: 0.96078426, b: 0.25882348, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _SpecColor: {r: 0.07352942, g: 0.07352942, b: 0.07352942, a: 1} - _SpecColor: {r: 0.07352942, g: 0.07352942, b: 0.07352942, a: 1}
m_BuildTextureStacks: [] m_BuildTextureStacks: []
......
...@@ -133,7 +133,7 @@ Material: ...@@ -133,7 +133,7 @@ Material:
- _ZWrite: 1 - _ZWrite: 1
m_Colors: m_Colors:
- _BaseColor: {r: 0.7411765, g: 0.47843128, b: 0.35294116, a: 1} - _BaseColor: {r: 0.7411765, g: 0.47843128, b: 0.35294116, a: 1}
- _Color: {r: 1, g: 1, b: 1, a: 1} - _Color: {r: 0.7411765, g: 0.47843128, b: 0.35294113, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _SpecColor: {r: 0.07352942, g: 0.07352942, b: 0.07352942, a: 1} - _SpecColor: {r: 0.07352942, g: 0.07352942, b: 0.07352942, a: 1}
m_BuildTextureStacks: [] m_BuildTextureStacks: []
......
...@@ -133,7 +133,7 @@ Material: ...@@ -133,7 +133,7 @@ Material:
- _ZWrite: 1 - _ZWrite: 1
m_Colors: m_Colors:
- _BaseColor: {r: 0.9921568, g: 0.68627447, b: 0.7137255, a: 1} - _BaseColor: {r: 0.9921568, g: 0.68627447, b: 0.7137255, a: 1}
- _Color: {r: 1, g: 1, b: 1, a: 1} - _Color: {r: 0.9921568, g: 0.6862744, b: 0.7137255, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _SpecColor: {r: 0.07352942, g: 0.07352942, b: 0.07352942, a: 1} - _SpecColor: {r: 0.07352942, g: 0.07352942, b: 0.07352942, a: 1}
m_BuildTextureStacks: [] m_BuildTextureStacks: []
......
...@@ -133,7 +133,7 @@ Material: ...@@ -133,7 +133,7 @@ Material:
- _ZWrite: 1 - _ZWrite: 1
m_Colors: m_Colors:
- _BaseColor: {r: 0.93333334, g: 0.654902, b: 0.43921566, a: 1} - _BaseColor: {r: 0.93333334, g: 0.654902, b: 0.43921566, a: 1}
- _Color: {r: 1, g: 1, b: 1, a: 1} - _Color: {r: 0.93333334, g: 0.654902, b: 0.43921563, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _SpecColor: {r: 0.07352942, g: 0.07352942, b: 0.07352942, a: 1} - _SpecColor: {r: 0.07352942, g: 0.07352942, b: 0.07352942, a: 1}
m_BuildTextureStacks: [] m_BuildTextureStacks: []
......
...@@ -12,7 +12,7 @@ TagManager: ...@@ -12,7 +12,7 @@ TagManager:
- Water - Water
- UI - UI
- AnimalParts - AnimalParts
- - IncorrectAnimal
- -
- -
- -
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment