创建食物 设置预制体
新建一个cube,设置它的长宽高为0.5,并将它旋转一下,使它看起来像立在地面上一样。
改名为Pick up,为它设置材质,因为食物要创建很多个,所以要为它创建预制体,新建一个prefabs文件夹,直接把Hierarchy窗口中的Pick up拖到刚刚创建的prefabs文件夹中,这样就为Pick up创建好了它的预制体。
当修改prefabs的时候,所有通过prefabs生成的游戏物体都会同步修改。
因为该物体旋转过,用它自身的坐标轴没办法在地面上平移,这时点击上方的按钮,从local变为global,变成世界坐标之后就可以平移复制的旋转过的物体了。
复制足够的食物,新建一个空物体,把刚刚建好的所有食物拖动到空物体下,实现归类。
编写食物旋转代码
点击Pick up预制体,点击Add Component,输入pickUp,点击new script->add,就生成了一个新脚本了,把它归类到script文件夹中。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class pickUp : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
transform.Rotate(new Vector3(0,1,0));
}
}
以上代码即可实现食物旋转效果。
碰撞检测
为pick up预制体增加一个tag名为pick up。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class player : MonoBehaviour
{
private Rigidbody rd;
// Start is called before the first frame update
void Start()
{
rd = GetComponent<Rigidbody>();
}
// Update is called once per frame
void Update()
{
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
rd.AddForce(new Vector3(h,0,v)*5);
}
void OnCollisionEnter(Collision collision)
{
if(collision.collider.tag=="pick up")
{
Destroy(collision.collider.gameObject);
}
}
}
获取碰撞到的游戏物体身上的collider组件,如果tag是pick up,那么销毁这个游戏物体,就可以实现小球吃食物的效果了,但是碰撞之后小球会出现一个小停顿,我们下次再说。