Unity 基础常用的脚本(一)

article/2025/10/5 4:42:47

1.获取相机射线

var ray = Camera.main.ScreenPointToRay(Input.mousePosition);
//GameObject.CreatePrimitive(PrimitiveType.Cube).transform.position = ray.GetPoint(10.0f);
transform.LookAt(ray.GetPoint(10.0f));

2.AddForce和velocity有什么区别?

AddForce是施加一个力,这样运动是靠力产生的加速度,然后就加速前进。
直接使用Velocity,速度很平稳,移动为恒定值,相当于直接给设定了一个恒定的速度。

3.检测哪个按键被按下

public void DetectPressedKeyOrButton()
{foreach (KeyCode kcode in Enum.GetValues(typeof(KeyCode))){if (Input.GetKeyDown(kcode)){Debug.Log("KeyCode down: " + kcode);}}
}

4.在控制面板上查看脚本的私有变量
选中你的脚本文件,然后右键点击Inspector,默认是Normal改成Debug
这里写图片描述
5.锁定检视面板

当需要拖拽对象至检视面板时,常常会因为操作原因导致检视面板的内容已经改变了。这时可以点击检视面板右上方的锁图标,锁定检视面板,这样不论其它视图如何切换,检视面板都会显示固定内容

6.若脚本出错导致不能进入运行模式,不妨这样试一试

如果脚本出现错误,Unity编辑器会因为检查到出错而无法进入运行模式,这时可以在项目视图中新建文件夹WebplayerTemplates,然后将出错的脚本拖入此文件夹下,所有位于该文件夹下的文件都会被识别为一般文件从而不会当作脚本被编译,这样就可以运行游戏了。
我喜欢这个。也蛮有用的。

7.在固定的事件调用某个函数(这里拿Abc函数为例子)

using UnityEngine;  
using System.Collections;  public class example : MonoBehaviour {  public Rigidbody projectile;  void Abc() {  Rigidbody instance = Instantiate(projectile);  instance.velocity = Random.insideUnitSphere * 5;  }  public void Awake() {  Invoke("Abc", 2);  }  
}  

8.每隔一定时间调用一次methodName函数

using UnityEngine;  
using System.Collections;  public class example : MonoBehaviour {  public Rigidbody projectile;  void LaunchProjectile() {  Rigidbody instance = Instantiate(projectile);  instance.velocity = Random.insideUnitSphere * 5;  }  public void Awake() {  InvokeRepeating("LaunchProjectile", 2, 0.3F);  //2秒后,没0.3f调用一次  }  
}  

9.单例模式的使用

using UnityEngine;
using System.Collections;public class ModelLocator {public string myString;private static ModelLocator instance;public static ModelLocator getInstance{get{if(instance==null){instance=new ModelLocator();}return instance;}}
}

10.脚本的声明周期

Awake:在游戏运行时调用,用于初始化。
Start : 只在游戏开始时执行一次,在Awake()函数后执行;
Update:在游戏每一帧都执行一次,在Start()函数后执行;
LateUpdate:同Update,只是它会在Update()函数执行后再执行;
FixedUpdate:当游戏中引入刚体系统,使用适配的方式同步物理时钟,可以让动力学更精确的计算;
OnGUI:绘制游戏界面的函数,因为每一帧执行多次,所以一些时间相关的函数要尽量避免直接在其内部使用。
OnMouseOver:鼠标停留在物体上时执行该函数的内容。
OnMouseEnter:鼠标进入物体范围时执行该函数的内容。和OnMouseOver不同,该函数只执行一次。
OnMouseExit:鼠标离开物体范围时执行该函数的内容。
OnMouseDown:鼠标按下时执行该函数的内容。
OnMouseUp:当鼠标释放时执行该函数的内容。
OnMouseDrag:按住鼠标拖动时执行该函数的内容。

11.Random类(随机数

float a=Random.value;  
int b=Random.Range(0,100)    包括最大和最小  
float c=Random.Range(0.0f,1.0f);   包括最小但不包括最大

12.Yield Return

//Yield语句是一种特殊类型的Return(返回)语句,它可以确保函数在下一次被执行时,不是从头开始,而是从Yield语句处开始。  
//可以实现将一段程序延迟执行或者将其各个部分分布在一个时间段内连续执行
void Start () {print("Start开始"); StartCoroutine("Do"); print("Do调用后"); 
}  
IEnumerator Do(){ print("Do开始");  yield return  new WaitForSeconds(3.0f);  print("暂停3秒后"); 
}   

运行结果为:Start开始–》Do开始—》Do调用后—》暂停3秒后

13.旋转和移动

transform.Rotate(new Vector3(x,y,z)); 
transform.Translate(new Vector3(x,y,z));

14.判断两个物体之间的距离

Vector3.Distance( position1,position2);
//position1 和position2是需要判断的两个物体transform的position,distance是距离

15.Vector3的使用

//vector3.Project求某个向量在某个方向的投影向量(向量,方向)
float speed = Vector3.Project(agent.desiredVelocity, transform.forward).magnitude;
//Vector3.Angle求两个向量的夹角
float angularSpeed = Vector3.Angle(agent.desiredVelocity, transform.forward);
//角度*mathf.deg2rad 角度转为弧度
//弧度*mathf.rad2deg 弧度转为角度
angular *= Mathf.Deg2Rad
//Vector3.Cross 求两个向量的法向量
Vector3 normal = Vector3.Cross(transform.forward, agent.desiredVelocity);

http://chatgpt.dhexx.cn/article/Qr0J1RYu.shtml

相关文章

NS版暗黑破坏神3金手指开发教程(10)

上一节,我们讲解了一击必杀,技能冷却无CD等人物战斗时用到的金手指制作,这一节,将会讲解人物升级相关的功能以及宝石和打孔器等材料数量的锁定功能制作 1. 在游戏中特别是在游戏后期,我们会发现人物随着等级的提高&am…

Unity脚本复习

1.在Project面板中显示和创建的每一个脚本其实都是一个类,当我们把脚本挂载到Hierarchy层级中的游戏物体时,其实我们就实现了将脚本类实例化为一个脚本组件(对象)的过程 2.在游戏运行时,场景加载,游戏对象…

零基础游戏开发笔记11——Unity脚本介绍、脚本初始阶段

1.语法结构: 2.编译过程: CLS->Mono RunTime->机器码 3.关于修改和创建脚本: 创建脚本: 一般我们会在项目中添加scripts文件夹,并在此文件夹中编写脚本,当然这些脚本可以根据个人喜好分配到不同类…

NS版暗黑破坏神3金手指开发教程(4)

上一节,我们讲了基于公式明文的金手指制作方法,这一节,我们将进阶到更高级的基于程序修改的金手指制作方法,从现在开始,对读者的技术水平有了一个更高的要求,读者最好有汇编和C/C高级语言的一些基础&#x…

NS版暗黑破坏神3金手指开发教程(17)

终于到最后一节了,在这一节中我们将讲解如何利用hack制作出丰富多彩的世界,开个玩笑,其实是因为由于暗黑三的AMIIBO功能很有意思,不但可以用普通手办在城外召唤出一组精英怪,而且在城内用专用哥布林手办还能开启宝藏秘…

NS版暗黑破坏神3金手指开发教程(5)

上一节,我们学会了通过修改程序指令的方式制作金手指,这一节,将引出真正的高手级金手指开发方法 除了必掉太古这个极其护肝和有用的金手指外,我们能想到的另一个金手指就是人物背包里的素材,包括金钱,宝石…

暗黑破坏神2 符文自动合成--按键精灵源码

最近玩了一个暗黑破坏神mod服 发现2个符文可以合成一个大号符文.不过手动合成实在太费劲了.于是乎我就写了一个自动合成的脚本. 需要用到图灵插件,不知道的自己百度一下. 还是挺有意思的这类脚本.还需要有一个自己的算法. 源码如下. Function 移动鼠标点左键(x1, y1)MoveT…

Unity脚本(二)

视频教程:https://www.bilibili.com/video/BV12s411g7gU?p122 目录 Transform GameObject Object GetComponentInParent LookAt GetSiblingIndex、SetSiblingIndex Instantiate Transform 对象的位置、旋转和缩放 场景中的每个对象都有一个Transform&…

Unity 剧情类游戏基础脚本

本文主要用于给新人提供实现剧情类游戏的基本思路。 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; 然后是一个很重要的 [System.Serializable] 它的作用是使得在检查器窗口来看到我i们自己创建的类从而实现在检…

Unity脚本(三)

视频教程:https://www.bilibili.com/video/BV12s411g7gU?p128 目录 Time Prefab Animation Time Time.time:自应用程序启动以来,每帧的开始时间(只读) Time.deltaTime:每帧间隔,或说完…

NS版暗黑破坏神3金手指开发教程(1)

最近重温了NS版的暗黑三,因为空闲时间实在有限,面对这样一款刷刷刷的经典作品,为了护肝以及更爽快的游玩,同时为了弥补自己丢失已久的汇编技能,加上NS版暗黑三最初版本里有带完整调试信息的elf文件,于是有了…

NS版暗黑破坏神3金手指开发教程(3)

上一节,我们初步介绍了修改人物力量的方法,也大致说了一下hexworkshop和IDA的简单操作,这一节,我们将进阶到复杂度高一些的人物全属性修改,搜索方法基本跟上一节的力量公式一样,需要一定的耐心和细心&#…

Unity入门3——脚本基础

一、生命周期函数 ​ 所有继承 MonoBehavior 的脚本,最终都会挂载到 GameObject 游戏对象上 ​ 生命周期函数就是该脚本对象依附的 GameObject 对象从出生到消亡整个生命周期中 ​ 会通过反射自动调用的一些特殊函数 ​ Unity 帮助我们记录了一个 GameObject 对象依…

4.实现csdn暗黑模式-油猴脚本实战1

4.实现csdn暗黑模式-油猴脚本实战1 Start 前面的文章,对油猴脚本做了基础的介绍。今天来我们来实战一下,编写一个有实际作用的油猴脚本。 如果我希望我的csdn是暗黑模式,怎么办? 看我表演? 注意!本文仅用…

6. unity之脚本

1. 说明 当整个游戏运行起来之后,我们无法再借助鼠标来控制物体,此时可以使用脚本来更改物体的各种姿态,驱动游戏的整体运动逻辑。 2. 脚本添加 首先在Assets目录中,新创建一个Scripts文件夹,在该文件内右键鼠标选择创建脚本选项,即可创建一个脚本文件,可命名为Sampl…

Unity入门03——Unity脚本

1.脚本基本规则 1.设置编程用工具 2.基本规则 1.创建规则 不在VS中创建脚本了可以放在Assets文件夹下的任何位置(建议同一文件夹管理)类名和文件名必须一致,不然不能挂载(因为反射机制创建对象,会通过文件名去找Type)建议不要使用中文名命名没有特殊…

你可能还不知道的暗黑3常用小技巧

以下是上次活动热心坛友发来的游戏小技巧,经过我的搜集和加入一些自己和朋友们分享的经验整合编辑而成。再次感谢大家的热心参与。都非常实用哟!!! 操作篇 1,如果你不希望朋友进入你的游戏时,按ESC&#xf…

jq linux获取数组长度,数组长度用size还是length

数组长度用length属性。length是js的原生方法,可获取元素的个数和对象的长度;而size()函数是jQuery方法,只能作用于对象上,用于返回当前jQuery对象封装的元素个数。获取一个数组的长度或者参数的长度,只能用lenth。 本…

delphi 获取数组长度_数组的介绍及使用

JavaScript 中的数组常用于在单个变量中存储多个值。数组就是一组数据的集合,在内存中表现为一段连续的内存地址(保存在堆内存)。创建数组的目的就是为了保存更多的数据。 数组概念和语法 概念:数组是一个特殊变量,一次可以容纳多个值。 特点…

js 填充数组长度

js 填充的方法有以下三种 const array new Array(100).fill()Array.from(new Array(100).keys())let arr Array.from({length:100}, (_v,k) > k);如果下面有这么一个场景,你在接口中获取了一个数组对象,如下: [{id:1},{id:2},{id:3},{…