Unity游戏开发常用的一些函数用法
Unity游戏开发常用函数
本文提供全流程,中文翻译。 Chinar 坚持将简单的生活方式,带给世人! (拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) |
Chinar —— 心分享、心创新! 助理快速了解 Unity 开发中常用的一些基础函数 为新手节省宝贵的时间,避免采坑! |
Chinar 教程效果:
1
RotateAround —— 围绕某个点/对象旋转
transform.RotateAround() —— 该函数多个重载
根据形参的不同,可使当前对象,绕某个游戏对象旋转 / 某个点
using UnityEngine;
/// <summary>
/// 脚本挂载物体上,即可绕目标物体 CylinderTransform 进行旋转
/// </summary>
public class ChinarRotate : MonoBehaviour
{
public Transform TargetTransform; //目标坐标
public float Anglespeed = 5; //旋转角度
void Update()
{
//transform.RotateAround(Vector3.zero, new Vector3(0, 1, 0), 3f);//围绕零点、某个轴旋转——(点坐标,轴,速度)
transform.RotateAround(TargetTransform.position, TargetTransform.up, Anglespeed); //围绕物体旋转(目标物体,轴,速度)
}
}
Chinar 效果:
2
LoadScene —— 载入场景
scenemanagement —— 场景管理器
SceneManager —— 场景管理
LoadScene —— 加载场景
.GetActiveScene() —— 获取激活的场景
buildIndex —— 场景对应下标
using UnityEngine;
using UnityEngine.SceneManagement;//引用命名空间
/// <summary>
/// 测试脚本
/// </summary>
public class Test : MonoBehaviour
{
void Start()
{
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex); //重载当前场景
}
}
3
Gizmos —— 小物件
注意:图片必须是在 Gizmos 文件夹下,需要在代码中“文件名.格式”写出格式
OnDrawGizmos() —— 函数,是 MonoBehaviour 的生命周期函数 ,只在编辑状态下,每帧都会运行
Gizmos.DrawIcon —— 在场景中某个位置绘制一张图片
Gizmos.DrawCube —— 在场景中某个位置绘制一个Cube
Debug.DrawLine —— 画一条线,这个方法也可在正常编译代码时打印用
/// <summary>
/// 编辑器模式工作,每帧都会运行
/// </summary>
void OnDrawGizmos()
{
Gizmos.DrawCube(transform.position, new Vector3(1, 1, 1)); //在Scene视窗下绘制一个Cube (位置,缩放比例)
Gizmos.DrawIcon(transform.position, "Icon.png", true); //在Scene视窗下绘制一个图片(位置,名称.格式 ,是否允许扩展)
Debug.DrawLine(transform.position, new Vector3(0, 10, 0), Color.green); //划线(开始位置,方向,颜色)
}
4
Normalize —— 向量
Vector3.Distance(transform.position,RightPos.position)>MaxDis
三维向量.距离(当前位置,目标位置) > 最大距离
if (Vector3.Distance(transform.position,RightPos.position)>MaxDis)//如果大于设定距离MaxDis
{
Vector3 pos = (transform.position - RightPos.position).normalized;//单位化向量,求得方向
pos *= MaxDis;//给 pos 赋值,乘等于MaxDis
transform.position = pos + RightPos.position;//当前位置赋值:最大距离+起点坐标点的位置
}
5
RelativeVelocity —— 相对速度
collision.relativeVelocity.magnitude > MaxSpeed
碰撞物体的.相对速度.大小 > 最大速度
/// <summary>
/// 触发检测
/// </summary>
/// <param name="collision"></param>
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.relativeVelocity.magnitude > MaxSpeed) //如果相对速度.大小>最大速度
{
Destroy(gameObject); //直接死亡
}
else if (collision.relativeVelocity.magnitude > MinSpeed && collision.relativeVelocity.magnitude < MaxSpeed) //相对速度在4-8之间
{
Render.sprite = HurtSprite; //更换图片,受伤
}
}
6
AudioSource —— 音频源
AudioSource.PlayClipAtPoint(clip, transform.position);
音频源.在指定位置播放裁剪音效(音效,位置)
public AudioClip HurtClip; //受伤音效
void Start()
{
AudioPlay(HurtClip);//播放受伤音效
}
/// <summary>
/// 播放音效
/// </summary>
/// <param name="clip"></param>
public void AudioPlay(AudioClip clip)
{
AudioSource.PlayClipAtPoint(clip, transform.position); //静态方法:播放音效
}
7
CameraFollow —— 相机跟随,插值
Mathf.Clamp(posX, 0, 18)
数学函数.范围(限定目标,0,到 18之间)
/// <summary>
/// 相机在指定范围跟随
/// </summary>
private void CameraFollow()
{
//记录Eva的横坐标
float posX = transform.position.x;
//相机当前位置 = 插值(当前相机位置,目标位置(Mathf.Clamp-限定范围:(限定posX,0,18之间))
Camera.main.transform.position = Vector3.Lerp(Camera.main.transform.position, new Vector3(Mathf.Clamp(posX, 0, 18), Camera.main.transform.position.y, Camera.main.transform.position.z), SmoothFlo * Time.deltaTime);
}
8
String Split —— 字符串分割
例如一堆物体名字分别为:
Test-1
Test-2
Test-3
Test-4
Test-5
Split(‘-‘)函数:返回值为一个String数组
用-拆分,输出的值为: 对应数组中:
String[0]:对应Test
String[1]:对应1,2,3,4,5
SkinnedMeshRenderer[] parts = sourceTransform.GetComponentsInChildren<SkinnedMeshRenderer>(); //获取所有带有siki的物体位置信息,存入parts
foreach (var part in parts)//遍历蒙皮网格数组中的每一个元素
{
string[] nameStrings = part.name.Split('-'); //记录名字,用-拆分,输出的值为: “Test-1”----对应数组中------0:"Test" 1:"1"
if (!data.ContainsKey(nameStrings[0])) //如果字典GirlData中不包含 第一个资源预设下的子物体的名字
{
GameObject partObj = new GameObject(); //实例化一个空物体
partObj.name = nameStrings[0]; //给物体改名
partObj.transform.parent = target.transform; //设置父物体
mydic.Add(nameStrings[0], partObj.AddComponent<SkinnedMeshRenderer>()); //把骨骼target身上的骨骼信息存起来
data.Add(nameStrings[0], new Dictionary<string, SkinnedMeshRenderer>()); //存到字典中
}
data[nameStrings[0]].Add(nameStrings[1], part); //存储所有的skin信息到字典
}
9
Toggle/Button|AddListener —— Toggle/按钮添加监听
需要引用命名空间:using UnityEngine.UI;
private Toggle MyToggle;//自身的Toggle组件
/// <summary>
/// 初始化方法
/// </summary>
void Start()
{
if (gameObject.name == "SaveButton") //如果按钮名为:SaveButton
{
Button but = GetComponent<Button>();
but.onClick.AddListener(LoadScene); //给当前物体上的Button组件添加监听事件
return; //不在向下执行
}
MyToggle = GetComponent<Toggle>();
MyToggle.onValueChanged.AddListener(OnValueChangePerson); //绑定Toggle事件
//MyToggle.onValueChanged.AddListener((bool value) => OnValueChangePerson(value)); //lambda表达式转换为委托类型
}
/// <summary>
/// Toggle方法,改变
/// </summary>
/// <param name="isChange"></param>
public void OnValueChangePerson(bool isChange)
{
if (isChange)
{
Debug.Log("开关状态 " + (isChange ? "On" : "Off"));
}
}
/// <summary>
/// 加载其他场景
/// </summary>
public void LoadScene()
{
SceneManager.LoadScene(1);
}
支持
May Be —— 搞开发,总有一天要做的事!
拥有自己的服务器,无需再找攻略! Chinar 提供一站式教程,闭眼式创建! 为新手节省宝贵时间,避免采坑! |
先点击领取 —— 阿里全产品优惠卷 (享受最低优惠)
1 —— 云服务器超全购买流程 (新手必备!)
2 —— 阿里ECS云服务器自定义配置 - 购买教程(新手必备!)
3—— Windows 服务器配置、运行、建站一条龙 !
4 —— Linux 服务器配置、运行、建站一条龙 !
" role="presentation">
技术交流群:806091680 ! Chinar 欢迎你的加入
END
本博客为非营利性个人原创,除部分有明确署名的作品外,所刊登的所有作品的著作权均为本人所拥有,本人保留所有法定权利。违者必究
对于需要复制、转载、链接和传播博客文章或内容的,请及时和本博主进行联系,留言,Email: ichinar@icloud.com
对于经本博主明确授权和许可使用文章及内容的,使用时请注明文章或内容出处并注明网址
Unity游戏开发常用的一些函数用法的更多相关文章
- 2017年Unity游戏开发视频教程(入门到精通)
本文是我发布的一个Unity游戏开发的学习目录,以后我会持续发布一系列的游戏开发教程,都会更新在这个页面上,适合人群有下面的几种: 想要做独立游戏的人 想要找游戏开发相关工作的人 对游戏开发感兴趣的人 ...
- 【Unity游戏开发】浅谈Lua和C#中的闭包
一.前言 目前在Unity游戏开发中,比较流行的两种语言就是Lua和C#.通常的做法是:C#做些核心的功能和接口供Lua调用,Lua主要做些UI模块和一些业务逻辑.这样既能在保持一定的游戏运行效率的同 ...
- 【Unity游戏开发】记一次解决 LuaFunction has been disposed 的bug的过程
一.引子 RT,本篇博客记录的是马三的一次解决 LuaFunction has been disposed 的bug的全过程,事情还要从马三的自研框架 ColaFrameWork 说起.最近,马三在业 ...
- 【Unity游戏开发】用C#和Lua实现Unity中的事件分发机制EventDispatcher
一.简介 最近马三换了一家大公司工作,公司制度规范了一些,因此平时的业余时间多了不少.但是人却懒了下来,最近这一个月都没怎么研究新技术,博客写得也是拖拖拉拉,周六周天就躺尸在家看帖子.看小说,要么就是 ...
- Unity 游戏开发技巧集锦之使用cookie类型的纹理模拟云层的移动
Unity 游戏开发技巧集锦之使用cookie类型的纹理模拟云层的移动 使用cookie类型的纹理模拟云层的移动 现实生活中,当阳光直射大地,而天空中又有很多云时,云层的影子总是会投射在大地上,风吹着 ...
- Unity 游戏开发技巧集锦之制作一个望远镜与查看器摄像机
Unity 游戏开发技巧集锦之制作一个望远镜与查看器摄像机 Unity中制作一个望远镜 本节制作的望远镜,在鼠标左键按下时,看到的视图会变大:当不再按下的时候,会慢慢缩小成原来的视图.游戏中时常出现的 ...
- 喵的Unity游戏开发之路 - 在球体上行走
很多童鞋没有系统的Unity3D游戏开发基础,也不知道从何开始学.为此我们精选了一套国外优秀的Unity3D游戏开发教程,翻译整理后放送给大家,教您从零开始一步一步掌握Unity3D游戏开发. 本文不 ...
- 关于Unity游戏开发方向找工作方面的一些个人看法
这是个老生常谈,却又是谁绕不过去的话题,而对于每个人来说,所遇到的情况又不尽相同,别人的求职方式和路线不一定适合你,即使是背景很相似的两个人,有时候机遇也很重要. 我本人的工作经验只有一年,就业方式 ...
- C# Unity游戏开发——Excel中的数据是如何到游戏中的 (二)
本帖是延续的:C# Unity游戏开发——Excel中的数据是如何到游戏中的 (一) 上个帖子主要是讲了如何读取Excel,本帖主要是讲述读取的Excel数据是如何序列化成二进制的,考虑到现在在手游中 ...
随机推荐
- 小程序BindTap快速连续点击页面跳转多次
原因: 手机端点击Tap基础事件解决300ms延迟 解决办法: success 里面加一个延迟300ms能解决 setTimeout goRob(e) { const that = this retu ...
- 微信小程序页面无法跳转
推荐网址:https://www.jianshu.com/p/e56b55334585 1.无法跳转原因分析 要跳转的路径在app.js里未注册过或路径写错 要跳转的路径是否位于TabBar中 页 ...
- Python之简单的用户登录和注册
# -*- coding: utf-8 -*- # @Time : 2018/7/26 20:16 # @Author : Adam # @File : exam2.py # @Project: ke ...
- pre强制 自动换行
转自:http://www.16sucai.com/2010/10/941.html <pre> 元素可定义预格式化的文本.被包围在 pre 元素中的文本通常会保留空格和换行符.而文本也会 ...
- zabbix3.4.7主动模式监控日志(多关键字)
日志监控原理 1.Zabbix Server和Zabbix Agent会追踪日志文件的大小和最后修改时间,并且分别记录在字节计数器和最新的时间计数器中. 2.Agent会从上次读取日志的地方开始读取日 ...
- 【内存泄漏】 C/C++内存泄漏及其检测工具
对于一个c/c++程序员来说,内存泄漏是一个常见的也是令人头疼的问题.已经有许多技术被研究出来以应对这个问题,比如 Smart Pointer,Garbage Collection等.Smart Po ...
- Linux第六周作业
一 实验过程 1 先进入LinuxKernel环境下,更新menu代码到最新版,用到的命令为rm menu -rf //强制删除当前menu,git clone http://git.shiyanlo ...
- 【例子】log4j.properties例子讲解
log4j.rootLogger=info, ServerDailyRollingFile, stdout log4j.appender.ServerDailyRollingFile=org.apac ...
- Win10系列:JavaScript综合实例1
上面几个小节讲解了使用HTML5和JavaScript语言开发Windows 应用商店应用时会用到的一些技术,本小节将前面介绍的知识融合在一起创建一个菜谱应用程序,帮助读者更进一步地理解和掌握这些知识 ...
- unity中实现三个Logo图片进行若隐若现的切换并有延时切换图片的效果
public GameObject canvas; private Transform logoParent; private Transform Logo_logo; //logo一 private ...