【Unity基础】day1整理 -----小球吃金币

小球

先搭一个场地Plane,命名Map ,通过将四个墙的立方体归入Map,可以同时控制大小。【Unity基础】day1整理 -----小球吃金币_第1张图片
分别赋予场地和墙的材质
【Unity基础】day1整理 -----小球吃金币_第2张图片
创造一个小球Player 赋予材质和刚体,因为要实现键盘操作控制小球,因此需要写脚本挂载到Player上。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// 所有能够挂载到游戏对象的组件都要继承 MonoBehaviour 
// 文件名和类名保持一致,如果不一致就不能挂载在上去

public class PlayerController : MonoBehaviour
{
    public float speed;
    //刚体组件,作用:添加重力效果
    Rigidbody rig;
    //public 类型的字段大部分都是可以序列化(保存到本地)

    // 资源初始化函数,只执行一次 , 类似构造函数的功能
    void Start()
    {
        //推荐使用这样赋值
        rig = GetComponent();//获取当前组件所在对象上的其他组件
    }

    // 逻辑处理和按键处理函数,每帧执行一次
    void FixedUpdate() //用来处理物理相关函数
    {
        //通过wasd 控制角色移动
        float h = Input.GetAxis("Horizontal");//获取水平按键轴值*(-1~1
        float v = Input.GetAxis("Vertical");

        /* print(h);
         Debug.Log("日志信息");
         Debug.LogError("错误信息");
         Debug.LogWarning("警告信息");*/

        //通过刚体组件给角色添加一个力,使其移动

        if (rig)//判断rig是否为空
        {
            rig.AddForce(new Vector3(h, 0, v) * speed);
        }
        //按下空格键之后,
        if (Input.GetKeyDown(KeyCode.Space))
        {
            rig.AddForce(Vector3.up * speed);
        }
    }
}

金币

由于后面要不断地创建新的金币, 因此直接将金币的游戏对象放入预设体中, 然后创建一个空的GameObject管理已经创建的金币。
在这里插入图片描述
(Resources文件夹的名字固定不可更改)

我们需要让小球绕着世界坐标Y轴自转 ,创建一个Coin的脚本,在里面定义旋转速度:
【Unity基础】day1整理 -----小球吃金币_第3张图片
可以在Unity里面操作这个数值(前提这个字段必须是public ):
【Unity基础】day1整理 -----小球吃金币_第4张图片

当小球触碰到金币时 , 金币会消失:
此时有两种方式:
碰撞检测

 //刚开始碰撞执行的函数
    private void OnCollisionEnter(Collision collision)
    {
        //  Destroy(this);//销毁当前脚本对象
        Destroy(this.gameObject); //销毁当前脚本挂载的组件对应的游戏对象
    }
    //离开碰撞执行的函数
    private void OnCollisionExit(Collision collision)
    {

    }
    //待在碰撞器里面执行的函数
    private void OnCollisionStay(Collision collision)
    {

    }

触发检测

 private void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Player"))  //只有跟小球触碰才销毁
        {
            Destroy(this.gameObject);
        }

    }
    private void OnTriggerExit(Collider other)
    {

    }

    private void OnTriggerStay(Collider other)
    {

    }

金币脚本代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Coin : MonoBehaviour
{
    // Start is called before the first frame update
    public float rotateSpeed;//金币每秒钟旋转速度
    void Start()
    {
        //给金币一个随机旋转角度
        //Random是个随机类
        rotateSpeed = Random.Range(60, 360);
    }

    // Update is called once per frame
    void Update()
    {
        //Time类是时间控制类 ,deltaTime是每两帧之间的时间间隔
        transform.Rotate(Vector3.up * rotateSpeed * Time.deltaTime, Space.World);//绕着Y轴 
    }
    private void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Player"))  //只有跟小球触碰才销毁
        {
            Destroy(this.gameObject);
        }

    }
}

之后通过ItemManager(也就管理所有金币的游戏对象)的脚本生成金币

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ItemManager : MonoBehaviour
{
    //给预设体赋值2种方式:
        /*
        1 设定public变量,在属性面板直接拖拽赋值
        2 通过资源管理器加载赋值 ,Resources文件夹(名字固定)
         */
    GameObject goCoinPrefab;//金币预设体对象
    // Start is called before the first frame update
    void Start()
    {
        goCoinPrefab = Resources.Load("Prefabs/Coin");  //通过资源管理器加载预设体对象,只是在内存中没有实例化引擎
        for (int i = 0; i < 10; i++)
        {
        GameObject goCoin = Instantiate(goCoinPrefab);//创建实例对象(克隆函数),生成到场景中
        goCoin.transform.position = new Vector3(i, 0.74f, 0); //对象属性赋值
        goCoin.name = "coin" + i;
        goCoin.transform.parent = this.transform;
        }
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

效果如下:
【Unity基础】day1整理 -----小球吃金币_第5张图片

资源管理器的整理:
【Unity基础】day1整理 -----小球吃金币_第6张图片

你可能感兴趣的:(unity)