当前位置: 首页 > article >正文

unity3d入门教程九

unity3d入门教程九

  • 20.2播放音频
  • 20.3在代码中播放
  • 21.1延时调用
  • 21.2invoke API
  • 21.3消息调用
  • 22.1交互界面
  • 22.2添加canvas
  • 22.3canavas的位置
  • 22.4添加text

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这里给一个资源网站,可以部分免费下载,音乐和音效超多,支持检索
爱给网
https://www.aigei.com/music/

在unity显示为波形图,可以直接将音频拖入其中
在这里插入图片描述

以后会有专门的人员提供音乐等素材

我们一开始都是使用别人开发好的资源使用的

20.2播放音频

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

1 检查有没有设置音频资源

2 Play On Awake 是否勾选

3 Game窗口上的 Mute Audio 不要禁止
在这里插入图片描述

不要选中Mute Audio 。如果按下去,则为 Mute 禁音。可以自己试一下。

20.3在代码中播放

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

public class MyPiano : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButtonDown( 0 ))
        {
            // 判断:鼠标是否点中当前物体
            Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            mousePos.z = 0;
            float distance = (mousePos - transform.position).magnitude;
            if(distance < 2 )
            {
                // 取得 AudioSource 组件

                AudioSource audio = GetComponent<AudioSource>();
                audio.Play();

                //if(! audio.isPlaying)
                //{
                //    audio.Play();
                //}

//如果正在播放则停止,否则启动
                //if(audio.isPlaying)
                //{
                //    audio.Stop();
                //}
                //else
                //{
                //    audio.Play();
                //}
            }
        }
    }
}

在这里插入图片描述

另外一个api,一次性播放,新开一个播放,如射击游戏时的播放

多次点击,多次声音都会播出,产生叠加的效果

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

public class MyGun : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            mousePos.z = 0;
            float distance = (mousePos - transform.position).magnitude;
            if (distance < 2)
            {                
                AudioSource audio = GetComponent<AudioSource>();
                audio.PlayOneShot(audio.clip);
                // audio.Play();
            }
        }
    }
}

21.1延时调用

在这里插入图片描述
在这里插入图片描述

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

/**  Unity游戏开发入门教程
 * 
 *   作者: 邵发
 *   
 *   官网: http://afanihao.cn/game/index.html
 * 
 */

public class MyGirl : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        if(Input.GetMouseButtonDown(0))
        {
            Debug.Log("22 该去上班了 , time=" + Time.time);

            // Response();

            Invoke("Response", 3);
        }
    }

    // 应答
    void Response()
    {
        Debug.Log("知道啦!  time=" + Time.time);
    }
}

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

虽然自己可以计时,延迟时间再调用函数,但直接使用已有的延时函数就比较方便了

21.2invoke API

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

21.3消息调用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

MyGame 

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

/** Unity游戏开发入门教程
 * 
 * 作者 : 邵发
 * 
 */

public class MyGame : MonoBehaviour
{
    // 
    public int score = 0;

    // Start is called before the first frame update
    void Start()
    {
        
    }

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

    public void AddScore(int value)
    {
        this.score += value;
        Debug.Log("得分+1 ,当前总分=" + score);

        // ... 更新UI显示 ...
    }
}




MyPet 

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

/** Unity游戏开发入门教程
 * 
 * 作者 邵发
 * 
 * 官网 http://afanihao.cn/game/index.html
 * 
 */


public class MyPet : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        // 判断:鼠标是否点中当前物体
        if(Input.GetMouseButtonDown(0))
        {
            Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            mousePos.z = 0;
            float distance = (mousePos - transform.position).magnitude;
            if (distance < 2)
            {
                // 打中了

                // GameObject main = GameObject.Find("游戏主控");
                //MyGame myGame = main.GetComponent<MyGame>();
                //myGame.AddScore(1);

                GameObject main = GameObject.Find("游戏主控");

                // 在游戏主控节点上,遍历所有的脚本组件,看哪个脚本有AddScore方法,并执行这个方法
                main.SendMessage("AddScore", 1);
            }
        }
        
    }
}

22.1交互界面

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

如上,按钮控件等不属于后面的游戏空间,无论其如何变化,按钮等操作都不会变化
在这里插入图片描述
在这里插入图片描述

22.2添加canvas

在这里插入图片描述
在这里插入图片描述

1 添加 Canvas
在 Hierarchy窗口,右键 GameObject | UI | Canvas
在这里插入图片描述

同时添加一个 Canvas ,和一个 EventSystem 事件系统管理器

2 指定 Canvas 的显式方式
选中 Canvas 节点,
在这里插入图片描述

Render Mode : 设为 Screen Space – Camera
Render Camera : 指向 Main Camera
Plane Distance :显示平面与摄像机的距离 ,设为 5
此时,Canvas 覆盖整个屏幕空间

3 添加 Text 文件控件
注意:所有 UGUI元素,都应该放在 Canvas 节点下面

右键选中 Canvas ,添加一个 Text 子节点 :
在这里插入图片描述

设置一下 Text 的属性,
在这里插入图片描述

Best Fit :自动调整字体大小,适应 Rect矩形框
Color : 文本的颜色

颜色选择时先外圈选择大致范围,再内圈进行精细调整

22.3canavas的位置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

可以在3D的效果下观察,游戏对象和canavas是不在同一平面的

22.4添加text

在这里插入图片描述

可新建目录font在此加入字体资源(),将字体资源拖入可以charactor可以改变字体的形式
在这里插入图片描述


http://www.kler.cn/a/314864.html

相关文章:

  • 【韩老师零基础30天学会Java 】07章 面向对象编程(基础)
  • 人工智能的前沿研究方向与未来发展趋势
  • GitLab实现 HTTP 访问和 SMTP 邮件发送
  • window下安装rust 及 vscode配置
  • 【数理哲学】决定论与混沌理论
  • Flink API 的层次结构
  • 【Java】全面理解Java8特性
  • SpinalHDL之结构(三)
  • JavaScript高级—— js 是单线程运行的
  • 无人机+自组网:中继通信增强技术详解
  • 论文解读《MmAP : Multi-Modal Alignment Prompt for Cross-Domain Multi-Task Learning》
  • C#开发基础之单例模式下的集合数据,解决并发访问读写冲突的问题
  • PostgreSQL常用表操作SQL脚本整理
  • java重点学习-JVM类加载器+垃圾回收
  • 从一到无穷大 #35 Velox Parquet Reader 能力边界
  • 计算机基础知识笔记
  • 基于协同过滤+python+django+vue的音乐推荐系统
  • 鸿蒙Harmony-Next 徒手撸一个日历控件
  • Qt中样式表常用的属性名称定义
  • 利用Python与Ansible实现高效网络配置管理
  • 【Harmony】轮播图特效,持续更新中。。。。
  • Ubuntu24.04 安装ssh开启22端口及允许root用户远程登录
  • 【Flink实战】flink消费http数据并将数组展开多行
  • linux-虚拟化与容器化-虚拟化
  • 无法删除选定的端口,不支持请求【笔记】
  • Java流程控制语句——跳转语句详解:break 与 continue 有什么区别?