Unity 3D开发-C#脚本语言的一些基础用法
Unity 中C#语言的一些基础用法
|
本文提供全流程,中文翻译。 Chinar坚持将简单的生活方式,带给世人! (拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) |
1
Lerp —— 线性插值
Mathf —— 数学运算函数库
.Abs —— 函数,返回的是一个 float 值,返回的是一个绝对值
//插值运算
//主相机背景色 = 颜色,插值(当前色,目标色,渐变速度)
_mainCamera.backgroundColor = Color.Lerp(_mainCamera.backgroundColor, Color.green, _animationSpeed * Time.deltaTime);
//主相机的正交尺寸 = 运算,插值(当前尺寸,目标尺寸,渐变速度)
_mainCamera.orthographicSize = Mathf.Lerp(_mainCamera.orthographicSize, 3.5f, _animationSpeed * Time.deltaTime);
//判断是否达到目标值 运算,计算向量(当前值 减去 3.5f )< 0.01f的话 跳出
if (Mathf.Abs(_mainCamera.orthographicSize - 3.5f) < 0.01f) break;
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" style="position: relative;">
Chinar
END
本博客为非营利性个人原创,除部分有明确署名的作品外,所刊登的所有作品的著作权均为本人所拥有,本人保留所有法定权利。违者必究
对于需要复制、转载、链接和传播博客文章或内容的,请及时和本博主进行联系,留言,Email: ichinar@icloud.com
对于经本博主明确授权和许可使用文章及内容的,使用时请注明文章或内容出处并注明网址
Unity 3D开发-C#脚本语言的一些基础用法的更多相关文章
- unity 3d开发的大型网络游戏
unity 3d开发的大型网络游戏 一.总结 1.unity的官网上面应该有游戏列表 2.unity3D是很好的3d游戏引擎,也支持2d,也能做很多画面精良的3A级游戏 3.范围:电脑游戏,手机游戏, ...
- 使用 Unity 3D 开发游戏的架构设计难点
Unity 3D 引擎对于开发者来说,入手非常快,因为它采用的是 C# 作为开发语言,这也大大降低了开发者的门槛.但凡只要懂一门编程语言的人都能使用 Unity 3D 引擎开发,另外 Unity 3D ...
- Unity 3D 开发 —— 脚本编程
Unity 相关资源 Unity 官网 :http://www.unity3D.com Unity 论坛 : http://forum.unity3d.com/forum.php Unity 问答 : ...
- R语言 plot()函数 基础用法
plot(x=x轴数据,y=y轴数据,main="标题",sub="子标题",type="线型",xlab="x轴名称" ...
- Unity 3D入门简介
最近在刚开始学习Unity 3D,在这里记录一下学习心得和学习笔记,边学边写,可能会比较零散.好了,废话不多说,今天从Unity 3D入门写起,主要简要介绍一下Unity 3D的和一些学习资料.以下如 ...
- [Unity 3D] Unity 3D 性能优化 (一)
听到过很多用Unity 3D开发游戏的程序员抱怨引擎效率太低,资源占用太高,包括我自己在以往项目的开发中也头疼过.最近终于有了空闲,可以仔细的研究一下该如何优化Unity 3D下的游戏性能.其实国外有 ...
- 用PHP写一个最简单的解释器Part4(写一个最简单的脚本语言)
好吧!我承认我想标题党了.大家对解释器的吸引,绝对没有自己动手写一个脚本语言更有吸引力.不过如果看到标题过来的,可能也是 我承认,之前收藏的减肥视频,我都是这样对待他们的. 不过我还是相信很多程序猿o ...
- 1.使用脚本控制模型的移动 --《Unity 3D 游戏开发》笔记
由于最新版的unity已经不支持javascript语言啦,本人又是个C#小白,所以记录一下自己写的脚本. first 创建一个模型,放在平面上,调整下角度,就像这样: 然后写一个脚本来控制模型移动: ...
- Unity 3d C#和Javascript脚本互相调用 解决方案(非原创、整理资料,并经过实践得来)
Unity 3d C#和Javascript脚本互相调用 解决方案 1.背景知识 脚本的编译过程分四步: 1. 编译所有 ”Standard Assets”, “Pro Standard Assets ...
随机推荐
- visudo使用笔记
目录前言一.介绍二.配置文件简介三.实战配置 前言: su 的确为管理带来方便,通过切换到root下,能完成所有系统管理工具,只要把root的密码交给任何一个普通用户,他都能切换到root来完成 ...
- Linux 后台进程管理和就几个“Ctrl+”命令 【转载】
一.后台进程管理命令 fg.bg.jobs.&.ctrl + z.ctrl + c.ctrl + \.ctrl + d1. &加在一个命令的最后,可以把这个命令放到后台执行 ,如gft ...
- Python -- Json 数据编码及解析
Python -- Json 数据编码及解析 Json 简单介绍 JSON: JavaScript Object Notation(JavaScript 对象表示法) JSON 是存储和交换文本 ...
- WebForm页面数据绑定总结
总述 绑定语法 第一种: <%= str%> 例子:'<%= DateTime.Now %>'适用条件:用于非服务器端控件的属性第二种: <%= str%> 从出现 ...
- Activiti工作流笔记(3)
Activiti工作流的流程部署和删除流程部署 流程部署代码: /** * 部署流程 */ public class ActivitiTest { RepositoryService reposito ...
- javaScript 删除确认实现方法小结
第一种: <a href="javascript:if(confirm('确认删除吗?'))window.location='del.php'">删除</a> ...
- ActiveMQ (一):安装启动及测试
1. 预备知识 1.1 JMS JMS(Java Messaging Service)是Java平台上有关面向消息中间件(MOM)的技术规范.<百科> 1.2 JMX JMX(Java M ...
- C++实现String容器的基本功能
本文只实现String类的构造函数.析构函数.赋值构造函数和赋值函数,其他操作不再详述,一般的笔试面试基本上也只会要求实现这四个函数的功能. #include <iostream> usi ...
- 面试题21:包含min函数的栈
题目:定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素.要求函数min.push以及pop的时间复杂度都是O(1). 分析:google的一道面试题.我看到这道题目时,第一反应就是每次p ...
- 栈(stack),C++模板实现
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...