转自:https://www.gameres.com/677540.html

上篇

今天谈谈一个有趣的内容——u3d实现子弹弹道。当然这个完整的说,也非常复杂,还是由浅入深,先说说最核心的原理。

一、定义

我将子弹分为至少两种:

1、实体型。即发射后,生成一个带刚体的gameobject,可以通过u3d的物理引擎实现碰撞检测。比如机关枪子弹、弹道等等。

2、射线型。即子弹的运动和碰撞不由刚体实现,弹道控制由代码实现,通过Physics2D下函数或自己计算物体检测。比如定向激光、AOE伤害。

本文分别讲两种的实现。

二、理解U3D的物理引擎

知其所以然,才能更好、更快的进行代码实现。这个章节从运用和现象入手,说明一些有关u3d物理引擎的“坑”

Collider和Rigidbody

如果完全不了解U3D的Collider(碰撞体)、Rigidbody(刚体)可以先找下相关的文章看下,网上很多很好的文章。

这里用自己的理解简单说下(针对2D):

Collider描绘物体的碰撞形状,有Box、Cirlce等,是碰撞检测的基础,比如鼠标点击的碰撞判断,都是依赖于定义的Collider来知晓物体的“碰撞形状”

Rigidbody是给物体赋予一个接受物理规律的属性,比如给一个小球加上刚体,默认的小球就会收到重力加速度往下掉。

刚体必须有collider,不然就没有“形状”。

在u3d的2D物理效果的设计理念是:

不会动的物体,只设Collider,例如大地、树木;

会动的,需要有物理运动效果的,设置Collider和Rigidbody,Collider说明“外形”,Rigidbody说明物理属性,如质量、碰撞属性等。

注意这个理念,因为我首次使用2D物理到游戏中的时候,有很多地方很费解,不明白为什么要这么设计,如果理解这个理念了,很多东西就想明白了。

碰撞检测的相关参数

U3D的2D物理引擎,可以不用做任何编码实现刚体的运动碰撞效果。

但如果需要代码获取碰撞信息,相关的属性有:

Collider的Is Trigger,Rigidbody的Is Kinematic

至于其他刚体参数的作用,可以摆个场景逐个调整参数看看效果,就基本明白了。

因为我主要是想通过u3d的2D物理引擎获得的碰撞信息,而不关注碰撞后的物理效果,所以其他参数都可以不管或设置为0。

特别的,由于游戏是一个top-down视角的游戏,而u3d的2D物理引擎默认y轴是2D世界的上下方向,所以Gravity Scale要设置为0。

对应的相关的函数有:

OnTriggerEnter2D、OnTriggerExit2D、OnTriggerStay2D(Collider发生碰撞时被调用)

OnCollisionEnter2D、 OnCollisionExit2D、OnCollisionStay2D(Rigidbody发生碰撞时被调用)

下面将解释这些属性和函数的作用。

碰撞检测的推荐实现方式——Rigidbody的Collision

需要用u3d的2d物理引擎实现碰撞检测时,需要这么设置(假定检测A和B之间的碰撞):

1、A和B都添加collider,不勾选Is Trigger

2、A或B至少一个添加rigidbody,不勾选IsKenematic

3、对A或B添加脚本,添加OnCollisionEnter2D、 OnCollisionExit2D或OnCollisionStay2D函数获取碰撞信息。

以本文的实体型子弹为例:

1、  对游戏单位和子弹都添加collider

2、  对子弹添加rigidbody

3、  对子弹添加OnCollisionEnter2D方法,编写造成伤害的逻辑代码,并销毁子弹对象。

关于Rigidbody的Is Kinematic的属性:勾选后,2D物理引擎对这个刚体不起作用,只能代码去实现物体的运动。同时,OnCollisionEnter2D也不会被触发。

另外一种碰撞检测的实现——Collider的Trigger

通过Collider的Is Trigger的,也能实现“碰撞检测”。

Collider的Is Trigger:顾名思义,这个属性说明是否触发,勾选后,则会有“碰撞时”OnTriggerEnter2D、OnTriggerExit2D, OnTriggerStay2D函数。

例如,检测A和B之间的碰撞:

1、  A和B都添加collider,A勾选Is Trigger,B不勾选

2、  A添加rigidbody

3、  对A脚本添加OnTriggerEnter2D

A和B的collider发生接触时,则A的OnTriggerEnter2D被调用。如果B的脚本也有OnTriggerEnter2D,也会被调用,尽管B没有勾选Is Trigger。

这种“碰撞检测”,依靠Collider的trigger机制,在Collider层面就可以完成,其原理应该和鼠标点击事件的触发类似。但有以下问题:

1、  这个触发机制的碰撞检测频率和Update一样,而上文中推荐方式(利用OnCollisionEnter2D)是和FixedUpdate一样,后者是专门是做刚体物理运算,其计算频率更好,碰撞检测更准确。如果使用OnTriggerEnter2D的方式,检测到碰撞发生时可能两个碰撞的物体已经相互嵌入很久了,如果其中一个物体运动速度过快,可能已经“穿”过去了

2、  OnCollisionEnter2D的参数提供的碰撞信息更丰富,而OnTriggerEnter2D只有一个碰撞对方collider的信息,得不到更精确的点。

3、  虽然碰撞是在Collider层面完成,感觉跟Rigidbody没有什么关系(1、2两点的想象也侧面印证了我这个想法),但A和B之间必须有一个是Rigidbody,不然碰撞事件触发不了。Physics2D中IsTouching等函数也有这样。

4、  设置Trigger后,所有的碰撞事件被Trigger拦截,OnCollisionEnter2D不会再被调用。

基于以上因素,这种碰撞检测,不能称之为有效的“碰撞检测”,在实际运用中要根据实际情况判断是否合适。

作为游戏物体和物体的碰撞检测,不推荐使用Collider的Trigger方式。

关于碰撞检测的总结

1、如果想使用物理引擎实现碰撞,包括Collider的Trigger,rigidbody的Collision,Physics 2D的IsTouching等方法,除了碰撞双方都有Collider,必须有1个有rigidbody。(此点让我无力吐槽)。

2、使用Collider的Trigger(勾选Is Trigger),可以使用OnTriggerEnter2D、OnTriggerExit2D, OnTriggerStay2D监听碰撞,但没有碰撞物理效果,rigidbody的collision无法使用。Collider的Trigger不是在物理引擎层面上工作的,不管是碰撞检测的更新频率、是碰撞结果都不好,且它直接“阻止”了物理引擎的对物体的作用。

3、使用rigidbody的collision(不勾选Is Kinematic),使用OnCollisionEnter2D、 OnCollisionExit2D、OnCollisionStay2D监听碰撞,物理引擎会影响刚体的运动,会有碰撞反弹的物理效果。最好在OnCollisionEnter2D只获取状态而不更新物体运动,因为物理引擎这是也在控制它的运动。

综上,u3d物理引擎的使用限制还是很多的,实现很多逻辑功能都有障碍。由于对于实体子弹的实现,子弹打击单位后,子弹自我销毁,和以上第3点正好满足,可以使用u3d的collision,而非实体子弹显然不能使用。

三、实体型子弹

如果认真阅读上面的分析且理解了原理,应该对u3d的2D碰撞(3D类似)的套路应该很清楚,实现实体子弹打击效果,仅仅是点点、配配的事。

现实方式为:

1、  对游戏单位和子弹都添加collider

2、  对子弹添加rigidbody

3、  对子弹添加OnCollisionEnter2D方法,编写造成伤害的逻辑代码,并销毁子弹对象。

关键代码:
  1. void Update ()
  2.     {
  3.         if (Common.pause)
  4.             return;
  5.  
  6.         m_Anim.OnUpdate (GetComponent<SpriteRenderer> ());
  7.  
  8.         float l = Time.deltaTime * m_Info.speed;
  9.         transform.position += m_Direction * l;
  10.         m_LeftDistance -= l;
  11.         if (m_LeftDistance < 0 || m_DestroySelf)
  12.         {
  13.             FlyerManager.Free(gameObject);
  14.         }
  15.  
  16.     }
  17.  
  18.  
  19.     public virtual void OnCollisionEnter2D (Collision2D coll)
  20.     {
  21.         if (m_DestroySelf)
  22.             return;
  23.  
  24.         TargetPick pick = TargetPick.From (coll);
  25.         m_Info.AttackOn (pick,m_Direction, m_myUnit,hitEffectType);
  26.         m_DestroySelf = true;
  27.  
  28.     }
复制代码


其中有很多类和函数已经封装,例如:

FlyerManager.Free(),内部实现了子弹的回收,便于再利用。

再如TargetPick和AttackOn,实现了拾取最合适的游戏单位和计算打击伤害的功能。

 

 

 

 

 

中篇

 

文说明在弹道实现中,关于u3d的物理引擎的一些相关要点,并跟给了实体性子弹的关键实现代码。

本篇中,将继续说明射线型弹道的实现的。

四、射线型子弹

本章先讲子弹的碰撞逻辑实现,由于射线型子弹用u3d的sprite是绘制不出来的,所有需要特殊的技巧,绘制方法在下一章中说明。

使用Physic2D库,进行非自动碰撞检测

区别于实体子弹,在游戏中,我需要实现类似于激光射线、范围伤害(AOE)的攻击类型。

这种情况下,就不能依靠rigidbody来实现碰撞的检测,前文中又说了,u3d的物理引擎不支持两个collider的碰撞检测。

所以,没有办法“自动”做碰撞检测(这里所谓自动,就是去实现一个函数,然后等着u3d在碰撞发生时自动调用)

我依然使用u3d的2D物理库,在每一帧(每个Update)中,对目标collider进行检测。

例如,AOE伤害:

RaycastHit2D[] hits = Physics2D.CircleCastAll(transform.position, m_Info.aoeRadius, Vector2.zero,LayerManager.GetLayer(m_Faction).oppUnitMask );

使用Physics2D的CircleCastAll、RaycastAll、BoxCastAll,对指定layer中的所有collider,做圆形、射线、长方形的碰撞检测。

即,这里不再用collider和collider,而是判断指定的圆形、射线、长方形,和哪些collider碰撞(Cast),包括相交和包含。

这些函数有一个All和非All的版本,返回所有检测到collider或者最近的collider。

返回值RaycastHit包含collider、point(碰撞点)、normal(碰撞法线)等,具体请参考u3d api,这里不再累述。

和上文说的Collider的碰撞检测一样,碰撞的代码实现放在Update里,可能出现“嵌入过多”或“穿过”的情况。

但由于,需求本身是针对非实体子弹的,其面积、范围比子弹大很多,所有没有太严重的影响。

(如果放在FixedUpdate会精确很多,但消耗太大)。

几种弹道类型的攻击逻辑实现

穿透激光

穿透激光,可以对射线上的单位造成伤害。

其攻击的实现代码:

复制代码

IEnumerator _TakeAttack ()
{yield return new WaitForSeconds (RAY_TAKE_ATTACK); Vector3 v = Utils.Up (transform);Vector3 worldCenter = transform.position + v * m_Info.attackDistance / 2;Vector2 size = new Vector2 (width, m_Info.attackDistance);RaycastHit2D[] hits = Physics2D.BoxCastAll (worldCenter, size, Utils.DirToAngle(v), new Vector2 (0, 0),Mathf.Infinity,LayerManager.GetLayer(m_Faction).oppUnitMask);  

      m_Filter.Clear();
for (int s = 0; s < hits.Length; ++s)
{
TargetPick pick = TargetPick.From (ref hits [s]);
pick.ToShield();
if( pick )
if( m_Filter.Test(ref pick) )
m_Info.AttackOn (pick, v, m_myUnit,hitEffectType,null);
}

}

复制代码

注意,攻击使用StartCoroutine做一个延时,这是因为,为了动画效果更真实,在做激光的绘制时,有一个很快的激光射线变长的过程,所以攻击的实际效果要和增长时间配合。

代码里面有很多游戏逻辑相关的东西,不用太关注,关键是要获取到一个box的形状描述,需要知道Up,Center,Size。

这里把激光看成一个很长的box,长度是激光的最大攻击距离。

最后,由于有些单位有多个Collider,所有需要过滤一下(即m_Filter),原理很简单:

1、找hit或collider对应的单位(TargetPick.From)

2、检查单位在过滤器中是否已经存在。存在就不在处理,不存在就继续,并添加到过滤器中(m_Filter.test)

3、进行伤害的计算逻辑(m_Info.Attack)

定向激光(持续)

定向激光对指定的单位进行攻击。

定向激光不需要通过碰撞检测去“探测”激光与哪些collider相交的,因为定向激光是对已指定的单位进行持续攻击。

需要解决的问题,激光与单位的碰撞点到底在哪。根据这个碰撞点,绘制激光的形状。

其攻击的实现代码:

复制代码

public bool _TakeAttack (out Vector3 point){point = Vector3.zero;Vector3 v = Utils.Up (transform);// The colliders in the array are sorted in order of distance from the origin pointRaycastHit2D[] hits = Physics2D.RaycastAll (transform.position, v, m_Info.attackDistance,LayerManager.GetLayer(m_Faction).oppUnitMask);// 是否有target的hitTargetPick pick = TargetPick.none;for (int s = 0; s < hits.Length; ++s){pick = TargetPick.IsTarget (target, ref hits [s]);if (pick)break;}if (pick){point = pick.point;m_Info.AttackOn (pick, v, m_myUnit, Const.NONE_EFFECT, this);if (pick.unit && pick.unit.curHp <= 0)return false;if (pick.part && pick.part.unit.curHp <= 0)return false;return true;}return false;}

复制代码

攻击函数返回是否攻击到对象单位(target),并返回攻击点。和穿透激光的区别,使用RayCastAll目的只是找到要攻击的对象是否在其中,并确定碰撞点。

定向激光(单次攻击)

类似于图中的闪电效果。原理持续的定向激光基本一致,区别是单次攻击时播放闪电(或其他效果)动画。

同持续定向激光一样,在攻击过程中不停的用RayCast判断闪电是否“打”到了目标上,

如果没有需要立即中断攻击和攻击动画,否则攻击单位在出现突然转身的是否,闪电会随着攻击攻击单位移动,出现bug。

不再给出代码。

范围攻击

典型的是喷火器或者爆炸,在一定范围内所有单位收到伤害。

一时找不到图。后面补。

复制代码

bool _TakeAttack (){Vector3 dir = Utils.Up (transform);m_Filter.Clear ();RaycastHit2D[] hits = Physics2D.CircleCastAll (transform.position, m_Info.attackDistance, Vector2.zero,Mathf.Infinity, LayerManager.GetLayer(m_Faction).oppUnitMask);bool f = false;// 是否有target的hitfor (int s = 0; s < hits.Length; ++s){Vector3 v = Utils.V2toV3 (hits [s].point) - transform.position;if (Mathf.Abs (Vector3.Angle (dir, v)) < m_Info.attackArc / 2){f = true;TargetPick pick = TargetPick.From (ref hits [s]);// AOE CircleCastAll 可能选不到shieldpick.ToShield ();if (pick)if (m_Filter.Test (ref pick))m_Info.AttackOn (pick, Vector3.zero, null, Const.NONE_EFFECT ,this);}}return f;}

复制代码

原理很简单,先找到圆形范围内的所有collider,再判断是否在喷火器的扇形角度内。

 

攻击、弹道这块内容游戏逻辑是游戏的一个重点,其实很难写一辆篇文章说清,其实我很想把从最下层的u3d的物理、绘制到最上层代码逻辑架构 全部说清楚,

但发现写一篇文博耗费的时间比我想象长,长到我写代码实现的一个功能的时间还没写一篇文章长。

所以,我考虑了下,不能指望所有的东西全部说清楚,最要还是讲原理,不同于网上大部分的教程讲的是最基础的内容,甚至是解释api,

而是建立读者有一定基础上,讲原理、讲结构,讲自认为的难点,有助于自己梳理游戏代码,也是对关键的技术点做一个备忘。

下篇预告:弹道的图形效果实现、攻击逻辑的结构和要点(比如本文中展示代码中定义的类的意义)

 

 

下篇

 

EffectRTGenerator
EffectRTGenerator是用来做渲染到纹理的辅助类。

通过Inst方法来访问EffectRTGenerator,Inst内部会在首次调用时创建一个实例,不需要在Scene预先放一个RTCamera碍眼,让开发人员完全不用去理会rt生成的细节
CreateOutterline方法会创建一个轮廓的rendertexture。CreateOutterline的逻辑框架是:
1、_Begin(),生成rt,移动target
2、RenderWithShader
3、_End(),还原target
4、根据需求处理纹理
类的定位:EffectRTGenerator放在场景中“非常远”的位置,专门用来做渲染到纹理,其他对象有rt的相关需求时,只需要调用相关的方法即可生成rt。这个类的定位不仅仅是做轮廓rt的生成,而是扩展并支持各种类似rt的生成。例如,可以加入生成“发光”、“烟雾“等贴图,只要按CreateOutterline的模式进行改造就行了。
**注意:**CreateOutterline不能在target的Awake和Start里调用。
代码:

using UnityEngine;
using System.Collections;

[RequireComponent(typeof(Camera))]
public class EffectRTGenerator : MonoBehaviour
{
//public int RTGenLayer = 31;

    static EffectRTGenerator m_Instance;

    public static EffectRTGenerator Inst()
{
if (m_Instance == null)
{
GameObject rtCamera = new GameObject("RTCamera");
rtCamera.transform.position = new Vector3(9999999, 9999999, -10);
Camera c = rtCamera.AddComponent<Camera>();
c.clearFlags = CameraClearFlags.Color;
c.backgroundColor = Color.black;
c.orthographic = true;
c.orthographicSize = 5;
c.nearClipPlane = 0.3f;
c.farClipPlane = 1000f;
c.enabled = false;
m_Instance = rtCamera.AddComponent<EffectRTGenerator>();    
}
return m_Instance;
}

    Material m_SolidMat = null;
Material m_BlurMaterial = null;
Material m_CutoffMaterial = null;
Material m_CompositeMaterial = null;

    Vector3 m_TargetOldPosition;
Vector3 m_TargetOldEulerAngles;
Vector3 m_TargetOldScale;
int m_TargetOldLayer;

    public void Awake()
{
m_Instance = this;

        m_SolidMat = new Material(Shader.Find("Outterline/Solid"));
m_SolidMat.hideFlags = HideFlags.HideAndDontSave;
//m_SolidMat.shader.hideFlags = HideFlags.None;

        m_BlurMaterial = new Material(Shader.Find("Outterline/ShapeBlur"));
m_BlurMaterial.hideFlags = HideFlags.HideAndDontSave;
//m_BlurMaterial.shader.hideFlags = HideFlags.None;

        m_CutoffMaterial = new Material(Shader.Find("Outterline/CutoffBody"));
m_CutoffMaterial.hideFlags = HideFlags.HideAndDontSave;
//m_CutoffMaterial.shader.hideFlags = HideFlags.None;

        m_CompositeMaterial = new Material(Shader.Find("Outterline/Composer"));
m_CompositeMaterial.hideFlags = HideFlags.HideAndDontSave;
//m_CompositeMaterial.shader.hideFlags = HideFlags.None;

        // 设置到一个极其远的地方,以便于只渲染目标
transform.position = new Vector3(99999, 99999, -10);
//GetComponent<Camera>().cullingMask = 1 >> RTGenLayer;

    }

    void OnDestroy()
{
DestroyImmediate(m_SolidMat);
DestroyImmediate(m_BlurMaterial);
DestroyImmediate(m_CutoffMaterial);
DestroyImmediate(m_CompositeMaterial);

    }

    public RenderTexture _Begin(GameObject target, float x, float y)
{
// 根据输入的x和y,创建一个rt
RenderTexture rt = new RenderTexture((int)x, (int)y,0);

        rt.useMipMap = true;
rt.filterMode = FilterMode.Bilinear;
rt.depth = 0;
rt.generateMips = true;
rt.Create();
GetComponent<Camera>().targetTexture = rt;

        // 调整cemara的范围以适应rt
float cameraSize = y / 2;
GetComponent<Camera>().orthographicSize = cameraSize;
//float r = (float)Screen.width / Screen.height;
//float r_x =  x / ( y * 1);
//GetComponent<Camera>().orthographicSize = cameraSize;
//GetComponent<Camera>().rect = new Rect(0, 0, r_x, 1);

        // 保持旧的位置
m_TargetOldPosition = target.transform.position;
m_TargetOldEulerAngles = target.transform.eulerAngles;
m_TargetOldScale = target.transform.localScale;
//m_TargetOldLayer = target.layer;

        // 移动目标到摄像机处,保证只有目标在摄像机的范围内
// 由于此用一个极远的位置,此处只有目标,所有可以不用设置layer
Vector3 pos = transform.position;
pos.z = 0;
target.transform.localScale = Vector3.one;
target.transform.position = pos;
target.transform.eulerAngles = Vector3.zero;
//target.layer = RTGenLayer;

        return rt;
}

    void _End(GameObject target)
{
// 还原
target.transform.position = m_TargetOldPosition;
target.transform.eulerAngles = m_TargetOldEulerAngles;
target.transform.localScale = m_TargetOldScale;
//target.layer = m_TargetOldLayer;
}

    public RenderTexture CreateOutterline(GameObject target, float x, float y)
{
int iterations = 5;
float spread = 0.5f;

        RenderTexture rt = _Begin(target, x, y);

        GetComponent<Camera>().RenderWithShader(m_SolidMat.shader, "");

        _End(target);

        iterations = Mathf.Clamp(iterations, 0, 15);
spread = Mathf.Clamp(spread, 0.5f, 6.0f);

        RenderTexture buffer = RenderTexture.GetTemporary(rt.width, rt.height, 0);
RenderTexture buffer2 = RenderTexture.GetTemporary(rt.width, rt.height, 0);
//buffer2.filterMode = FilterMode.Bilinear;
//buffer.filterMode = FilterMode.Bilinear;
//rt.filterMode = FilterMode.Bilinear;
Graphics.Blit(rt, buffer);

        bool oddEven = true;
for (int i = 0; i < iterations; i++)
{
if (oddEven)
_FourTapCone(buffer, buffer2, i, spread);
else
_FourTapCone(buffer2, buffer, i, spread);
oddEven = !oddEven;
}
if (oddEven)
{
Graphics.Blit(rt, buffer, m_CutoffMaterial);
Graphics.Blit(buffer, rt, m_CompositeMaterial);
}
else
{
Graphics.Blit(rt, buffer2, m_CutoffMaterial);
Graphics.Blit(buffer2, rt, m_CompositeMaterial);
}       

        RenderTexture.ReleaseTemporary(buffer);
RenderTexture.ReleaseTemporary(buffer2);
return rt;
}

    void _FourTapCone(RenderTexture source, RenderTexture dest, int iteration, float spread)
{
float off = 0.5f + iteration * spread;
Graphics.BlitMultiTap(source, dest, m_BlurMaterial,
new Vector2(off, off),
new Vector2(-off, off),
new Vector2(off, -off),
new Vector2(-off, -off)
);
}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
OutterlineRenderer
OutterlineRenderer是目标GameObject的子GameObject,用来绘制轮廓。

提供CreateOutlineRenderer静态方法,target调用该静态方法来创建一个OutterlineRenderer子节点。
FindOrCreateOutlineRenderer静态方法是对CreateOutlineRenderer的封装,对于已存在OutterlineRenderer则不再创建。
通过color属性,设置轮廓颜色
代码:

using UnityEngine;
using System.Collections;

public class OutterlineRenderer : MonoBehaviour
{
Material m_Material;
public RenderTexture m_RT;

    public static OutterlineRenderer FindOrCreateOutlineRenderer(Unit target)
{
Transform t =  target.transform.Find("OutterlineRenderer");
if (t == null)
return CreateOutlineRenderer(target);
else
return t.GetComponent<OutterlineRenderer>();
}

    public static OutterlineRenderer CreateOutlineRenderer(Unit target)
{
float x = target.bound.size.x * 2;
float y = target.bound.size.y * 2;
RenderTexture rt = EffectRTGenerator.Inst().CreateOutterline(target.gameObject, x, y);

        string path = "Misc/OutterlineRenderer";
GameObject type = Resources.Load<GameObject>(path);
if (type == null)
{
rt.Release();
return null;
}
GameObject go = GameObject.Instantiate(type);
go.name = type.name;

        go.GetComponent<OutterlineRenderer>().Init(rt, x, y, Color.white);

        go.transform.parent = target.transform;
go.transform.localPosition = new Vector3(0, 0, 1f);
go.transform.localScale = Vector3.one;
go.transform.localEulerAngles = Vector3.zero;

        return go.GetComponent<OutterlineRenderer>();
}

    public Color color
{
get{
return gameObject.GetComponent<MeshRenderer>().material.color;
}
set{
gameObject.GetComponent<MeshRenderer>().material.color = value;  
}

    }

    void Init(RenderTexture rt, float x, float y ,Color color)
{
Mesh mesh; 

        MeshRenderer renderer = gameObject.GetComponent<MeshRenderer>(); 
mesh = GetComponent<MeshFilter>().mesh;

        /* 6 7
* 4 5
* 2 3
* 0 1
*/

        int sectionCount = 1;
int[] triangles = new int[ sectionCount * 6];  
Vector3[] vertices = new Vector3[ sectionCount * 4];
Color[] colors = new Color[ sectionCount * 4];
Vector2[] uv = new Vector2[ sectionCount * 4];
for (int i = 0; i < sectionCount; i++)
{  
vertices[4 * i] = new Vector2(-x / 2, -y / 2);
vertices[4 * i + 1] = new Vector2(x / 2, -y / 2);
vertices[4 * i + 2] = new Vector2(-x / 2, y / 2);
vertices[4 * i + 3] = new Vector2(x / 2, y / 2);
colors[4 * i] = Color.white;
colors[4 * i + 1] = Color.white;
colors[4 * i + 2] = Color.white;
colors[4 * i + 3] = Color.white;
uv[4 * i] = new Vector2(0, 0);
uv[4 * i + 1] = new Vector2(1, 0);
uv[4 * i + 2] = new Vector2(0, 1);
uv[4 * i + 3] = new Vector2(1, 1);
}  

        for (int i = 0; i < sectionCount; i++)
{  
triangles[6 * i] = (i * 4) + 0;  
triangles[6 * i + 1] = (i * 4) + 3;  
triangles[6 * i + 2] = (i * 4) + 1; 
triangles[6 * i + 3] = (i * 4) + 0;  
triangles[6 * i + 4] = (i * 4) + 2;  
triangles[6 * i + 5] = (i * 4) + 3; 
}

        mesh.vertices = vertices;  
mesh.triangles = triangles;
mesh.colors = colors;
mesh.uv = uv;

        m_RT = rt;
m_Material = new Material(Shader.Find("Outterline/Render"));
m_Material.hideFlags = HideFlags.HideAndDontSave;
renderer.material = m_Material;
renderer.material.color = color;
renderer.material.mainTexture = rt;

    }

    void OnDestroy()
{
DestroyImmediate(m_Material);
DestroyImmediate(m_Material);
}

    public void Hide()
{
gameObject.SetActive(false);
}

    public void Show()
{
gameObject.SetActive(true);
}
}

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 基于python实现网课一键完成系列一

    最近看了公众号的后台数据,发现很多人对刷网络学时的关注度比较高,所以最近利用工作之余的时间,又捣腾了一个网络学习平台,下面就介绍下整个流程,以下内容仅做技术交流。首先,这是一个官方的网络学习平台,在网页的左上角处有一个登录窗口,通过刷新界面抓包可以获取到验…...

    2024/5/7 15:10:44
  2. LeetCode127【BFS】:单词接龙

    package leetcode.editor.cn;//给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度。转换需遵循如下规则: // // // // 每次转换只能改变一个字母。 // 转换过程中的中间单词必须是字典中的单词。 // // // 说明: // /…...

    2024/5/8 6:54:49
  3. Android——初识OpenGL ES 2.0

    概念 OpenGL(Open Graphics Library)是一个跨平台的高性能3D渲染API,OpenGL ES 2.0(Open Graphics Library Embedded System 2.0)是它的嵌入式平台2.0版本。 简单实现 在Activity里面,创建一个GLSurfaceView对象,然后当作Activity的布局,并实现一个Renderer接口,塞给G…...

    2024/4/23 14:19:10
  4. 通过GET/POST方式获取第三方接口的数据

    前言遇到一个项目,需要通过API去获取数据,API接口的调用方式支持GET和POST。一开始不懂这个API具体是个啥,是需要我们自己设计还是说用户给定,后续搜索明确是用户自定义提供API接口,开发人员只需要获取到API的url及调用这个API所需要的必要参数,然后分别以GET/POST方式连…...

    2024/5/7 13:05:53
  5. buuoj BJDCTF 2nd one_gadget

    程序输出printf函数地址可以利用工具one_gadget计算libc基址from pwn import *#p = process(./one_gadget) p = remote("node3.buuoj.cn",26742)out = p.recv()addr = int(out[out.find(0x)+2:out.find(0x)+14],16)log.success(addr)local_libc = ELF(./libc-2.29.so…...

    2024/5/8 1:07:27
  6. python常见的内置模块

    python的常见内置模块 |-- os、os.path |-- sys |-- random |-- math |-- base64 |-- hashlib |-- hmac |-- time |-- datetime …… 1,什么是模块 定义的XXX.py文件 2、模块的分类 通过模块的创建者 |-- 系统内置模块 |-- uuid、os、math、random python官方提供的cpython解释…...

    2024/4/23 14:19:01
  7. 理解Pytorch里面nn.CrossEntropyLoss的含义

    理解Pytorch里面nn.CrossEntropyLoss的含义先说nn.CrossEntropyLoss的参数,如果神经网络的输出output是一个(batch_size, num_class, h, w)的tensor(其中,num_class代表分类问题的类别数,h为图像高度,w为图像宽度),则nn.CrossEntropyLoss需要的label形状为(batch_size, h,…...

    2024/5/7 21:01:12
  8. 什么是redis,redis能做什么,redis的应用场景

    1、什么是Redis Redis是一款内存高速缓存数据库。Redis全称为:Remote Dictionary Server (远程数据服务),使用C语言编写,Redis是一个key-value存储系统(键值存储系统),支持丰富的数据类型,如:String、list、set、zset、hash。Redis是一种支持key-value等多种数…...

    2024/5/7 13:31:57
  9. 【剑指Offer】面试题05.替换空格

    题目输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2] 输出:[2,3,1]限制:0 <= 链表长度 <= 10000思路一:反转数组代码时间复杂度:O(n) 空间复杂度:O(1)class Solution { public:vector<int> reversePrint(…...

    2024/4/15 8:36:53
  10. 004-Python-100-Day

    循环结构 1.for-in循环 2.while循环 练习1:输入一个正整数判断是不是素数。 from math import sqrt a = int(input(‘请输入一个正整数:’)) end = int(sqrt(a)) is_prime = True for i in range(2,end+1): if a % i == 0: is_prime = False break if is_prime and a != 1: p…...

    2024/4/18 6:54:55
  11. Leetcode之合并K个排序链表

    题目描述 合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 思路首先遍历所有链表,将对应的数值保存到数组中,之后遍历数组创建新的链表即可 分治:每个链表先与下一个链表融合,这样讲链表总数从k将至k/2,重复直至链表总数为1,返回头部指针即可代码 …...

    2024/4/17 8:13:28
  12. 2020-03-25

    今天是我在csdn写的第一篇博客。 首先做一下自我介绍。我叫张馥麟,来自辽宁沈阳。现在在陕西科技大学就读数学专业。如今在上大二。爱好广泛。擅长打篮球,跳街舞,跆拳道,打游戏等。 我在大一下学期学习了C语言和C++。但是感觉还有很多不会和疑惑的地方在日后有待提升。我比…...

    2024/4/20 6:18:54
  13. 微信小程序案例源码-cocos creator跨平台开发小游戏案例

    本人一直想学习游戏开发,以前做过Android游戏开发,但电脑坏了,所有源码都没有了,后面也就没有开发了,近来下班之余又想开发游戏了。开发游戏之前,需要考虑开发平台及语言,以前基于Android开发,但是只能够运行在Android手机上,开发成本很高。当前各种小游戏平台十分火爆…...

    2024/4/23 14:18:57
  14. 如何连接数mysql据库

    仔细看哦 package JDBCTest; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; 上面的那部分是导入的各种类 public class JDbc { String username=“root”; String passwo…...

    2024/5/4 11:27:45
  15. Python多线程threading join和守护线程setDeamon原理详解

    同一进程下的多个线程共享内存数据,多个线程之间没有主次关系,相互之间可以操作;cpu执行的都是线程,默认程序会开一个主线程;进程是程序以及和程序相关资源的集合;某些场景下我们可以使用多线程来达到提高程序执行效率的目的,下面就多线程的一些基础知识做简要说明 简单…...

    2024/4/23 14:18:57
  16. 改进Face/Detect

    ##改进Face/Detect 现在Face/Detect和Face/Verify将支持将用户提交的结果持久化。我们先考虑下Face/Detect现在的变化,原先我们的流程是:从微信客户端获得mediaID,通过这个mediaID从微信服务器下载图片,然后将这个图片提交给牛津,以获得FaceID Created with Raphal 2.2.0开…...

    2024/4/23 14:19:02
  17. LINUX音频驱动架构

    https://www.jianshu.com/p/0f5fe8f51b66从CODEC的接口和内部模块分析各种功能从接口上看,有:INL-连接音响设备,输入模拟声音信号MIC-连接麦克风,输入模拟语音信号DMIC-连接数字麦克风,输入数字音频信号I2S/PCM-连接CPU,输入数字音频信号CONTROL INTERFACE-输入控制信号H…...

    2024/5/6 18:43:38
  18. python并发编程多进程之守护进程原理解析

    这篇文章主要介绍了python并发编程多进程之守护进程原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考 守护进程 主进程创建子进程目的是:主进程有一个任务需要并发执行,那开启子进程帮我并发执行任务 主进程创建子进…...

    2024/4/23 14:19:00
  19. 安卓练习:Butterknife用法及介绍

    ButterKnife介绍ButterKnife是一个专注于Android系统的View注入框架,以前总是要写很多findViewById来找到View对象,有了ButterKnife可以很轻松的省去这些步骤。是大神JakeWharton的力作,目前使用很广。最重要的一点,使用ButterKnife对性能基本没有损失,因为ButterKnife用到…...

    2024/4/23 14:18:51
  20. python并发编程多进程 互斥锁原理解析

    这篇文章主要介绍了python并发编程多进程 互斥锁原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 运行多进程 每个子进程的内存空间是互相隔离的 进程之间数据不能共享的 互斥锁 但是进程之间都是运行在一个操作系…...

    2024/4/23 14:18:50

最新文章

  1. 控制元素隐藏

    一、隐藏元素 在CSS中&#xff0c;有几种方法可以隐藏元素&#xff0c;每种方法都有其特定的用例和效果。以下是一些常用的CSS属性和技巧&#xff0c;用于隐藏元素&#xff1a; display: none; 这是最常用的隐藏元素的方法。它会将元素完全从文档流中移除&#xff0c;元素不会…...

    2024/5/8 8:34:18
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/5/7 10:36:02
  3. HIS系统是什么?一套前后端分离云HIS系统源码 接口技术RESTful API + WebSocket + WebService

    HIS系统是什么&#xff1f;一套前后端分离云HIS系统源码 接口技术RESTful API WebSocket WebService 医院管理信息系统(全称为Hospital Information System)即HIS系统。 常规模版包括门诊管理、住院管理、药房管理、药库管理、院长查询、电子处方、物资管理、媒体管理等&…...

    2024/5/7 12:48:55
  4. 不重复数字

    map就感觉很舒服 题目描述 给定 n 个数&#xff0c;要求把其中重复的去掉&#xff0c;只保留第一次出现的数。 输入格式 本题有多组数据。 第一行一个整数 T&#xff0c;表示数据组数。 对于每组数据&#xff1a; 第一行一个整数 n。 第二行 n 个数&#xff0c;表示给定的数。…...

    2024/5/7 10:34:48
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/8 6:01:22
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/7 9:45:25
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/5/4 23:54:56
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/7 14:25:14
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/5/4 23:54:56
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/5/4 23:55:05
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/5/4 23:54:56
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/5/7 11:36:39
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/5/4 23:54:56
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/6 1:40:42
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/5/4 23:54:56
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/5/4 23:55:17
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/5/7 9:26:26
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/5/4 23:54:56
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/4 23:55:06
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/5 8:13:33
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/5/4 23:55:16
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/5/4 23:54:58
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/6 21:42:42
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/5/4 23:54:56
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57