unity3d圣典脚本基础学习C#版本

unity3d圣典脚本基础学习C#版本

    • 基础内容
    • 常用操作
    • Vector3 向量
    • 全局变量
    • 获取对象
    • 实例化

基础内容

  1. 所有脚本都继承自MonoBehaviour类;
  2. 默认使用Start函数进行初始化,该函数仅执行一次。也可以使用Awake函数 进行初始化,不同之处在于 ,Awake在加载场景时运行,Start在 第一次调用Update或者FixedUpdate函数之前被调用,Awake运行在 Start函数之前
  3. 目前Unity暂不支持命名空间.或许未来版本会有.
  4. C#中协同程序有不同的句法规则,Coroutines必须是IEnumerator返回类型,并且yield用yield return替代.
using System.Collections;
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour {
	// C# coroutine // C# 协同程序
	IEnumerator SomeCoroutine () {
		// Wait for one frame // 等一帧
		yield return 0;

		// Wait for two seconds // 等两秒
		yield return new WaitForSeconds (2);
	}
}

常用操作

对物体的移动以及旋转通过Transfrom操作。

  • 物体在Y轴上旋转5度。
public Transform transform;
void Update()
{
	//旋转操作
	transform.Rotate(0,5,0);
	//移动操作
	transform.Translate(0,0,2);
}

Vector3 向量

  • 新建一个向量(1,1,1)
public Vector3 aposition = new Vector3(1,1,1);
  • 向量的点乘,一个向量在另一向量方向上的投影,一个数值
public Vector3 a = new Vector3(1,1,1);
public Vector3 b = new Vector3(1,0,1);
float result = Vector3.Dot(a,b);
  • 向量的叉乘,得到一个垂直于两向量平面的新的向量
float result = Vector3.Cross(a,b);
  • 两个向量夹角,范围[0,180]
float angle = Vector3.Angle(a,b);
  • 两个向量距离
float dis = Vector3.Distance(a,b);
  • 规范化单位向量不改变原向量
float dis = Vector3.Distance(a.normalized,b.normalized);

全局变量

用static关键字创建全局变量,这是创建了一个名为someGlobal的全局变量.

using UnityEngine;
using System.Collections;
public class example : MonoBehaviour {
    public static int someGlobal = 5;
    public void Awake() {
        print(typeof(someGlobal));
        typeof(someGlobal) = 1;
    }
}

从另一个脚本访问它,你需要用”脚本名加一个小圆点再加上全局变量名”.

print(TheScriptName.someGlobal);
TheScriptName.someGlobal = 10; 

获取对象

  • 通过对象名(字符串Cube)获取单个游戏对象
using UnityEngine;
using System.Collections;
public class example : MonoBehaviour {
    public GameObject obj;
    void Start() {
        obj =GameObject.Find("Cube");
    }
    void Update()
    {
    	if(obj != null)
    	{
    		obj.transform.Rotate(0, Time.deltaTime * 200, 0);
		}
	}
}
  • 通过标签获取多个/单个游戏对象
using UnityEngine;
using System.Collections;
public class example : MonoBehaviour {
    public GameObject[] obj;
    void Start() {
        Myobjs = GameObject.FindGameObjectsWithTag("Cube");
    }
    void Update()
    {
    	if(Myobjs != null)
    	{
    		foreach(GameObject obj in Myobjs)
    		{
    			Debug.log("以"+obj.tag+"标签为游戏对象的名称"+obj.name);
    		}
	}
}

实例化

  • 一般创建克隆原始物体,多为预制体perfabs
  • 克隆原始物体,位置设置在position,设置旋转在rotation,返回的是克隆后的物体。这实际上在Unity和使用复制(ctrl+D)命令是一样的,并移动到指定的位置。如果一个游戏物体,组件或脚本实例被传入,实例将克隆整个游戏物体层次,以及所有子对象也会被克隆。所有游戏物体被激活。
public Transform prefab;
void Start()
{
	int i = 0;
	while(i < 10)
	{
		Instantiate(prefab,new Vector3(i*2.0f,0,0),Quaternion.identity);
		i++;
	 }
}
  • 实例化更多通常用于实例投射物(如子弹、榴弹、破片、飞行的铁球等),AI敌人,粒子爆炸或破坏物体的替代品。
public Rigidbody obj;
void Update()
{
	Rigidbody clone;
	clone = Instantiate(obj,transform.position,transform.rotation);
}

你可能感兴趣的:(unity3d圣典脚本基础学习C#版本)