Unity 3D 相关 C#语法
- id = GetComponent< 相关组件>(); //为id制定相应的组件
- id.AddForce( vector ); //为id施加由某向量规定的力
- new Vector3(1,1,0);//创建一个自定义的向量 ,Vector中的值只能为整形。
- 向量点乘 : Vector.Dot(Vector1,Vector2);
- 向量叉乘: Vector.Cross(Vector1,Vector2);
- float h = Input.GetAxis("Horizontal"); //定义一个短整形h,用于储存从键盘(a&d)上输入的水平值
- float v = Input.GetAxis("Vertical"); //定义一个短整形v,用于储存从键盘(w&s)上输入的垂直值
- if (collision.gameObject.tag == "Food"){Destroy(collision.gameObject);} //碰撞检测后销毁碰撞物体,tag是字符串类型,碰撞检测必发生碰撞物理效果,即必有运动状态的改变。
- public 变量可被外部脚本修改(例如Unity 3D中的Inspector) private 变量只作用于本函数中,无法被外部修改,未声明的变量均为private public可在Unity 3D中的Inspector中修改,但是会被Start & Update等脚本覆盖,即顺序为 脚本初始化->Inspector修改->Start函数->Update函数
- Myclass(定义一个类变量) = new AnotherClass();(同工程中其他脚本中的类) //调用其他脚本中的类
- 循环语句 :for while do-while foreach
- 四个初始函数:Awake Start Update FixUpdate (可用Ctrl+Shift+M启用MonoBehavior向导,可选择相应函数)
- Awake :在脚本启动前调用,即使脚本没有调用,也会作用一次。
- Start :在脚本启动时调用,也只作用一次。
- Update:每帧调用一次,当每帧的运算时间不同时,Update的调用时间也不同
- FixUpdate:每帧调用一次,调用时间相同(适用于物理检测)
- 组件的启用和禁用可用Component.enabled和!Component.enabled,包括脚本,但不包括游戏对象。
- 游戏对象的启用和禁用可用GameObject.SetActive(true/false),在层级结构中,父对象的启用会影响子对象,子对象的改变无法影响父对象。
- 平移与旋转
- 平移:transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime(每秒多少米));
- 旋转:transform.Rotate(Vector3.up, -turnSpeed * Time.deltaTime);
- Lookat函数
- transform.LookAt(target); target是transform类型变量 //使物体正面对着target,并跟随。
- 线性插值函数 Lerp
- 数值插值 :float result = Mathf.Lerp (3f, 5f, 0.5f); //result == 5;向量插值: Vector3 result = Vector3.Lerp (from, to, 0.75f);
- 可用于数值平滑 ,例如 light.intensity = Mathf.Lerp(light.intensity, 8f, 0.5f * Time.deltaTime); //是光线强度不断逼近8f,只在确定目标值得时候适用,其他情况下用SmoothDamp
- 颜色插值:Color result = Color.Lerp(from, to ,0.5f); //from&to 为Color类型的向量变量,有四个参数(Red,Blue,Green,Alpha)
- 销毁函数 Destory(gameobject,float)
- 可用于摧毁对象和组件,float用于延时,单位为s
- 获取键盘输入按键 GetKey // GetBotton (函数均返回bool值)
- GetKey:需要配合Keycode.keyname bool down = Input.GetKeyDown(KeyCode.Space);
- GetBotton:通过Unity的输入管理器,来指定按键 bool down = Input.GetButtonDown("Jump");
- 基于坐标轴的按键输入函数 GetAxis (返回的值为float(-1~1) 例如:float h = Input.GetAxis("Horizontal");) 鼠标输入 void OnMouseDown() 作用于对象,可添加鼠标点击后的事件
- 可通过Input manager设置Axie的相关参数
- Gravity :表示物体移动后,返回原点的速率
- Sentivity:表示物理移动的速率
- Dead :盲区,小于Dead值时,函数均返回0,用于防止微小移动。
- GetAxisRaw :用于返回整数,用于2D层面精准定位,无需平滑移动的场景
- 获取其他组件中的参数 GetComponent
- id = GetComponent<componentname>();
- 值Value变量与类Class变量的区别构造函数Construction (没有返回类型,void都没有)
- Value:bool,int,char,structure,float,ect.定义一个新Value变量,即申请一个新的储存位置放变量值
- Class:transform,gameobject,ect. 定义一个新Class变量,即获取该Class类型的地址,之后新变量的改变会直接改变该Class地址中的值
- public class Stuff
- { //同一个类中可有多个不同的构造函数,用不同的输入参数区分
- public Stuff(int bul, int gre, int roc)
- {bullets = bul; grenades = gre; rockets = roc;}
- }
23.克隆预制体函数 Instantiate
24.改变类型函数 as (as+目标类型)放语句末尾
25.数组初始化
1. int[] intarray = new int[5];
2. int[] intarray = {1,2,3,4,5};
26.延迟唤醒函数 Invoke InvokeRepeating CancelInvoke
1.Invoke("FunctionName",StartDelay) //在过StartDelay秒后,运行FunctionName函数
2.InvokeRepeating("FunctionName",StartDelay,RepeatDelay) //在过StartDelay秒后,运行FunctionName函数,之后每过RepeatDelay秒再运行一次。
3.CancelInvoke(“FunctionName”)
27.枚举函数 enum
1. enum Direction (: 类型)(可规定枚举类型) {North, East, South, West};
28.属性 Property public int MyProperty() {get(读取本属性时返回的值);set(写入本属性时的动作);}
1.通过属性,我们可以在其他脚本中调用本脚本中的属性,作用同Public
2.但属性可以通过删除get,set函数来实现只读或只写
3.属性中可在get,set中添加代码语段,增加功能。
29.三元运算符 (id = judgefunction ? turefunction:falsefunction;)
30.静态修饰符 static
1.static声明的类,和方法都可直接调用,无需为其指定实例(对象)
2.static声明的变量,其存储空间固定,名称唯一。而非静态变量可在多个脚本中创建同名变量,分别存储不同的值,且脚本完成后会释放空间。
31.通用函数创建 public T GenericMethod<T>(T param)
1.T代表未知类型,需在创建实例的时候为其指定
2.我们可以在where T : type1, type2 来限制T的类型
32.类的继承 public class Apple : Fruit (Apple作为子类,拥有Fruit的所有特征及成员,但自己又可添加新的功能)
1.我们可用 : base(pramtertype) 来指定调用父阶的构造函数,防止构造函数的重复。
2.可在实例前置括号,使父阶对象改变为子阶对象 ChildClass myclass = (ChildClass)ParentClassName
33.继承中的函数覆盖 virtual override
1.父阶的函数可在返回类型前添加关键字 virual 使其可被子阶类覆盖。
2.子阶函数可在返回类型前添加关键字 override 使其覆盖父阶函数。
3.若子阶函数希望调用父阶函数,且添加新功能,可在函数体第一句写上 base.FunctionName();
34.接口的实现 Interface (public interface IKillable)
1.接口适用于不相关的类直接的函数调用,跟继承类似
35.扩展方法 public static void ResetTransformation(this Transform trans)
1.拓展方法必须声明为static , 参数中为 this + 希望扩展的类名 + 任意id(此ID即为函数体中的调用对象)
36.命名空间 namespace SampleNamespace{}
1.即类的一个集合,例如 UnityEngine System.Collection
2.有三种使用命名空间的方法
1.在开头添加 using Namespace
2.直接在函数中调用 Namespace.function
3.在类外直接写上 namespace SampleNamespace{} ,之后花括号中的类均会放在此命名空间中。
37.四元数 Quaternion (用于描述旋转的最好方法)
38.协同程序 IEnumerator MyCoroutine (Transform target)
39.委托类型 delegate void MyDelegate(int num); //创建一种委托类型,里面可以放入返回值为空,参数为int的函数
1.委托类型需要实例化,MyDelegate myDelegate;
2.委托类型可以叠加和删除,使用+= 和-=,
3.委托变量未指定方法时,返回值为null,最好在每次使用前,先判断其是否为空,否则会发生错误。
40.属性 用[]进行调用 用于丰富函数的功能。
1.例如 [Range(-100,100)] int speed; 即会在Unity的Inspect界面产生一个滑动条。
41.事件 public static event ClickAction OnClicked;
1.事件是一种特殊的委托类型,需要先声明一种委托类型 public delegate void ClickAction();
2.事件的好处在于,其他的脚本中,只能从事件中添加或删除本脚本中的类,无法影响到事件中的其他类。 //内部安全性。
3.每次往事件中添加方法时,都需要订阅和退订的函数,以保证其安全运行。
42.单例模式 //保证一个类只有一个实例。
public class Singleton{
private static Singleton instance;
private Singleton (){}
public static Singleton getInstance(){
if (instance == null){
instance = new Singleton();
}
return instance;
}
}

浙公网安备 33010602011771号