Display Dialog | Popup Message with Options | C# | Unity Game Engine
PlayDisplayDialog.cs
using UnityEditor;
public class PlayDisplayDialog
{
[MenuItem("Custom Menu/Play")]
public static void Play()
{
bool playOutput = EditorUtility.DisplayDialog("Play", "Are you sure you want to enter play mode?", "Yes", "No");
if (playOutput)
EditorApplication.EnterPlaymode();
else
EditorUtility.DisplayDialog("Canceled", "You canceled the play mode.", "OK");
}
}
Create Your Own Editor Window | Editor Scripting | C# | Unity Game Engine
TestWindow.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
public class TestWindow : EditorWindow
{
string myString = "Hi";
float myFloat = 0f;
bool myBool = false;
bool isGroupEnabled = false;
[MenuItem("Custom Window/Test Window")]
public static void OpenWindow()
{
EditorWindow.GetWindow(typeof(TestWindow));
}
void OnGUI()
{
GUILayout.Label("Header", EditorStyles.boldLabel);
myString = EditorGUILayout.TextField("Text", myString);
isGroupEnabled = EditorGUILayout.BeginToggleGroup("Toggle Settings", isGroupEnabled);
myFloat = EditorGUILayout.Slider("Slider", myFloat, -10, 10);
myBool = EditorGUILayout.Toggle("Toggle", myBool);
EditorGUILayout.EndToggleGroup();
if(GUILayout.Button("Reset"))
{
myString = "Hi";
myFloat = 0f;
myBool = false;
isGroupEnabled = false;
}
}
}
Sorting an Array using "Insertion Sort" | C# | Unity Game Engine
Solution.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Solution : MonoBehaviour
{
public int[] numbers = { 78, 55, 45, 98, 13 };
void Start()
{
InsertionSort(numbers);
Debug.Log("Sorted numbers : " + string.Join(',', numbers));
}
public void InsertionSort(int[] nums)
{
for (int i = 1; i < nums.Length; i++)
{
int temp = nums[i];
int j;
for (j = i - 1; j >= 0 && nums[j] > temp; j--)
{
nums[j + 1] = nums[j];
}
nums[j + 1] = temp;
}
}
}
Menu Items - Component Context | Editor Scripting | C# | Unity Game Engine
MenuItems_ComponentContext_Editor.cs
using UnityEngine;
using UnityEditor;
public class MenuItems_ComponentContext_Editor
{
[MenuItem("CONTEXT/Camera/Set Orthographic")]
public static void SetOrthographic()
{
Camera cam = Selection.activeGameObject.GetComponent<Camera>();
cam.orthographic = true;
}
[MenuItem("CONTEXT/Camera/Set Perspective")]
public static void SetPerspective(MenuCommand cmd)
{
Camera cam = cmd.context as Camera;
cam.orthographic = false;
}
}
Sorting an Array using "Bubble Sort" | C# | Unity Game Engine
Solution.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Solution : MonoBehaviour
{
public int[] numbers = { 78, 55, 45, 98, 13 };
void Start()
{
BubbleSort(numbers);
Debug.Log("Sorted numbers : " + string.Join(',', numbers));
}
public void BubbleSort(int[] nums)
{
for (int i = nums.Length - 2; i >= 0; i--)
{
for (int j = 0; j <= i; j++)
{
if (nums[j] > nums[j + 1])
{
int temp = nums[j + 1];
nums[j + 1] = nums[j];
nums[j] = temp;
}
}
}
}
}
Menu Items - Conditional | Editor Scripting | C# | Unity Game Engine
MenuItems_Conditional_Editor.cs
using UnityEngine;
using UnityEditor;
public class MenuItems_Conditional_Editor
{
[MenuItem("Conditional Menu/Process Material")]
public static void DoSomethingWithMaterial()
{ }
//Use the same name in MenuItem and pass 'true' to the second argument to mark the method as Validator.
//The return type of method is bool and bool value depends on the type of selected object.
//The menu item will be enabled when the selected object is a material otherwise disabled.
[MenuItem("Conditional Menu/Process Material", true)]
public static bool ProcessMaterialValidation()
{
return Selection.activeObject.GetType() == typeof(Material);
}
}
Sorting an Array using "Selection Sort" | C# | Unity Game Engine
Solution.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Solution : MonoBehaviour
{
public int[] numbers = { 78, 55, 45, 98, 13 };
void Start()
{
SelectionSort(numbers);
Debug.Log("Sorted numbers : "+string.Join(",",numbers));
}
public void SelectionSort(int[] nums)
{
for (int i = 0; i < nums.Length - 1; i++)
{
int smallestNumIndex = i;
for (int j = i + 1; j < nums.Length; j++)
{
if(nums[j]<nums[smallestNumIndex])
smallestNumIndex = j;
}
if(smallestNumIndex != i)
{
int temp = nums[i];
nums[i] = nums[smallestNumIndex];
nums[smallestNumIndex] = temp;
}
}
}
}
Menu Items - Priority | Editor Scripting | C# | Unity Game Engine
MenuItems_Priority_Editor.cs
using UnityEngine;
using UnityEditor;
public class MenuItems_Priority_Editor
{
[MenuItem("Priority Menu/Option 1", priority = 1)]
public static void Option1Action()
{ }
[MenuItem("Priority Menu/Option 2", priority = 101)]
public static void Option2Action()
{ }
[MenuItem("Priority Menu/Option 3", priority = 51)]
public static void Option3Action()
{ }
[MenuItem("Priority Menu/Option 4", priority = 2)]
public static void Option4Action()
{ }
}
"Integer to Roman" Problem and its Solution | C# | Unity Game Engine
Solution.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Solution : MonoBehaviour
{
public int number = 1;
void Start()
{
Debug.Log("Roman => "+IntToRoman(number));
}
public string IntToRoman(int num)
{
var lookup = new Dictionary<int, string>
{
{1000, "M"},{900, "CM"},{500, "D"},{400, "CD"},{100, "C"},{90, "XC"},
{50, "L"},{40, "XL"},{10, "X"},{9, "IX"},{5, "V"},{4, "IV"},{1, "I"}
};
string result = "";
foreach (var pair in lookup)
{
if (num <= 0)
break;
int quotient = num / pair.Key;
for (int j = 0; j < quotient; j++)
{
num -= pair.Key;
result += pair.Value;
}
}
return result;
}
}
Menu Items - Hotkeys | Editor Scripting | C# | Unity Game Engine
MenuItems_Hotkeys_Editor.cs
using UnityEngine;
using UnityEditor;
public class MenuItems_Hotkeys_Editor
{
//Hotkey Shift-Ctrl-Alt A
[MenuItem("Hotkeys Menu/Create Cube #%&a")]
public static void CreateCube()
{
GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
}
//Hotkey A
[MenuItem("Hotkeys Menu/Option 2 _a")]
public static void Option2Action()
{ }
//Hotkey Left
[MenuItem("Hotkeys Menu/Option 3 _Left")]
public static void Option3Action()
{ }
//Hotkey F1
[MenuItem("Hotkeys Menu/Option 4 _F1")]
public static void Option4Action()
{ }
//Hotkey Home
[MenuItem("Hotkeys Menu/Option 5 _Home")]
public static void Option5Action()
{ }
}
''Container With Most Water" Problem and it's Solution | C# | Unity Game Engine
Solution.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
public class Solution : MonoBehaviour
{
public int[] heightArray = { 1, 8, 6, 2, 5, 4, 8, 3, 7 };
void Start()
{
Debug.Log(MaxArea(heightArray));
}
public int MaxArea(int[] height)
{
int leftIndex = 0;
int rightIndex = height.Length - 1;
int maxArea = 0;
while(leftIndex < rightIndex)
{
int area = Math.Min(height[leftIndex], height[rightIndex]) * (rightIndex - leftIndex);
maxArea = Math.Max(maxArea, area);
if (height[leftIndex] < height[rightIndex])
++leftIndex;
else if (height[rightIndex] < height[leftIndex])
--rightIndex;
else
{
++leftIndex;
--rightIndex;
}
}
return maxArea;
}
}
Creating Menu Items | Editor Scripting | C# | Unity Game Engine
MenuItems_Editor.cs
using UnityEngine;
using UnityEditor;
public class MenuItems_Editor
{
[MenuItem("Control Menu/Play")]
public static void Play()
{
EditorApplication.EnterPlaymode();
}
[MenuItem("Control Menu/Stop")]
public static void Stop()
{
EditorApplication.ExitPlaymode();
}
[MenuItem("Assets/Custom/Clear PlayerPrefs")]
public static void DeleteAllPlayerPrefs()
{
PlayerPrefs.DeleteAll();
EditorUtility.DisplayDialog("Cleared", "PlayerPrefs Cleared", "OK");
}
[MenuItem("Assets/Create/Cube at Center")]
public static void CreateCenterCube()
{
GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
cube.transform.position = Vector3.zero;
}
}
"Valid Parentheses" Problem and its Solution | C# | Unity Game Engine
Solution.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Solution : MonoBehaviour
{
public string input = "()";
void Start()
{
Debug.Log(IsValid(input));
}
public bool IsValid(string s)
{
var valid_pairs = new Dictionary<char, char> { { '(', ')' }, { '{', '}' }, { '[', ']' } };
var openingBrackets = new Stack<char>();
foreach (var _char in s)
{
if(valid_pairs.ContainsKey(_char))
{
openingBrackets.Push(_char);
}
else
{
if(openingBrackets.Count == 0 || _char != valid_pairs[openingBrackets.Peek()])
return false;
openingBrackets.Pop();
}
}
return openingBrackets.Count == 0;
}
}
Finding "Longest Common Prefix" string amongst an array of strings | C# | Unity Game Engine
Solution.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Solution : MonoBehaviour
{
public string[] strings = { "flower", "flow", "flight" };
void Start()
{
Debug.Log("LCF => "+LongestCommonPrefix(strings));
}
public string LongestCommonPrefix(string[] strs)
{
if (strs == null || strs.Length == 0)
return "";
string prefix = strs[0];
for (int i = 1; i < strs.Length; i++)
{
while(strs[i].IndexOf(prefix) != 0)
{
prefix = prefix.Substring(0, prefix.Length - 1);
if (string.IsNullOrEmpty(prefix))
return "";
}
}
return prefix;
}
}
Adding Button in Custom Inspector | Editor Scripting | C# | Unity Game Engine
PlayerScript.cs
using UnityEngine;
public class PlayerScript : MonoBehaviour
{
public int health = 100;
public int maxHealth = 100;
}
PlayerScriptEditor.cs
using UnityEngine;
using UnityEditor;
[CustomEditor(typeof(PlayerScript))]
public class PlayerScriptEditor : Editor
{
public override void OnInspectorGUI()
{
PlayerScript playerScript = (PlayerScript)target;
playerScript.health = EditorGUILayout.IntField("Health", playerScript.health);
playerScript.maxHealth = EditorGUILayout.IntField("Max-Health", playerScript.maxHealth);
if(GUILayout.Button("Reset Values"))
{
playerScript.health = 100;
playerScript.maxHealth = 100;
}
}
}
'Roman to Integer' Problem and its Solution | C# | Unity Game Engine
Solution.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Solution : MonoBehaviour
{
public string s = "III";
void Start()
{
Debug.Log(s + " => " + RomanToInt(s));
}
public int RomanToInt(string s)
{
var map = new Dictionary<char, int> { { 'I', 1 }, { 'V', 5 }, { 'X', 10 }, { 'L', 50 }, { 'C', 100 }, { 'D', 500 }, { 'M', 1000 } };
int num = 0;
for (int i = 0; i < s.Length; i++)
{
if (i == 0 || map[s[i]] <= map[s[i - 1]])
{
num += map[s[i]];
}
else
{
num += map[s[i]] - 2 * map[s[i - 1]];
}
}
return num;
}
}
Use of "HelpBox" in Custom Inspector | Editor Scripting | C# | Unity Game Engine
PlayerScript.cs
using UnityEngine;
public class PlayerScript : MonoBehaviour
{
public int health = 100;
public int maxHealth = 100;
}
PlayerScriptEditor.cs
using UnityEngine;
using UnityEditor;
[CustomEditor(typeof(PlayerScript))]
public class PlayerScriptEditor : Editor
{
public override void OnInspectorGUI()
{
PlayerScript playerScript = (PlayerScript)target;
playerScript.health = EditorGUILayout.IntField("Health", playerScript.health);
playerScript.maxHealth = EditorGUILayout.IntField("Max-Health", playerScript.maxHealth);
if (playerScript.maxHealth > 0)
{
if(playerScript.maxHealth < playerScript.health)
EditorGUILayout.HelpBox("Max Health is smaller than Health", MessageType.Warning);
}
else
{
EditorGUILayout.HelpBox("Max Health should be greater than 0", MessageType.Error);
}
}
}
'Two Sum' Problem and its Optimized Solution | C# | Unity Game Engine
Solution.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Solution : MonoBehaviour
{
public int[] nums = { 2, 7, 11, 15 };
public int target = 9;
void Start()
{
var result = TwoSum(nums, target);
Debug.Log("Result => " + string.Join(',', result));
}
public int[] TwoSum(int[] nums, int target)
{
var lookup = new Dictionary<int, int>();
for (int i = 0; i < nums.Length; i++)
{
int secondNum = target - nums[i];
if(lookup.ContainsKey(secondNum))
return new[] {lookup[secondNum], i};
lookup[nums[i]] = i;
}
return System.Array.Empty<int>();
}
}
Use of "DrawDefaultInspector" method in Custom Inspector | Editor Scripting | C# | Unity Game Engine
PlayerScript.cs
using UnityEngine;
public class PlayerScript : MonoBehaviour
{
public int health = 100;
public int maxHealth = 100;
}
PlayerScriptEditor.cs
using UnityEngine;
using UnityEditor;
[CustomEditor(typeof(PlayerScript))]
public class PlayerScriptEditor : Editor
{
public override void OnInspectorGUI()
{
PlayerScript playerScript = (PlayerScript)target;
DrawDefaultInspector();
if (playerScript.maxHealth > 0)
EditorGUILayout.LabelField("Health %", playerScript.health * 100 / playerScript.maxHealth + "%");
}
}
Check if number is 'Palindrome Number' | C# | Unity Game Engine
Solution.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Solution : MonoBehaviour
{
public int x = 121;
void Start()
{
Debug.Log(IsPalindrome(x));
}
public bool IsPalindrome(int x)
{
if(x<0 || (x%10==0 && x!=0))
return false;
int reversedNum = 0;
while(x > reversedNum)
{
reversedNum = reversedNum * 10 + (x % 10);
x /= 10;
}
return x == reversedNum || x == reversedNum / 10;
}
}
Building a Custom Inspector | Editor Scripting | C# | Unity Game Engine
PlayerScript.cs
using UnityEngine;
public class PlayerScript : MonoBehaviour
{
public int health = 100;
public int maxHealth = 100;
}
PlayerScriptEditor.cs
using UnityEngine;
using UnityEditor;
[CustomEditor(typeof(PlayerScript))]
public class PlayerScriptEditor : Editor
{
public override void OnInspectorGUI()
{
PlayerScript playerScript = (PlayerScript)target;
playerScript.health = EditorGUILayout.IntField("Health", playerScript.health);
playerScript.maxHealth = EditorGUILayout.IntField("Max-Health", playerScript.maxHealth);
EditorGUILayout.Space();
EditorGUILayout.BeginHorizontal("box");
if (playerScript.maxHealth > 0)
{
EditorGUILayout.LabelField("Health %", playerScript.health * 100 / playerScript.maxHealth + "%");
}
EditorGUILayout.EndHorizontal();
}
}
Two Sum Problem and its Solution | C# | Unity Game Engine
Solution.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Solution : MonoBehaviour
{
public int[] nums = { 2, 7, 11, 15 };
public int target = 9;
private void Start()
{
var result = TwoSum(nums, target);
Debug.Log("Result => "+string.Join(',',result));
}
public int[] TwoSum(int[] nums, int target)
{
for (int i = 0; i < nums.Length-1; i++)
{
for (int j = i + 1; j < nums.Length; j++)
{
int sum = nums[i] + nums[j];
if(sum == target)
return new int[]{i, j};
}
}
return new int[] { -1, -1 };
}
}
Subscribe to:
Comments (Atom)