12. 动态加载资源:
obj = Instantiate(Resources.Load("AssembleTestPrefabs/235A-3")) as GameObject;
文件目录结构为:Resources/AssembleTestPrefabs/235A-3
13. ulua->tolua;xlua:tencent
14. UNITY加载场景:using UnityEditor.SceneManagement; EditorSceneManager.LoadScene("SceneName");//重新打开ScnenName 场景上面的仅仅在编译时可以用,但是打包时就会出现错误,因为你使用了Editor文件
下面的可以不使用Editor:using UnityEngine.SceneManagement;
SceneManager.LoadScene (0);或者(“scenename”’)
15. Ctrl+D的时候不要忘记将克隆源上绑定的代码和设置。
16. List
MySubject ms = new MySubject();
ms= CurrentSubjects[CurrentNumIndex];
ms.SetCurrentSubAnser(0);
CurrentSubjects[CurrentNumIndex] = ms;
17. RenderTexture的应用:首先新建一个RenderTexture,拖至Camera的TargetTexture处,然后将此RenderTexture拖至NGUI –>Texture的Texture处或者新建一个材质,将材质shader修改出有texture属性的,在texture属性处选中这个RenderTexture,然后将此材质赋值给NGUI –>Texture;(关于大小的问题,是否可以不用Texture控件而改成Sprite,还没有进行试验)。
使用render texture时摄像机可以调成depth only或者Solid Color(去掉边框)
18.NGUI按钮持续按下代码方法:将下面代码挂载在需要的按钮上
void OnPress(bool isPressed)
{
bool fire = isPressed;
if(fire)//按下中
{
MyAudioManager.BuzzerPlay();//蜂鸣器声音播放
}else//按钮抬起
{
MyAudioManager.BuzzerStop();//蜂鸣器声音停止
}
}
19.延时运行:
1.Invoke(函数名称字符串,几秒种后执行); 这种调用方法只会执行一次。
2.InvokeRepeating(函数名称字符串,几秒钟后开始,间隔秒数);这种调用方法就像一个计
可以得到的属性:
1. IsInvoking() 只要有Invoke在运行,就返回true.
2. IsInvoking(函数名字符串) 当这个函数正在Invoke的时候返回true
3. CancelInvoke([函数名字符串]) 取消所有Invoke或者对应Invoke
20.做界面的时候一定要先调好自适应,不然之后屏幕比例改变再更改会很麻烦。
21.unity asset store 插件下载目录:C:\Users\Administrator\AppData\Roaming\Unity\Asset Store-5.x
22.animation动画制作的时候如果想让动画不受模型影响,就在需要刻动画的物体上面添加一个空物体。
23.animation动画添加事件的时候要在和animator同级的物体上绑定代码。
24.不同语句如果排列顺序不同,效果可能也会不同。比如自己编写的摄像头移动类,lookat要放在鼠标更改位置之后才能防止摄像头抖动。
25.使animator控制的动画在某个点开始播放的函数:MyAnimator.ForceStateNormalizedTime(0.5f);//取值为0~1
26.取得animator控制的动画在某个点的值(进度):MyAnimator.GetCurrentAnimatorStateInfo(0).normalizedTime;//取值为0~1 注意其中在不播放时这个值会大于1持续增长。
27.Unity中游戏暂停和开始怎么实现?
最简单的是设置Time.timeScale = 0,即可让游戏暂停,也可以使用Time.timeScale来做游戏的 1倍2倍整体加速,但要记住无论Time.timeScale等于多少Update和LateUpdate都会去执行,所以这两个方法里面需要自己用代码控制。而且如果游戏暂停以后想在暂停界面上继续播放一些不受Time.timeScale影响的动画或者粒子特效之类的,那么我们就需要用到Time.realtimeSinceStartup去单独恢复他们,还有声音部分也需要单独恢复timeScale。
最大的影响是,在timeScale=0时无法实现暂停菜单的动画以及各种漂亮的点击效果。
如果只想暂停某部分,或者为了更多需求和可扩展性,还是需要自己写个相关的Manager来手动管理游戏的暂停和开始。
28.设置animator动画为不受timescale影响:获取自身的Animator组件,把它的updateMode设置为Animator.updateMode = AnimatorUpdateMode.UnscaledTime;
Animator就不受timeScale的影响了,要恢复就设成原来的
= AnimatorUpdateMode.Normal;
29.Time类:
只读:
Time.time:表示从游戏开发到现在的时间,会随着游戏的暂停而停止计算。
Time.deltaTime:表示从上一帧到当前帧的时间,以秒为单位。
Time.unscaledDeltaTime:不考虑timescale时候与deltaTime相同,若timescale被设置,则无效。
Time.timeSinceLevelLoad:表示从当前Scene开始到目前为止的时间,也会随着暂停操作而停止。
Time.unscaledTime:不考虑timescale时候与time相同,若timescale被设置,则无效。
Time.fixedDeltaTime:表示以秒计间隔,在物理和其他固定帧率进行更新,在Edit->ProjectSettings->Time的Fixed Timestep可以自行设置。
Time.realtimeSinceStartup: 表示自游戏开始后的总时间,即使暂停也会不断的增加。
Time.frameCount:总帧数
可读可写:
Time.fixedTime:表示以秒计游戏开始的时间,固定时间以定期间隔更新(相当于fixedDeltaTime)直到达到time属性。
Time.SmoothDeltaTime:表示一个平稳的deltaTime,根据前 N帧的时间加权平均的值。
Time.timeScale:时间缩放,默认值为1,若设置<1,表示时间减慢,若设置>1,表示时间加快,可以用来加速和减速游戏,非常有用。
Time.captureFramerate:表示设置每秒的帧率,然后不考虑真实时间。
30.获取当前Animator播放动画的名字:
AnimatorStateInfo Info = Animator.GetCurrentAnimatorStateInfo(0);
if (Info.IsName("New State"))
31. UGUI Scroll 添加上Scroll Rect和Mask:引用两个接口,按页滑动 差值 使界面在最近位置停下 代码如下
public class NewBehaviourScript : MonoBehaviour,IBeginDragHandler,IEndDragHandler
{
private ScrollRect scrollRect;
private float[] pageArray = new float[]{0,0.333f,0.666f,1};
private float targetHorizontalPositon = 0;
private bool isDraging = false;
public float smoothing = 4;
// Use this for initialization
void Start ()
{
scrollRect = GetComponent();
}
void Update()
{
if (isDraging == false)
scrollRect.horizontalNormalizedPosition = Mathf.Lerp(scrollRect.horizontalNormalizedPosition,
targetHorizontalPositon, Time.deltaTime * smoothing);
}
public void OnBeginDrag(PointerEventData eventData)
{
isDraging = true;
}
public void OnEndDrag(PointerEventData eventData)
{
isDraging = false;
float posX = scrollRect.horizontalNormalizedPosition;
int index = 0;
float offset = Mathf.Abs(pageArray[index] - posX);
for (int i = 1; i < pageArray.Length; i++)
{
float offsetTemp = Mathf.Abs(pageArray[i] - posX);
if (offsetTemp < offset)
{
index = i;
offset = offsetTemp;
}
}
targetHorizontalPositon = pageArray[index];
toggleArray[index].isOn = true;
//scrollRect.horizontalNormalizedPosition = pageArray[index];
}
}
32.C#扩展方法 百度。注意类名和方法名都要设置成static,在其他地方的时候要using这个类的命名空间,注意:方法名参数第一个参数指定该方法作用于哪个类型,并且该参数以this修饰符为前缀。
33.世界坐标系转屏幕坐标系:
UGUI:
Vector2 player2DPosition = Camera.main.WorldToScreenPoint(targetTransform.position);//方法
rectTransform.position = player2DPosition + new Vector2(xOffset, yOffset);
Vector2 pos = RectTransformUtility.WorldToScreenPoint(Camera.main,targetTransform.position);//方法二
rectTransform.position = pos + new Vector2(xOffset, yOffset);
NGUI:
guiCamera = NGUITools.FindCameraForLayer(this.gameObject.layer); //通过脚本所在物体的层获得相应层上的相机
Vector3 pos = worldcamera.WorldToScreenPoint(TargetObject.transform.position);//获取目标物体的屏幕坐标
pos = guiCamera.ScreenToWorldPoint(pos); //将屏幕坐标转换为UI的世界坐标
pos.z = 0; //由于NGUI 2D界面的Z轴都为0,这里我们将坐标修改为0.只取其X,Y坐标。
transform.position = new Vector3(pos.x -0.2f, pos.y + .30f, pos.z);//将修改过的坐标赋给UI界面。这里指Panel_CharacterInfo
34.lambda+DoTween修改一个variable的值:
DOTween.To(() => myValue, x => myValue = x, new Vector3(10, 10, 10), 2);
35.关于DoTween的一些操作:http://dotween.demigiant.com/
Tweener tweener = panelTransform.DOLocalMove(new Vector3(0, 0, 0), 0.3f);
tweener.SetAutoKill(false);//修改不会自动删除这个tween
tweener.Pause();//暂停动画
tweener.SetEase(Ease.Linear);//设置播放方式
tweener.SetLoops(2);//设置循环播放几次
tweener.OnComplete(OnTweenComplete);//设置播放完之后执行的函数
panelTransform.DOPlayForward();向前播放
panelTransform.DOPlayBackwards();向后播放 回放
text.DOText("text", 1);//一个个出字
this.transform.DOShakePosition(1,new Vector3(3,3,0));//抖动
Material.DOColor(Color.red,“_TinyColor”,2);
text.DOColor(Color.red, 2);//更改颜色
text.DOFade(1, 3);//更改透明度 0~1
DoTweenAnimation脚本,可视化。
DoTweenPath:路径。DoTweenPath.DOTogglePause;暂停与播放
transform.DOBlendableLocalMoveBy(Vector3.one, 2);
material.DOGradientColor(_gradient, "_TintColor", 2);//颜色渐变
material.DOOffset();
material.DOVector(Color.clear,"_TintColor",2);
material.DOBlendableColor(Color.red,"_Color", 2);//颜色混合
material.DOBlendableColor(Color.yellow, "_Color",2);//颜色混合
36.DOTween相机的一些方法:
camera.DOAspect(0.5f, 1);//改变宽高比
camera.DOColor(Color.red, 2);//改变背景颜色
camera.DONearClipPlane();//近切面
camera.DOFarClipPlane();//远切面
camera.DOFieldOfView(1, 2);//第一个值越小所看到的物体越大
camera.DOOrthoSize();//正焦模式下的size值
camera.DOPixelRect(new Rect(0,0,500,500), 2);//渐变相机的像素区域
camera.DORect();//Viewport Rect 多相机分屏
37.DoTween队列:
Sequence quence = DOTween.Sequence();
quence.Append(transform.DOMove(Vector3.one, 2));//向队列里面添加动画
quence.AppendInterval(1);//间隔一秒
quence.Append(transform.DOMove(new Vector3(1,0,0), 2));//向队列里面添加动画
quence.Insert(0, transform.DOMove(-Vector3.one, 2));//在第0秒插入一段动画 会覆盖之前0秒的动画。如果和插入点动画效果不同则两个都生效,否则覆盖。
quence.Join(transform.DOMove(-Vector3.one, 2));//添加到上一个动画中,一起执行
quence.PrependInterval(1);
quence.Prepend(quence.Join(transform.DOMove(-Vector3.one, 2)));//预添加 后添加的先执行 一般添加到(所有)Append之前 开口向上 append开口向下
quence.InsertCallback(5,CallBackFunName);//在第5秒的时候调用一个函数
quence.PrependCallback(CallBackFunName);//在预添加的时候调用函数
//DoTween设置参数:
TweenParams param = new TweenParams();
param.SetLoops(3, LoopType.Yoyo);
transform.DOMove(Vector3.one*3, 1).SetAs(param).SetEase(Ease.Linear);//链式编程
transform.DOMove(Vector3.one * 3, 1).From(true);//From是从结束到开始 加上true变成相对运动
transform.DOMove(Vector3.one * 3, 1).SetDelay(3);//延时3秒再动
transform.DOMove(Vector3.one * 3, 2).SetSpeedBased();//(里面加或不加true)以速度为基准 每秒运行2个unity单位 加false和不写这条一样
transform.DOMove(Vector3.one * 3, 2).SetId("ID");
DOTween.Play("ID");//调用上面缓存的动画
transform.DOMove(Vector3.one * 3, 2).SetRecyclable(true);//动画可回收
transform.DOMove(Vector3.one * 3, 1).SetRelative(true);//增量运动 相对运动
transform.DOMove(Vector3.one * 3, 1).SetUpdate(UpdateType.Normal,true);//true 不受timescale影响
transform.DOMove(Vector3.one * 3, 1).SetEase(Ease.Linear);//设置为线性 flash有3个重载参数 曲线运动查询网:http://robertpenner.com/easing/easing_demo.html
public AnimationCurve _curve;
transform.DOMove(Vector3.one * 3, 1).SetEase(_curve);//自定义曲线
transform.DOMove(Vector3.one, 1).SetEase(EaseFun);//自定义函数 如下
private float EaseFun(float time, float duration, float overshootOrAmplitude, float period){
return time / duration;//返回值控制在0~1之间才成到达正确地址
}
transform.DORewind();
transform.DOSmoothRewind();
transform.DOFlip();//反转补间
transform.DOGoto(3,true);//跳转到第3秒 然后播放
transform.DOPlayBackwards();//反向播放动画
transform.DOPlayForward();//正向播放动画
transform.DOTogglePause();//运行的时候播放暂停,暂停的时候播放
var list = DOTween.PausedTweens();//获得暂停的所有动画
var list2 = DOTween.PlayingTweens();//获得播放的所有动画
var list3 = DOTween.TweensById("ID",true);//获得ID的动画 true代表当前播放的动画
var list4 = DOTween.TweensByTarget(transform,true);//获得transform上的动画,true代表播放时的动画
var list5 = DOTween.IsTweening("ID",true);//是否有这个动画正在执行 如果加true 播放暂停时都检测是否有
var list6 = DOTween.TotalPlayingTweens();//当前所有播放的动画数组
var tweener = transform.DOMove(Vector3.one * 2, 2);
await Task.Delay(TimeSpan.FromSeconds(1));
Debug.Log(tweener.fullPosition);
await Task.Delay(TimeSpan.FromSeconds(0.5f));
tweener.fullPosition = 0;//从0秒开始播放动画
Debug.Log(tweener.CompletedLoops());//完成的循环次数
tweener.Delay();//延时
tweener.Duration(false);//持续时间 false 为一次时间 true为循环总和时间
tweener.Elapsed(false);//当前已经播放的时间 false 不包含循环 true包含
tweener.ElapsedDirectionalPercentage();//播放进度的百分比
38.出现这种原来是好的 突然不行了的情况如下面NGUI的label坏了的情况,建议删除library文件夹然后重新打开项目
unlit/transparent colored shader doesn't have a clipped shader version for 1 clip regions
39.BUTTON长按事件:
NGUI:
void OnPress(bool isPressed){}//绑定到需要长按的BUTTON上。
UGUI:
一:创建一个脚本,继承自Button,在UpDate中判断 IsPressed().来执行。
二:通过下面代码创建一个脚本,然后将绑定到button上(其他UI也可以,如果不显示就重新编译下重新挂上),就可以拖拽实现需要运行的代码(长按):
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;
public class RepeatPressEventTrigger : MonoBehaviour,IPointerDownHandler,IPointerUpHandler,IPointerExitHandler
{
public float _interval = 0.1f;
[SerializeField]
public UnityEvent m_OnLongpress = new UnityEvent();
private bool isPointDown = false;
private float lastInvokeTime;
private int i;
// Use this for initialization
void Start ()
{
i = 0;
}
public void PressDebug()
{
i++;
Debug.Log(i.ToString());
}
// Update is called once per frame
void Update () {
if (isPointDown)
{
if (Time.time - lastInvokeTime>_interval)
{
m_OnLongpress.Invoke();
lastInvokeTime = Time.time;
}
}
}
public void OnPointerDown(PointerEventData eventData)
{
m_OnLongpress.Invoke();
isPointDown = true;
lastInvokeTime = Time.time;
}
public void OnPointerUp(PointerEventData eventData)
{
isPointDown = false;
}
public void OnPointerExit(PointerEventData eventData)
{
isPointDown = false;
}
}
40.转换int: Int32.Parse(idvalue.ToString());
41.Alt + Insert,然后选择formatting members可以重写tostring方法。需要resharper?
42.Mesh合并:
///
/// Mesh合并
///
void MeshCombine()
{
MeshFilter[] filters = GetComponentsInChildren();
CombineInstance[] combiners = new CombineInstance[filters.Length];
for (int i = 0; i < filters.Length; i++)
{
combiners[i].mesh = filters[i].sharedMesh;
combiners[i].transform = filters[i].transform.localToWorldMatrix;
}
Mesh finalMesh = new Mesh();
finalMesh.CombineMeshes(combiners);
//下面合并 注意添加meshfilter & mesh renderer;
GetComponent().sharedMesh = finalMesh;
}
43.有的地方字段设置成属性可以控制访问权限,在set前加上private。属性可以做单例模式。
44.assetstore中插件下载位置:Windows系统下,Unity商店的默认插件保存在:“C:\Users(或者用户)\你的登录用户名\AppData\Roaming\Unity\Asset Store-5.x”中,Asset Store-5.x是Unity的版本。而Mac则是在“~/Library/Unity/Asset Store”下。请注意,在Windows中AppData目录是一个隐藏目录,你可以在地址栏中输入这个目录来进入这个隐藏文件夹。
C:\Users\Administrator\AppData\Roaming\Unity\Asset Store-5.x
45.合并模型:性能优化视频12课。好像可以减少drawcall
46.3D UGUI 中的字体按T后调大字体大小,然后然R缩放会解决字体失真的问题。
47.遮罩效果使用mask,需要显示的为mask 图片的子物体。
48.当声音出现问题无声的时候检查是不是有多余的Audio Listener,一般在摄像头上。
49. Debug.Log("当前播放时长(秒,可赋值,从赋值时间开始播放)" + ThisAudioSource.time);
Debug.Log("当前音乐总长度(秒)" + ThisAudioSource.clip.length);
50.使射线不穿透UGUI:
if (Physics.Raycast(ray, out hitInfo, targetingRayLength, targetingLayerMask.value)&& !EventSystem.current.IsPointerOverGameObject())
{
// Cache what we've hit
targetTransform = hitInfo.collider.transform;
}
51.这是由于你当前登陆的 Unity 账户不在项目的成员列表中。
如果这个项目从头到尾都是你在做,而且之前打包是没问题的,那么很可能是你创建项目时的 Unity 账户跟当前登陆的 Unity账户不同(创建项目时未登录现在登陆了,或者创建项目时登陆了现在未登录,或者项目是别人创建的你拿过来用等等)
【解决方法】
打开服务选项卡(点击窗口-->服务,或者直接快捷键 ctrl + 0)。
点 new link --> 选择自己的Unity 账号 --> create
然后将自己的账号加进去就好了。
52.Asset-》run API update
53.为了保证数据执行顺序最好自己写个init方法调用而不直接写在start中。
54.ToString(“F1”);ToString(“0.00”);可以控制float类型小数点后几位。
55.按住V可以更好的摆放物体,使物体相挨着。
56.射线有时会被触发器Trigger拦截,导致达不到预期效果,只用取消Edit->project settings->physics中的Queries hit triggers对勾,即可设置Raycast投射出的射线不与触发器发生碰撞。
57.C:\Users\Administrator>d:
d:\>cd 参考项目
d:\参考项目>TREE>DLIST.TXT /F
58.DOTween和UGUI做UI位移的时候注意可以使用localPosition来定位,一般设置成自适应后屏幕大小是Canvas Scaler 中Reference Resolution的大小。(好像只适用于全屏大小的UI)。最佳的还是用下面代码实现:
先设置好anchor和pivot。通过pivot移动到anchor的位置。
((RectTransform)this.transform).anchoredPosition = new Vector3(0, -this.GetComponent().rect.height / 2, 0);
if (GUI.Button(new Rect(111,111,111,111),"move" ))
{
if (Display)
{
Display = false;
((RectTransform)this.transform).DOAnchorPos(
new Vector2(0, -this.GetComponent().rect.height / 2), 0.5f);
}
else
{
Display = true;
((RectTransform)this.transform).DOAnchorPos(
new Vector2(0, this.GetComponent().rect.height / 2), 0.5f);
}
}
59.UGUI Button 添加事件:
buttonObj = GameObject.Find("Button");
buttonObj.GetComponent
60.要有明确的目标。
61.关闭协程只能关闭当前类里面的协程,关闭其他类协程要通过类的实例调用。
62.类中public的东西最好不要用拖拽的方式,使用代码得到会保险一些。
63.单例类(类名不用加static)可以当全局的管理类。
64.鼠标控制放大缩小旋转物体:
float horizontal = Input.GetAxis("Horizontal"); //获取横轴参数。(如:按A键返回-1 按D键返回+1,但中间有一个过度,而不是直接变-1或+1。)
float vertical = Input.GetAxis("Vertical"); //获取垂直参数。
//Debug.Log("horizontal: " + horizontal + ",vertical:" + vertical);
float mouseX = Input.GetAxis("Mouse X");//获取鼠标X轴滑动参数
float mouseY = Input.GetAxis("Mouse Y");//获取鼠标Y轴滑动参数
//Debug.Log("mouseX: " + mouseX + ",mouseY:" + mouseY);
float mouseScrollWheel = Input.GetAxis("Mouse ScrollWheel");
//if (Vector3.Distance(this.transform.position, mInitPosition) <= 2.0f)
{
//键盘ADWS键控制物体移动。(当乘以Time.deltaTime实际表示:每秒移动物体N米,而不是每帧N米。)
this.transform.Translate(new Vector3(-horizontal * Time.deltaTime * moveSpeed, 0, vertical * Time.deltaTime * moveSpeed));
}
if (Input.GetMouseButton(1))
{
//鼠标XY轴滑动控制物体旋转
this.transform.Rotate(new Vector3(Input.GetAxis("Mouse Y") * Time.deltaTime * 200, -Input.GetAxis("Mouse X") * Time.deltaTime * 200, 0), Space.World);
//this.transform.Rotate(new Vector3(-mouseY * Time.deltaTime * rotateSpeed, 0, -mouseX * Time.deltaTime * rotateSpeed),Space.Self);
}
//鼠标中键控制物体缩放
this.transform.localScale += new Vector3(mouseScrollWheel, mouseScrollWheel, mouseScrollWheel);
65.UGUI制作部件介绍UI的时候,设置这个现实UI的pivot为左上后就不用了计算偏移量了。
66.鼠标旋转物体:gameObject.transform.Rotate(new Vector3(Input.GetAxis("Mouse Y") * Time.deltaTime * 200, -Input.GetAxis("Mouse X") * Time.deltaTime * 200, 0),Space.World);
67.让未激活的物体及其子物体也打印出来呢?
grandFa = GetComponentsInChildren();//括号里面加个true就好了。
grandFa = GetComponentsInChildren(true);
68.把PPT转变成图片:
///需要配合Aspose.Slides.dll Aspose.Slides.xml System.Drawing.dll这些文件
using Aspose.Slides;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Drawing.Imaging;
using System.IO;
using UnityEngine;
using UnityEngine.UI;
public Sprite[] mSprites = new Sprite[10];
public byte[] Bitmap2Byte(System.Drawing.Bitmap bitmap)
{
using (MemoryStream stream = new MemoryStream())
{
bitmap.Save(stream, ImageFormat.Png);
byte[] data = new byte[stream.Length];
stream.Seek(0, SeekOrigin.Begin);
stream.Read(data, 0, Convert.ToInt32(stream.Length));
return data;
}
}
///
/// 根据路径返回pptx图片数组
///
///
///
public Sprite[] ReturnSprites(string pptPath)//string pptPath = Application.dataPath + "/Plugins/Aspose.Slides.NET.18.10.0(Crack)/5-7输送站常见故障及处理方法.pptx";
{
var presentation = new Aspose.Slides.Presentation(pptPath);
Sprite[] sprites = new Sprite[presentation.Slides.Count];
float width = presentation.SlideSize.Size.Width;
float height = presentation.SlideSize.Size.Height;
//遍历文档
for (int i = 0; i < presentation.Slides.Count; i++)
{
var slide = presentation.Slides[i];
var bitmap = slide.GetThumbnail(1f, 1f);
byte[] bytes = Bitmap2Byte(bitmap);
Texture2D texture2D = new Texture2D((int)width, (int)height);
texture2D.LoadImage(bytes);
Sprite sprite = Sprite.Create(texture2D, new Rect(0, 0, width, height), Vector2.zero);
sprites[i] = sprite;
}
return sprites;
}
69.通过文件路径获取文件名等:
string fullPath = @"\WebSite1\Default.aspx";
string filename = System.IO.Path.GetFileName(fullPath);//文件名 “Default.aspx”
string extension = System.IO.Path.GetExtension(fullPath);//扩展名 “.aspx”
string fileNameWithoutExtension = System.IO.Path.GetFileNameWithoutExtension(fullPath);// 没有扩展名的文件名 “Default”
70.unity引擎 灯光处一个存在的BUG(2018.2.14版本有存在):切换场景后有可能场景会变按,这时候点击Window->Rendering->Lighting settings:取消勾选下面的Auto Generate再勾上可解决。
71.Unity中限制轴向移动范围Mathf.Clamp
Mathf.Clamp
在游戏中,为了限制玩家的某一轴向的移动不超过一定的范围,可以用Mathf.Clamp来解决
Mathf.Clamp(float value,float min,float max)
在 Mathf.Clamp 中传入三个参数:value,min,max
限制 value的值在min,max之间,如果value大于max,则返回max,如果value小于min,则返回min,否者返回value;
例如:
_rig.transform.position = new Vector3(transform.position.x, transform.position.y,Mathf.Clamp(_rig.transform.position.z, -20.0f, 28.0f));
这里限制了刚体的Z轴方向的移动,刚体在-20.0到28.0范围内移动。
72.多个物体调用共用1个物体里的东西时最好用单例(如多个使用一个list)。
public static RunControl Instance;
private void Awake()
{
Instance = this;
}
73.Unity发布PC端时固定分辨率:
Screen.SetResolution(1366, 768, true);
前两个参数为想要得到的分辨率的宽和高,第三个参数选择是否全屏,true为全屏模式,false为窗口模式