unity函数

transform

Input.GetKey (KeyCode.x)//键盘按键,x是任意按键

transform.Rotate (x,y, z);//旋转,xyz表示坐标方向,Time.deltaTime对应单位时间

transform.Translate (x,y,x)//平移,xyz表示坐标方向,Time.deltaTime对应单位时间

后面加 Space.World表示按照世界坐标移动

if (Input.GetKey (KeyCode.A)) {
			transform.Rotate (0,-90 * Time.deltaTime, 0);
		}
		if (Input.GetKey (KeyCode.D)) {
			transform.Rotate (0,90 * Time.deltaTime, 0);
		}
		if (Input.GetKey (KeyCode.W)) {
			transform.Translate (15*Time.deltaTime,0,0);
		}
		if (Input.GetKey (KeyCode.S)) {
			transform.Translate (-10* Time.deltaTime,0,0);
		}

transform.GetChild(num) 获取当前物体的子物体,num是从上往下排第几个子物体。

point = transform.GetChild(0);//第一个子物体的位置

让物体始终朝向一个地方transform.LookAt(vector3);

transform.LookAt(target_enemy.transform.position);

查找对象函数

GameObject.Find ("");

共有gameobject会在附上代码后的物体的inspector面板里面的代码界面显示共有变量,直接把物体托上。

私有物体

GameObject.Find ("Cube");
  1. 不能查找隐藏路径,隐藏对象包括查找路径的任何一个父节点隐藏(active=false)
  2. 优点1:解决查找中可能出现的重名问题。
  3. 优点2:如果有完全的路径,减少查找范围,减少查找时间。
  4. 缺点: 路径或结构调整后,容易影响到程序中的查找,需要重新定位查找路径。
cube = GameObject.Find ("Cube");

Transform.Find

  1. 可以查找隐藏对象
  2. 支持路径查找
  3. 查找隐藏对象的前提是transform所在的根节点必须可见,即active=true
root.transform.Find("root/AnyChildObjectName")

GameObject.FindWithTag

静态调用,tag不能重复,

cube = GameObject.FindWithTag ("Cube");//这儿是Tag值

GameObject.FindGameObjectsWithTag

先定义一个数组变量

GameObject[] gameObj;

FindGameObjectsWithTag会把标签为player的物体全部放入数组中

gameObj = GameObject.FindGameObjectsWithTag("Player");

Resources.Load

使用这种方式加载资源,首先需要下Asset目录下创建一个名为Resources的文件夹,这个命名是U3D规定的方式,然后把资源文件放进去,当然也可以在Resources中再创建子文件夹,当然在代码加载时需要添加相应的资源路径,括号里面是物体名字。

defense_tower_attack = Resources.Load("Defense_tower_attack")as GameObject;

陀螺仪

SystemInfo//读取设备信息

SystemInfo.supportsGyroscope//设备上是否有陀螺仪

Gyroscope//定义一个陀螺仪物体 Gyroscope tuov

Input.gyro//返陀螺仪信息

bool gyinfo;
    Gyroscope go; 
    void Start()
    {
        gyinfo = SystemInfo.supportsGyroscope;//判断设备是否支持陀螺仪
        go = Input.gyro;//返回陀螺仪信息
        go.enabled = true;//调用陀螺仪权限
    }

Vector3 a = go.attitude.eulerAngles//声明一个三位变量为设备姿态(xyz)

button监听

Add Component>>Event>>Event trigger

Add New Event Type

PointerEnter//指针指向按钮

PointerExit//指针离开按钮

PointerDown//指针按下按钮

PointerUp//指针松开按钮

pointerClick//点击按钮

键盘按键监听表

Input.GetKey (KeyCode.值)//监听是否按下

值 对应键

Backspace 退格键
Delete Delete键
Tab TabTab键
Clear Clear键
Return 回车键
Pause 暂停键
Escape ESC键
Space 空格键
Keypad0 小键盘0
Keypad1 小键盘1
Keypad2 小键盘2
Keypad3 小键盘3
Keypad4 小键盘4
Keypad5 小键盘5
Keypad6 小键盘6
Keypad7 小键盘7
Keypad8 小键盘8
Keypad9 小键盘9
KeypadPeriod 小键盘“.”
KeypadDivide 小键盘“/”
KeypadMultiply小键盘“*”
KeypadMinus 小键盘“-”
KeypadPlus 小键盘“+”
KeypadEnter 小键盘“Enter”
KeypadEquals 小键盘“=”
UpArrow 方向键上
DownArrow 方向键下
RightArrow 方向键右
LeftArrow 方向键左
Insert Insert键
Home Home键
EndEnd键
PageUp PageUp键
PageDown PageDown键
F1功能键F1
F2功能键F2
F3功能键F3
F4功能键F4
F5功能键F5
F6功能键F6
F7功能键F7
F8 功能键F8
F9 功能键F9
F10 功能键F10
F11 功能键F11
F12 功能键F12
F13 功能键F13
F14 功能键F14
F15 功能键F15
Alpha0 按键0
Alpha1 按键1
Alpha2 按键2
Alpha3 按键3
Alpha4 按键4
Alpha5 按键5
Alpha6 按键6
Alpha7 按键7
Alpha8 按键7
Alpha9 按键9
Exclaim ‘!’键
DoubleQuote双引号键
Hash Hash键
Dollar ‘$’键
AmpersandAmpersand键
Quote 单引号键
LeftParen 左括号键
RightParen右括号键
Asterisk ‘ * ’键
Plus ‘ +’键
Comma ‘ , ’键
Minus ‘ - ’键
Period ‘ . ’键
Slash ‘ / ’键
Colon ‘ : ’键
Semicolon‘ ; ’键
Less ‘< ‘键
Equals ‘ = ‘键
Greater ‘ >‘键
Question ‘ ? ’键
At ‘@’键
LeftBracket‘ [ ‘键
Backslash ‘ \ ’键
RightBracket‘ ] ’键
Caret ‘ ^ ’键
Underscore‘ _ ’键
BackQuote‘ ` ’键
A ‘a’键
B ‘b’键
C ‘c’键
D ‘d’键
E ‘e’键
F ‘f’键
G ‘g’键
H ‘h’键
I ‘i’键
J ‘j’键
K ‘k’键
L ‘l’键
M ‘m’键
N ‘n’键
O ‘o’键
P ‘p’键
Q ‘q’键
R ‘r’键
S ‘s’键
T ‘t’键
U ‘u’键
V ‘v’键
W ‘w’键
X ‘x’键
Y ‘y’键
Z ‘z’键
Numlock Numlock键
Capslock 大小写锁定键
ScrollLockScroll Lock键
RightShift 右上档键
LeftShift 左上档键
RightControl右Ctrl键
LeftControl左Ctrl键
RightAlt 右Alt键
LeftAlt 左Alt键
LeftApple 左Apple键
LeftWindows左Windows键
RightApple右Apple键
RightWindows右Windows键
AltGr Alt Gr键
Help Help键
Print Print键
SysReq Sys Req键
Break Break键
Mouse0 鼠标左键
Mouse1 鼠标右键
Mouse2 鼠标中键
Mouse3 鼠标第3个按键
Mouse4 鼠标第4个按键
Mouse5 鼠标第5个按键
Mouse6 鼠标第6个按键
JoystickButton0手柄按键0
JoystickButton1手柄按键1
JoystickButton2手柄按键2
JoystickButton3手柄按键3
JoystickButton4手柄按键4
JoystickButton5手柄按键5
JoystickButton6手柄按键6
JoystickButton7手柄按键7
JoystickButton8手柄按键8
JoystickButton9手柄按键9
JoystickButton10手柄按键10
JoystickButton11手柄按键11
JoystickButton12手柄按键12
JoystickButton13手柄按键13
JoystickButton14手柄按键14
JoystickButton15手柄按键15
JoystickButton16手柄按键16
JoystickButton17手柄按键17
JoystickButton18手柄按键18
JoystickButton19手柄按键19
Joystick1Button0第一个手柄按键0
Joystick1Button1第一个手柄按键1
Joystick1Button2第一个手柄按键2
Joystick1Button3第一个手柄按键3
Joystick1Button4第一个手柄按键4
Joystick1Button5第一个手柄按键5
Joystick1Button6第一个手柄按键6
Joystick1Button7第一个手柄按键7
Joystick1Button8第一个手柄按键8
Joystick1Button9第一个手柄按键9
Joystick1Button10第一个手柄按键10
Joystick1Button11第一个手柄按键11
Joystick1Button12第一个手柄按键12
Joystick1Button13第一个手柄按键13
Joystick1Button14第一个手柄按键14
Joystick1Button15第一个手柄按键15
Joystick1Button16第一个手柄按键16
Joystick1Button17第一个手柄按键17
Joystick1Button18第一个手柄按键18
Joystick1Button19第一个手柄按键19
Joystick2Button0第二个手柄按键0
Joystick2Button1第二个手柄按键1
Joystick2Button2第二个手柄按键2
Joystick2Button3第二个手柄按键3
Joystick2Button4第二个手柄按键4
Joystick2Button5第二个手柄按键5
Joystick2Button6第二个手柄按键6
Joystick2Button7第二个手柄按键7
Joystick2Button8第二个手柄按键8
Joystick2Button9第二个手柄按键9
Joystick2Button10第二个手柄按键10
Joystick2Button11第二个手柄按键11
Joystick2Button12第二个手柄按键12
Joystick2Button13第二个手柄按键13
Joystick2Button14第二个手柄按键14
Joystick2Button15第二个手柄按键15
Joystick2Button16第二个手柄按键16
Joystick2Button17第二个手柄按键17
Joystick2Button18第二个手柄按键18
Joystick2Button19第二个手柄按键19
Joystick3Button0第三个手柄按键0
Joystick3Button1第三个手柄按键1
Joystick3Button2第三个手柄按键2
Joystick3Button3第三个手柄按键3
Joystick3Button4第三个手柄按键4
Joystick3Button5第三个手柄按键5
Joystick3Button6第三个手柄按键6
Joystick3Button7第三个手柄按键7
Joystick3Button8第三个手柄按键8
Joystick3Button9第三个手柄按键9
Joystick3Button10第三个手柄按键10
Joystick3Button11第三个手柄按键11
Joystick3Button12第三个手柄按键12
Joystick3Button13第三个手柄按键13
Joystick3Button14第三个手柄按键14
Joystick3Button15第三个手柄按键15
Joystick3Button16第三个手柄按键16
Joystick3Button17第三个手柄按键17
Joystick3Button18第三个手柄按键18
Joystick3Button19第三个手柄按键19

Vector3与Quaternion

Vector3大多用于表示transform.position(物体的3d坐标,表示物体位置)

Quaternion大多用于transform.rotation(物体的四元数,表示物体方向)

四元数原理以及数学模型:

https://blog.csdn.net/candycat1992/article/details/41254799

如设置物体位置与方向时

transform.position = new Vector3(x,y,z);
transform.rotation = new Quaternion(x, y, z, w);

两个vector3之间的距离

Vector3.Distance(vector3, vector3 )

Vector3.Distance(transform.position, target_enemy.transform.position);

Vector3转化为Quaternion

rotation = Quaternion.LookRotation(Scrollrotation.normalized);

SceneManager

1,引用SceneManagement

using UnityEngine.SceneManagement;

2,使用跳转语句SceneManager.LoadScene(“场景名字/ID”);

SceneManager.LoadScene("场景名字/ID",LoadSceneMode.Single);//LoadSceneMode.Single为不保留当前场景

注意:跳转场景不会使场景数据重置

3,SceneManager.GetActiveScene () 获取场景名字(scene.name获取场景名)

Scene scene = SceneManager.GetActiveScene ();

物体实例化和销毁物体

GameObject.Instantiate(Object,Vector3,Quaternion)

第一个参数 Object 是要生成的游戏物体

第二个参数Vector3就是游戏物体的生成位置

第三个参数Quaternion是表示生成的游戏物体是否旋转,一般是不旋转我们用Quaternion.identity表示无旋转

GameObject defense=Instantiate(defense, point.position, Quaternion.identity);//实例化的同时赋值
GameObject.Instantiate(Object,Vector3,Quaternion)//直接实例化

GameObject.Destroy(gameObject,2.0f);

第一个参数gameObject表示要销毁的游戏对象自身

第二个参数2.0f表示2秒后销毁,可以任意指定时间

显示和隐藏

1.设置物体的激活状态

gameObject.SetActive(bool);

gameobject是激活物体

2.3D物体的显示和隐藏,设置renderer状态

这种方法,相当于是只是隐身的状态,实际上物体还是存在的只是不显示出来而已
一定要先注意,物体有没有Render组件,一般来说需要渲染的物体都有(非UI)
关键要点

gameObject.GetComponent<Renderer>().enabled = bool;

刚体(加力,属性)

定义刚体

private Rigidbody rigidbody;//定义个刚体名为a

刚体赋值

rigidbody = this.GetComponent<Rigidbody>();//实例化为当前物体的刚体

给刚体加力(自身坐标)

rigidbody.AddRelativeForce(Vector3.forward , ForceMode.Acceleration);给刚体添加向前的力,Vector3.back/light/right(后/左/右)

给刚体加力(世界坐标)

rigidbody.AddForce(Vector3,ForceMode)//同上

c#获取当前刚体速度

float speed = airshipRigidbody.velocity.magnitude;

音频

添加音源

public AudioSource daojishi;//定义公共一个音源为daojishi

保存代码后在物体inspector板块会出现公共音源,将带有音频的物体添加拖进去(一般使用空物体赋音频)

碰撞检测

如果是碰撞函数

private void OnTriggerEnter(Collider other)
{
    if (other.tag == "end")
    {
        end = 1;
        d = 0;
    }
}

private void OnTriggerExit(Collider other)
{
    if (other.tag == "end")
    {
    }
}

碰撞检测通过通过碰撞器触发,通过tag识别,所以碰撞检测的前提是物体要有碰撞器,碰撞器中的Is Trigger是触发器,决定物体是否碰撞到它,如果勾上那么物体不会有碰撞效果,会直接穿过去,只触发函数内容

平滑处理

Mathf.SmoothDamp的使用,游戏中用于做相机的缓冲跟踪,这个函数的功能主要是让一个物体像一个指定的位置平滑的移动,比如摄像机的平滑处理

Mathf.SmoothDamp(transform.position.x, target.position.x, ref velocity.x, smoothTime

transform.position.x是当前物体的空间坐标的x轴(y轴、z轴同理)。

target.position.x是target的空间坐标的x轴(y轴、z轴同理)。

velocity是定义的2d或者3d的单位(见下图)。

smoothtime是平滑时间,随着时间的增大平滑速度越来越慢。

public Transform target;    //需要移动的位置
  public float smoothTime= 0.3f; //平滑时间时间越大平滑速度越慢
  private Vector3 velocity;    //如果是2d就用vector2,如果是3d就用vector3
  void Update ()
  {
    //直接通过平滑函数设置物体坐标
    transform.position = new Vector3(Mathf.SmoothDamp(transform.position.x, target.position.x, ref velocity.x, smoothTime),Mathf.SmoothDamp( transform.position.y, target.position.y, ref velocity.y, smoothTime),Mathf.SmoothDamp( transform.position.z, target.position.z, ref velocity.z, smoothTime));
  }

Update FixedUpdate LateUpdate

  1. 物理运算应该放在FixedUpdate中

    (上面表述的是FixedUpdate的更新频率不是按帧率,而是按一个叫做 fixed frame-rate frame,这里我们称其为物理帧。而其更新的默认频率是每秒50次,这个值可以通过项目设置来更改。)

  2. Input检测应该放在Update中

    (Update每帧都会被调用)

  3. 相机应该放在LateUpate中

    (LateUpdate是在所有Update函数运行完以后才开始执行的)

    关于fixedupdata详解:

    https://www.cnblogs.com/murongxiaopifu/p/7683140.html

Unity保存数据方式——PlayerPrefs

Unity3d提供了一个用于本地持久化保存与读取的类——PlayerPrefs。工作原理非常简单,以键值对的形式将数据保存在文件中,然后程序可以根据这个名称取出上次保存的数值。
PlayerPrefs类支持3中数据类型的保存和读取,浮点型,整形和字符串。
对应的函数分别为:

SetInt();保存整型数据
GetInt();读取整形数据
SetFloat();保存浮点型数据
GetFlost();读取浮点型数据
SetString();保存字符串型数据
GetString();读取字符串型数据

PlayerPrefs.SetString("Name",mName)*;*
PlayerPrefs.SetInt("Age",mAge)*;* 
PlayerPrefs.SetFloat("Grade",mGrade)
mName=PlayerPrefs.GetString("Name","DefaultValue");
mAge=PlayerPrefs.GetInt("Age",0);
mGrade=PlayerPrefs.GetFloat("Grade",0F);

摇杆控制移动

连续使用三个image,第一个image作为摇杆载体,viewport是摇杆范围,content是摇杆的杆全部用image代替。

把最外层的image的image属性删掉。

我们需要调用unity自带的脚本scroll rect

添加这个脚本后

content就是中间的杆,我们把刚刚创建的content(image)放进去 ,然后viewport放进去就好了,再改一下颜色和形状

这个时候已经初步的达到了摇杆的效果了,但是content没有边界,所以我们需要继承了scroll rect给content添加个边界。

这个时候我们删除刚刚的scroll rect,我们自己创建一个空脚本

1.脚本后面MonoBehaviour继承改为scrollrect

2.创建一个浮点型变量radius,来限制content与中心点的距离

3.设置radius的长度为ui大小的0.3倍,因为ui是的位置是rect transform表示的,所以需要转换一下,transform as RectTransform,这样就能获取到sizedelta的大小了,sizedelta后面可以是x也可以是y,因为之前设置的是圆所以是一样的。

4.重写父类接口void ondrag 这个接口是在拖拽content的时候触发的,所以我们限制范围也是在这个函数里面限制,重写这个函数需要在前面添加override,输入ongrag后会弹出提示,选择提示之后,会自动补全base.OnDrag(eventData); 这句话是在父类上调用原接口,如果没有这句话父类的这个函数将不会被调用。

5.创建一个vector2变量取名为pos,让这个pos等于content的锚点位置(content.anchoredPosition),如果直接使用rect transform就是使用当前画册的位置,content会直接移动到左下角,所以用content.anchoredPosition

6.我们让pos不能超过我们刚刚设定的radius,用if语句pos的向量长度(magnitude)打于radius的时候我们就直接将pos的的向量长度等于radius的长度,通过pos的单位长度(normalized)乘以radius的数值就能得到一个radius长度的像向量

7.pos的值设置好了之后,我们需要content满足这个要求,用函数SetContentAnchoredPosition(pos)就可以之间把content的位置设置为pos了,如果使用我们平时用的transform.position,位置指示的也是画布的直至也就是左下角。

写到这里给content限制距离就写完了,接下来就是如何通过这个摇杆控制物体移动了

public class scrollclicle : ScrollRect
{
    float radius=0;
    public Vector2 outputposition;
    // Start is called before the first frame update
    void Start()
    {
        radius = (transform as RectTransform).sizeDelta.x * 0.3f;//设置半径大小为,当前大小的0.3;
    }
    public override void OnDrag(PointerEventData eventData)//重写父类接口需要添加override,拖拽函数
    {
        base.OnDrag(eventData);//在父类上调用原接口,这样方便在下面添加代码
        Vector2 pos = content.anchoredPosition;

        //如果超出了半径,那么content的位置就会成为半径乘以单位向量的位置(设置content的范围)
        if (pos.magnitude > radius)//magnitude是返回二维向量的长度
        {
            pos = pos.normalized * radius;//normalized是返回单位向量,乘以半径也就直线距离
            SetContentAnchoredPosition(pos);//通过这个函数控制content的位置
        }
    }
    // Update is called once per frame
    void Update()
    {
        outputposition = content.localPosition / radius * Time.deltaTime;
        
    }
}

1.先定义一个Vector2 变量 outputposition 这个变量用于获取content本地坐标乘以Time.deltaTime控制数值大小,也可以不乘根据实际情况来

2.建立新的脚本,用来控制物体的移动

3.脚本中实例化刚刚的脚本为scroll,然后定义一个私有vector3变量Scrollrotation

4.移动根据实际情况,调用scrollclicle定义的outputposition,outputposition.x是摇杆移动后的横向位置,outputposition.y是摇杆移动后的纵向位置根据实际情况添加在transform.Translate里面

5.根据实际情况把outputposition的x,y赋值给Scrollrotation

6.通过Quaternion.LookRotation函数把Vector3转换成quaternion然后赋值给这个物体的transform.rotation,物体就可以根据实际的情况进行旋转,让正面保持移动

public class movetext : MonoBehaviour
{
    public scrollclicle Scroll;
    private Vector3 Scrollrotation;
    void Update()
    {
        transform.Translate(10*Scroll.outputposition.x, 0, 10*Scroll.outputposition.y,Space.World);
        Scrollrotation = new Vector3(Scroll.outputposition.x, 0, Scroll.outputposition.y);
        transform.rotation = Quaternion.LookRotation(Scrollrotation.normalized);
    }

}

List(gameobject)

创建一个list变量

public List<GameObject> enemy_list = new List<GameObject>();//创建一个列表

添加列表元素enemy_list.Add(gameObject)

enemy_list.Add(other.gameObject);//添加进攻击列表

移除列表元素enemy_list.Remove(gameObject);

enemy_list.Remove(other.gameObject);//移除攻击列表

查找列表里面的元素

enemy_list.Contains(gameObject),返回只是布尔

enemy_list.Contains(enemy);//检测列表里面是否有enemy

列表遍历

for (int i = 0; i < enemylist.Count; i++)//遍历所有进入攻击列表的物体
{
	target_enemy = enemylist[i];//将攻击目标改为这个物体
}  

LineRenderer组件

定义射线变量

private LineRenderer line;//定义一个射线

添加射线属性

line = GetComponent<LineRenderer>();//添加射线属性

射线开关 line.enabled 布尔值

设置射线位置 line.SetPosition(num,vector3) 第一参数num为0时为起点,为1时为终点,第二参数是位置

public void Line()
    {
        line.enabled = true;//打开射线
        line.SetPosition(0, point.position);//设置射线的起点为炮口
        line.SetPosition(1, target_enemy.transform.position);//设置射线的终点为攻击物体
    }

();//创建一个列表


添加列表元素enemy_list.Add(gameObject)

```c#
enemy_list.Add(other.gameObject);//添加进攻击列表

移除列表元素enemy_list.Remove(gameObject);

enemy_list.Remove(other.gameObject);//移除攻击列表

查找列表里面的元素

enemy_list.Contains(gameObject),返回只是布尔

enemy_list.Contains(enemy);//检测列表里面是否有enemy

列表遍历

for (int i = 0; i < enemylist.Count; i++)//遍历所有进入攻击列表的物体
{
	target_enemy = enemylist[i];//将攻击目标改为这个物体
}  

LineRenderer组件

定义射线变量

private LineRenderer line;//定义一个射线

添加射线属性

line = GetComponent<LineRenderer>();//添加射线属性

射线开关 line.enabled 布尔值

设置射线位置 line.SetPosition(num,vector3) 第一参数num为0时为起点,为1时为终点,第二参数是位置

public void Line()
    {
        line.enabled = true;//打开射线
        line.SetPosition(0, point.position);//设置射线的起点为炮口
        line.SetPosition(1, target_enemy.transform.position);//设置射线的终点为攻击物体
    }
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity中的Physics.Raycast是一个非常重要的函数,它用于检测从一个点发出的一条射线是否与场景中的物体相交。下面详细讲解一下该函数的用法。 语法 Physics.Raycast(Vector3 origin, Vector3 direction, float maxDistance = Mathf.Infinity, int layerMask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal); 参数解释 1. origin:射线的起点,即射线发出的位置。类型为Vector3。 2. direction:射线的方向,即从起点向哪个方向射线。类型为Vector3。 3. maxDistance:射线的最大长度。如果没有物体与射线相交,则该函数返回false。如果相交,则返回true。类型为float。 4. layerMask:射线检测所在的层。类型为int。 5. queryTriggerInteraction:指定是否检测触发器。类型为QueryTriggerInteraction。 返回值 如果射线与场景中的物体相交,则返回true,否则返回false。 使用方法 在Unity中,我们可以通过以下方式来使用Physics.Raycast函数: 1. 在脚本中声明一个射线变量: RaycastHit hit; 2. 调用Physics.Raycast函数,传入起点、方向、最大长度和层级等参数,并将返回值保存在上述定义的射线变量中: if (Physics.Raycast(transform.position, transform.forward, out hit, 100)) { // 在这里处理射线与物体相交的情况 } 上述代码中,transform.position表示射线的起点,transform.forward表示射线的方向,out hit表示射线与场景中的物体相交的详细信息,100表示射线的最大长度。 3. 处理射线与物体相交的情况。在上述代码中,我们可以通过hit变量来获取射线与物体相交的详细信息,例如碰撞点、碰撞法线、碰撞物体等信息。 总结 以上就是对Unity函数Physics.Raycast的详细讲解。该函数可以用于玩家射击、角色移动等场景。在使用该函数时,我们需要注意射线的起点、方向、长度、层级等参数,以及如何处理射线与物体相交的情况。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值