【unity基础_Day06】 射线、委托
一.常用API1.GameObject.SetActive( bool ) 用于显示和隐藏游戏对象二.射线1.发射射线Physics.Raycast(firePos.position,firePos.forward,out hit, 100,layerMark)获取层级 可以通过layermark的字符串名称,或者通过安慰按位运算符进行获取(1<<8)2.屏幕射线的应用3.固定射线的应
·
一.常用API
1.GameObject.SetActive( bool ) 用于显示和隐藏游戏对象
二.射线
1.发射射线
Physics.Raycast(firePos.position,firePos.forward,out hit, 100,layerMark)
获取层级 可以通过layermark的字符串名称,或者通过安慰按位运算符进行获取(1<<8)
2.屏幕射线的应用
3.固定射线的应用
4.线性检测
Physics.Linecast(Vector3 star,Vector3 end,out RaycastHit); 检测两个对象之间有没有障碍物
5.球形检测
Physics.OverlapSphere();检测以**为中心,半径多少之内,是否有游戏对象(带有碰撞器的游戏对象)
rig.AddExplosionForce(1000, cubeTrans.position, 5); 添加爆炸力
三.委托
1.delegate 委托的关键字
委托可以简单的理解为一种方法的类型
namespace Test
{
public delegate void Dele();
class Program
{
static void Main(string[] args)
{
Student s = new Student();
Dele d = s.Drink;
d+=s.Eat;
d();
Console.ReadKey();
}
public class Student
{
public void Eat()
{
Console.WriteLine("吃东西");
}
public void Drink()
{
Console.WriteLine("喝水");
}
}
}
}
2.匿名函数
Dele d = delegate (string str) { return str.ToUpper(); };
3.Lambda表达式
(形参)=>{方法}; =>: 表示goes to的意思
public delegate void Dele1();
public delegate void Dele2(int a);
public delegate string Dele3(string name);
static void Main(string[] args)
{
Dele1 d1 = () => { };
Dele2 d2 = (int a) => { Console.WriteLine(a); };
//形参的括号中 可以不用定义形参的类型 直接写出来 Lambda表达式会自行判断
Dele3 d3 = (name) => { return name; };
}
4.泛型
/// <summary>
///Get<T> 其中<T>为标志变量
/// 泛型
/// </summary>
/// <typeparam name="T"> struct【T被限制为 值类型】</typeparam>
/// <param name="a">形参</param>
/// <param name="b">形参</param>
public void GetNum<T>(T a,T b)where T: struct
{
T x = a;
a = b;
b = x;
}
自定义泛型的约束:
T: struct 限定T类型只能为值类型
Q:class 限定Q类型只能为引用类型
O:ICloneable 限定O类型只能为 ICloneable 的子类 (接口类)
K:Person 限定K类型只能为 Person 或者 Person的子类(其中person类为自定义类)
W:class,new() 限定W类型只能为引用类型,并且使用的是无参数构造函数
此T、Q、O、K、W表示的都是泛型,可以用其他大写字母来代替,一般是用大写的T来表示泛型
更多推荐



所有评论(0)