1.如何获取一个List<中的一个泛型>?
详细描述:我想获取List的泛型类型,然后强转List里面的实例。
网上找了很久都没有找到相关的资料,不知道是不是因为我这个想法比较愚蠢,总之比较好奇能不能这么做。
然后就产生了相关的问题
class Human
{
public virtual void Eat() {
}
public virtual void Sleep() {
}
public virtual void Study() {
}
}
class Man : Human
{
public void ManFun() {
}
}
class Woman : Human
{
public void WomanFun() {
}
}
public class Test : MonoBehaviour
{
List<Human> HumanList = new List<Human>();
void Start()
{
HumanList.Add(new Man());
HumanList.Add(new Woman());
HumanList.Add(new Mid());
Debug.Log($"HumanListType:{
HumanList.GetType()}\n{
HumanList[0].GetType()}\n{
HumanList[1].GetType()}");
var rType = HumanList[0].GetType().BaseType;
Debug.Log(rType);
Debug.Log(HumanList[2].GetType().BaseType);
}
}
1.获取HumanList类型,当我们打印List的类型时:
结果为:HumanListType:System.Collections.Generic.List`1[Human]
距离我想得到的Human类型又更近了,我想知道这个Human里面的相关信息还要拿到Human这个类型。
2.当HumanList被new出来并且该List中有元素时的做法
我当时就想到了获取到实例然后再获取其父类的类型
结果为:Human
但是:该方法有个弊端,List<>在规定泛型的时候肯定是以BaseType做为泛型,如果继承的链条太长,就会导致套娃!
3.当HumanList仅仅只是声明的状态时,如何获取其泛型的类型
此时GetType会报NoneReference。
2.AnimationClip的类型就是AnimationClip
3.接口Debug.DrawLine()若写在OnDrawGizmosSelected函数体内,在Hierarchy中选择其他GameObject时,这个Line不会及时消失。
class Test : MonoBehaviour
{
void OnDrawGizmosSelected()
{
Debug.DrawLine(Vector3.zero,Vector3.up);//选中场景中的其他物体时,会导致刷新不及时该Line会一直存在
//建议使用
Gizmos.DrawLine(Vector3.zero,Vector3.up);//注意此时使用的是局部坐标(该坐标系的中心点是该Mono所挂物体的坐标)
}
}
4.Gizmos.DrawLine 偏移量修正问题
在Unity中,经常会写到关卡编辑器,此时会需要一些数据可视化给策划,方便其使用,我在使用Gimzos.DrawLine时,发现如果动了场景中的挂点会导致线条不匹配。
说明:由三个Vector构成的三角形,但是在移动红色方块时,三角形会出现偏移。
因为Gizmos.DrawLine是以局部坐标开始画的,此时已经转化了局部坐标的。
for (int i = 1; i < this.PointList.Count; i++)
{
var Pos1 = this.transform.InverseTransformPoint(this.PointList[i]);
var Pos2 = this.transform.InverseTransformPoint(this.PointList[i-1]);
Gizmos.DrawLine(Pos1, Pos2);
if (i == this.PointList.Count - 1)
{
Pos1 = this.transform.InverseTransformPoint(this.PointList[i]);
Pos2 = this.transform.InverseTransformPoint(this.PointList[0]);
Gizmos.DrawLine(Pos1, Pos2);
}
}
改良版本
var rOffset = this.PointList[this.PointList.Count - 1] - this.transform.position;
for (int i = 1; i < this.PointList.Count; i++)
{
var Pos1 = this.transform.InverseTransformPoint(this.PointList[i]) - rOffset;
var Pos2 = this.transform.InverseTransformPoint(this.PointList[i - 1]) - rOffset;
Gizmos.DrawLine(Pos1, Pos2);
if (i == this.PointList.Count - 1)
{
Pos1 = this.transform.InverseTransformPoint(this.PointList[i]) - rOffset;
Pos2 = this.transform.InverseTransformPoint(this.PointList[0]) - rOffset;
Gizmos.DrawLine(Pos1, Pos2);
}
}
5.射线检测失效(正面有效反面失效问题):
这是个坑,意思就是三角面模型是有正反的。