Unity3D and GUIStyle

You can create a GUIStyle by simply declaring a variable at the top of your script which when the script (component) is selected, you can go to the Properties panel and modify the style that way. Unity3d Docs GUIStyle

GUIStyle myStyle;

You can also create a GUISkin and modify the values through the skin as well. Unity3d Docs GUISkin

OR .. you can change the alignment on the individual reference of your label (or button, etc ..) directly through the code below. Be aware though, that once you change the Alignment property, it stays changed for EVERY Other label (or button, etc ..) reference. The way to change just one item would be to follow the code below: (change style, create GUI element, change style back to original state)

GUI.skin.label.alignment = TextAnchor.MiddleLeft;
GUI.Label(Rect(10,10,200,400),"My Text");
GUI.skin.label.alignment = TextAnchor.MiddleCenter;

Below are the possible Text Alignment options. If you want to change the alignment for a button instead of a label, just change the word “label” for whatever default style it is that you want to change.

GUI.skin.label.alignment = TextAnchor.MiddleLeft;
GUI.skin.label.alignment = TextAnchor.MiddleRight;
GUI.skin.label.alignment = TextAnchor.MiddleCenter;
GUI.skin.label.alignment = TextAnchor.LowerCenter
GUI.skin.label.alignment = TextAnchor.LowerLeft
GUI.skin.label.alignment = TextAnchor.LowerRight
GUI.skin.label.alignment = TextAnchor.UpperCenter
GUI.skin.label.alignment = TextAnchor.UpperLeft
GUI.skin.label.alignment = TextAnchor.UpperRight

 

 

 

 

 

 

Unity3d ScrollView And Drag

Ref: http://answers.unity3d.com/questions/17347/any-examples-of-an-iphone-like-scrollview-using-un.html

 

using UnityEngine; 
using System.Collections;
 
public class scrollView : MonoBehaviour {
 
Vector2 scrollPosition;
Touch touch;
 // The string to display inside the scrollview. 2 buttons below add & clear this string.
 string longString = "This is a long-ish string";
 
 void OnGUI () { 
 
     scrollPosition = GUI.BeginScrollView(new Rect(110,50,130,150),scrollPosition, new Rect(110,50,130,560),GUIStyle.none,GUIStyle.none);
 
     for(int i = 0;i < 20; i++)
     {
         GUI.Box(new Rect(110,50+i*28,100,25),"xxxx_"+i);
     }
     GUI.EndScrollView ();
 }
 
 void Update()
 {
     if(Input.touchCount > 0)
     {
         touch = Input.touches[0];
         if (touch.phase == TouchPhase.Moved)
         {
             scrollPosition.y += touch.deltaPosition.y;
         }
     }
 }
 }

 

Unity check internet connection availability

Solution

Application.internetReachability is what you need. In conjunction with Ping, probably.

using UnityEngine;

public class InternetChecker : MonoBehaviour
{
    private const bool allowCarrierDataNetwork = false;
    private const string pingAddress = "8.8.8.8"; // Google Public DNS server
    private const float waitingTime = 2.0f;

    private Ping ping;
    private float pingStartTime;

    public void Start()
    {
        bool internetPossiblyAvailable;
        switch (Application.internetReachability)
        {
            case NetworkReachability.ReachableViaLocalAreaNetwork:
                internetPossiblyAvailable = true;
                break;
            case NetworkReachability.ReachableViaCarrierDataNetwork:
                internetPossiblyAvailable = allowCarrierDataNetwork;
                break;
            default:
                internetPossiblyAvailable = false;
                break;
        }
        if (!internetPossiblyAvailable)
        {
            InternetIsNotAvailable();
            return;
        }
        ping = new Ping(pingAddress);
        pingStartTime = Time.time;
    }

    public void Update()
    {
        if (ping != null)
        {
            bool stopCheck = true;
            if (ping.isDone)
                InternetAvailable();
            else if (Time.time - pingStartTime < waitingTime)
                stopCheck = false;
            else
                InternetIsNotAvailable();
            if (stopCheck)
                ping = null;
        }
    }

    private void InternetIsNotAvailable()
    {
        Debug.Log("No Internet :(");
    }

    private void InternetAvailable()
    {
        Debug.Log("Internet is available! ;)");
    }
}

 

Things to note

  1. Unity’s ping doesn’t do any domain name resolutions, i.e. it only accepts IP addresses. So, if some player has Internet access but has some DNS problems, the method will say that he has Internet.
  2. It’s only a ping check. Don’t expect it to be 100% accurate. In some rare cases it will provide you with false information.

 

Unity C# validate email

public bool IsValidEmailAddress(string s)
{
	var regex = new Regex(@"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?");
	return regex.IsMatch(s);
}

 

C# Script สำหรับตรวจสอบเลขบัตรประชาชนไทย ใน Unity3d

สำหรับตรวจสอบเลขบัตรประชาชนไทย ใน Unity3d นะ

private bool IsValidCheckPersonID(string pid) 
{

	char[] numberChars = pid.ToCharArray();

	int total = 0;
	int mul = 13;
	int mod = 0, mod2 = 0;
	int nsub = 0;
	int numberChars12 = 0;

	for(int i = 0; i < numberChars.Length-1; i++) {
		int num = 0;
		int.TryParse(numberChars[i].ToString(), out num);

		total = total + num * mul;
		mul = mul - 1;

		//Debug.Log(total + " - " + num + " - "+mul);
	}

	mod = total % 11;
	nsub = 11 - mod;
	mod2 = nsub % 10;

	//Debug.Log(mod);
	//Debug.Log(nsub);
	//Debug.Log(mod2);


	int.TryParse(numberChars[12].ToString(), out numberChars12);

	//Debug.Log(numberChars12);

	if(mod2 != numberChars12)
		return false;
	else
		return true;
}

ความหมายของแต่ละหลัก

หลักที่ 1 หมายถึง ประเภทบุคคลซึ่งมี 8 ประเภท คือ

-ประเภทที่ 1 ได้แก่ คนที่เกิดและมีสัญชาติ ไทย ได้แจ้งเกิดภายในกำหนดเวลา (ตั้งแต่1 มกราคม 2527)
-ประเภทที่ 2 ได้แก่ คนที่เกิดและมีสัญชาติไทย ได้แจ้งเกิดเกินกำหนดเวลา (ตั้งแต่ 1 มกราคม 2527)
-ประเภทที่ 3 ได้แก่ คนไทยและคนต่างด้าวที่มีใบสำคัญประจำตัวคนต่างด้าว และมีที่อยู่ในทะเบียนบ้าน ในสมัยเริ่มแรก (1 มกราคม – 31 พฤษภาคม 2527)
-ประเภทที่ 4 ได้แก่ คนไทยและคนต่างด้าวที่มีใบสำคัญคนต่างด้าวแต่แจ้งย้ายเข้า โดยยังไม่มีเลขประจำตัวประชาชน ในสมัยเริ่มแรก (1 มกราคม – 31 พฤษภาคม 2527)
-ประเภทที่ 5 ได้แก่ คนไทยที่ได้รับอนุมัติให้เพิ่มชื่อเข้าในทะเบียนบ้านในกรณีตกสำรวจหรือกรณีอื่น ๆ
-ประเภทที่ 6 ได้แก่ ผู้ที่เข้าเมืองโดยไม่ชอบด้วยกฏหมาย และผู้ที่เข้าเมืองโดยชอบด้วยกฏหมาย แต่จะอยู่ในลักษณะชั่วคราว
-ประเภทที่ 7 ได้แก่ บุตรของบุคคลประเภทที่ 6 ซึ่งเกิดในประเทศไทย
-ประเภทที่ 8 ได้แก่ คนต่างด้าวที่เข้าเมืองโดยถูกต้องตามกฏหมาย คือ ได้รับใบสำคัญประจำตัวคนต่างด้าว คนที่ได้รับการแปลง สัญชาติเป็นสัญชาติไทย และคนที่ได้รับการให้สัญชาติไทย

หลักที่ 2 ถึงหลักที่ 5 หมายถึง รหัสของสำนักทะเบียนที่ท่านมีชื่อในทะเบียนบ้านในขณะให้เลขสำหรับเด็กเกิดใหม่จะหมายถึงถิ่น ที่เกิด โดยหลักที่ 2 และ 3 หมายถึงจังหวัดหลักที่ 4 และ 5 หมายถึงอำเภอหรือเทศบาล

หลักที่ 6 ถึงหลักที่ 10 หมายถึงกลุ่มที่ของบุคคลแต่ละประเภทตามหลักแรก หรือหมายถึงเล่มที่ของสูติบัตรแล้วแต่กรณี

หลักที่ 11 และ 12 หมายถึง ลำดับที่ของบุคคลในแต่ละกลุ่มประเภทหรือหมายถึงใบที่ของสูติบัตรแต่ละเล่มแล้วแต่กรณี

หลักที่ 13 คือ ตัวเลขตรวจสอบความถูกต้องของเลข 12 หลักแรก

C# Move 3D object ใน Space Shooter Game

Serializable เป็น code ที่เป็นตัวบอกให้แสดงค่าตัวแปรที่เป็น public ใน code component ในกรณีที่ มีอีก object ใน file เดียวกัน
หรือง่ายๆ คือการ embed class ด้วย sub properties เข้่าไปใน object เดียวกัน

[System.Serializable]

ส่วนสำคัญของการเครื่องที่จะอยู่ที่ rigidbody.velocity รับค่า Vector3 จากคีย์บอร์ด
โดยตัวแปร speed จะเป็นตัวปรับความเร็วในการเคลี่ยนที่

float moveHorizontal = Input.GetAxis("Horizontal");
float moveVertical = Input.GetAxis("Vertical");
Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
rigidbody.velocity = movement * speed;

ตีกรอบให้วัตถุไม่เคลื่อนที่ออกไปนอกกรอบที่กำหนด คำสั่งที่สำคัญคือ Mathf.Clamp คำสั่งนี้จะเป็นการกำหนดค่าให้อยู่ระหว่างค่าที่กำหนด

rigidbody.position = new Vector3(Mathf.Clamp(rigidbody.position.x, boundary.xMin, boundary.xMax),0.0f, Mathf.Clamp(rigidbody.position.z, boundary.zMin, boundary.zMax));

เป็นคำสั่งที่ทำให้การเคลื่อนที่ดูสมจริงมากขึ้น ในกรณีที่เป็นยานอวกาศนะ เมื่อเคลื่อนที่ไปทางซ้ายจะเบนวัตถุไปทางซ้ายและมรกรณีเดียวกันกับทางขวา
โดยค่า tilt เอาไว้กำหนดกว่าจะให้เอียงมากหรือน้อย

rigidbody.rotation = Quaternion.Euler(0.0f, 0.0f, rigidbody.velocity.x * -tilt);

ภาพรวมนะจ๊ะ

using UnityEngine;
using System.Collections;

[System.Serializable]
public class Boundary
{
public float xMin, xMax, zMin, zMax;
}

public class PlayerController : MonoBehaviour
{

public float speed;
public float tilt;
public Boundary boundary;

public GameObject shot;
public Transform shotSpawn;

public float fireRate = 0.5F;
private float nextFire = 0.0F;

void Update()
{
if (Input.GetButton("Fire1") && Time.time > nextFire) {
nextFire = Time.time + fireRate;
//GameObject clone =
Instantiate(shot, shotSpawn.position, shotSpawn.rotation); // as GameObject;
} // กดแล้วยิง
}

void FixedUpdate()
{
float moveHorizontal = Input.GetAxis("Horizontal"); //รับค่าจาก ปุ่มบน-ล่าง
float moveVertical = Input.GetAxis("Vertical"); //รับค่าจาก ปุ่มซ้าย-ขวา

Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
rigidbody.velocity = movement * speed; //เคลื่อนที่วัตถุ

rigidbody.position = new Vector3(
Mathf.Clamp(rigidbody.position.x, boundary.xMin, boundary.xMax),
0.0f,
Mathf.Clamp(rigidbody.position.z, boundary.zMin, boundary.zMax)
); //ตีกรอบให้วัตถุไม่เคลื่อนที่ออกไปนอกกรอบที่กำหนด

rigidbody.rotation = Quaternion.Euler(0.0f, 0.0f, rigidbody.velocity.x * -tilt);
}

}