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

小球

先搭一个场地Plane,命名Map ,通过将四个墙的立方体归入Map,可以同时控制大小。在这里插入图片描述
分别赋予场地和墙的材质
在这里插入图片描述
创造一个小球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<Rigidbody>();//获取当前组件所在对象上的其他组件
    }

    // 逻辑处理和按键处理函数,每帧执行一次
    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里面操作这个数值(前提这个字段必须是public ):
在这里插入图片描述

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

 //刚开始碰撞执行的函数
    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<GameObject>("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()
    {
        
    }
}

效果如下:
在这里插入图片描述

资源管理器的整理:
在这里插入图片描述

  • 3
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值