记得引入using UnityEngine.UI;
记得引入using UnityEngine.UI;
碰撞销毁再生成
给蛇头填collider 再填size 精准碰撞 小于30 trigger(不会和别人发生碰撞 但会检测谁撞到了我)(两边只能钩一个)
刚体 给食物+Tag
On。。。方法 括号中间无逗号!!! 两种识别标签的方法只记一种
怎么通知Maker呢
在Maker中创建一个静态的单例模式 可以直接从类名来访问它
再用一个变量 访问get 直接 return _instance给他!把它转变为私有
再在sh下加入访问Instance 记得把Makefood 改成public
再在Awake()里给他_instance里赋值this(必须赋值)
我用和你一样做的方法,但是我的触发检测不检测
给food加标签
食物吃掉之后在生成
把蛇头添加box collider
istrigger勾选
添加刚体(不要使用重力)
ontriggerenter2d
处理食物被吃掉并再生成。。
碰撞器更小一点。
辨别,加标签。
碰撞检测。
埋头干就完事了。
1.为蛇头,食物添加碰撞器
2.碰撞器需要比蛇头本体,食物本体要小一圈,否则擦过时会发生碰撞
3.蛇头IsTrigger勾上,碰撞器变成触碰器,碰撞器与碰撞器间不会有撞击效果
食物不勾
4.蛇头添加刚体,不启用重力(重力比例=0)
5.为food添加tag:
监视面板-tag-添加tag-加号-“food”
返回监视面板-tag-标签设为food
6添加吃到食物的代码
1)蛇头脚本中添加函数
private void OnTriggerEnter2D(Collider2D collison)
{
Destroy (collison.gameObject);
FoodMaker.Instance.FoodMake ();
}
2)在食物脚本中创建一个单例模式使得另外一个脚本可以调用该脚本内的函数
private static FoodMaker _Instance;
public static FoodMaker Instance
{
get{return _Instance; }
}
void Awake()
{
_Instance = this;
}
将MakeFood函数公开
Sh里,加Box collider 2D,Width:45 Height:45 Size X: 28 Y:28,选中Is Trigger,,加Rigidbody 2D,且不启用重力。
Food里,加Box collider 2D,Width:40 Height:40 Size X: 28 Y:28,选中Tags,输入food标签
{
public float velocity=0.35f;
public int step;
private int x;
private int y;
private Vector3 headPos;
void Start()
{
InvokeRepeating("Move",0,velocity);
x=0;y=step;
}
void Update()
{
if(Input.GetKeyDown(KeyCode.Space))
{
CancelInvoke();
InvokeRepeating("Move",0,velocity-0.2f);
}
if(Input.GetKeyUp(KeyCode.Space))
{
CancelInvoke();
InvokeRepeating("Move",0,velocity);
}
if(Input.GetKey(KeyCode.W)&&y!=-step)
{ gameObject.transform.localRotation=Quaternion.Euler(0,0,0);
x=0;y=step;
}
if(Input.GetKey(KeyCode.S)&&y!=step)
{
gameObject.tranform.localRotation=Quaternion.Euler(0,0,180);
x=0;y=-step;
}
if(Input.GetKey(KeyCode.A)&&x!=step)
{
gameObject.tranform.localRotation=Quaternion.Euler(0,0,90);
x=-step;y=0;
}
if(Input.GetKey(KeyCode.D)&&x!=-step)
{
gameObject.tranform.localRotation=Quaternion.Euler(0,0,-90);
x=step;y=0;
}
void Move()
{
headPos=gameObject.transform.localPosition;
gameObject.transform.localPosition=new Vector3(headPos.x+x,headPos.y+y)
}
private void OnTriggerEnter2D(Collider2D collision)
{
if(collision.gameObject.CompareTag("Food"))
{
Destroy(collision.gameObject);
FoodMaker.Instance.MakeFood();
}
}
碰撞器要小一圈
两个物体必须都要有2D碰撞器(注意碰撞器是否一样)
碰撞器的判断要放在蛇头的身上
isTrigger属性要打上勾,不会和别人碰撞,但是会记住谁撞的我,只勾上一个蛇头,别的不用勾了。
is Trigger 勾上后不会被其他碰撞器挡住,会检测碰撞
碰撞的两边只能有一个勾is Trigger
勾上 is Trigger的碰撞器称为触发器
用private void OnTriggerEnter2D来调用触发器函数
碰撞的两边只要有一个挂刚体就可以了,不用两边都挂
蛇头上挂刚体
给食物添加标签,和碰撞器。
在蛇头添加2D碰撞器,自己手动设置碰撞器 挂上刚体,要比图片小一点,istrigger选上。
给蛇头添加触发检测方法,销毁食物,
单例模式
static
get
invokerepeating(gameobject, delaytime, longtime)
food.transform.SetParent(foodHolder, false);
private static FoodMake _instance;
public static FoodMake Instance
{
get
{
return _instance;
}
}