unity
胜天半子_王二_王半仙
胜天半子——王二——王半仙儿是也
展开
-
SkillButton.onClick.AddListener()的一个坑点
SKillButton.onClick中装的是一个Unity.Actions的数组,这也就代表着用代码给button添加事件,很有可能添加很多次,这一点要注意.所以要保证只有一个点击事件的话,可以先执行以下RemoveAllListeners()方法SkillButton.onClick.RemoveAllListeners();...原创 2020-09-14 18:48:17 · 2083 阅读 · 1 评论 -
unity PlayClipAtPoint的全局单例播放
unity中播放音效有几种方式方式一:得到AudioSource组件,赋上clip,然后play方式二:直接使用AudioSource.PlayClipAtPoint(clip, position, volume)但是第一种方式我们一般用来播放背景音乐了,但是又说回来,除了背景音乐外,我们还要有其他的音效播放.这个时候就会冲突.比如说:选角色的时候要让角色说一句话,此时有两个限制条件需要有背景音乐在第一次人物说话没有结束的时候,再次点击,要让当前人物停止说话,然后播放新的语言解决这个原创 2020-09-14 18:13:08 · 581 阅读 · 2 评论 -
unity改变UI的宽高
刚开始看这个问题感觉很简单,因为在写3D的unity中,改变物体大小啥的不都是很简单的吗?但是要分清楚,你在3D世界下,一般改变物体的大小都是用的scale,那么有个需求,就是直接改变物体的大小,代码如下:BackgroundRT = transform.Find("BackGround").GetComponent<RectTransform>();BackgroundRT.sizeDelta = new Vector2(BackgroundRT.sizeDelta.x,0);..原创 2020-09-08 20:23:07 · 3160 阅读 · 0 评论 -
unity中,GameObject的长按事件
给物体添加Event Trigger组件在Event Trigger面板中,点击Add new Event Type,选择Poniter Down && Pointer UpPointer Down在按下时触发 Pointer Up在抬起时触发,从按下开始记录时间,便可以进行长按事件的触发 //长按时间记录 private float longPressTime; private bool isLongPress; private void Awake.原创 2020-09-07 17:09:52 · 1096 阅读 · 0 评论 -
Button在代码中添加非``Unity.UnityEngine.Action``方法
1.Button在代码中添加非Unity.UnityEngine.Action方法给unity的button添加事件一般两种方法在unity界面直接绑定出发事件在脚本中通过代码得到Button,然后手动onClick.addListener( )方法绑定但是第二种方法中,只能直接添加方法,我如果传入Action或者delegate就不行,就报错,傻逼的很,那么怎么办呢?看我下面的一段代码,值100块钱SkillButton = GameObject.Find("").GetComponent原创 2020-09-01 23:40:53 · 341 阅读 · 0 评论 -
张力伪单例模式, 手机不能执行的一段代码,onEnable() OnDisable(), OnDestory()
1.张力伪单例模式近几天,坐在我傍边的,交大研究生毕业的,搞通信结果来写代码的,名叫张力的程序员,在unity中写代码的时候,瞎几把乱写,弄了一个也不清楚是不是单例模式的,也不清楚有什么特性的单例模式,我深入看了下他的代码,总结了一下,便有了此想法.要解决的主要问题就是引用的问题如果你想要调用某个GameObject身上的某个脚本,但是又不想进行什么transform.Find()或者GameObject.Find()找来找去,甚至递归嵌套啥的也不想直接通过拖拽的方式来进行获得其他物体上的脚本还原创 2020-09-01 22:01:40 · 287 阅读 · 0 评论 -
unity打包android全流程
unity打包android全流程下载安装java,注意点1.1. 配不配置环境变量都行,在unity中是直接选择java目录的1.2. 最好下载java8,太新的不行安装sdk manager并下载android sdk地址:AndroidDevTools,windows下载android-sdk_r24.4.1-windows.zip解压即可,注意点。2.1. 最好升一下sdk manager级别,会提示升级,确认就行。2.2. 下载几个必要的东西:Platform-tools(一原创 2020-08-15 17:37:10 · 830 阅读 · 1 评论 -
unity改变运行窗口的位置和大小
unity中好像没有这种方法,要用原生的方法,关键问题是要拿到窗体的句柄如下所示,是我拿的别人的代码,找到的是没有父窗体的窗体句柄 public delegate bool WNDENUMPROC(IntPtr hwnd, uint lParam); [DllImport("user32.dll", SetLastError = true)] public static extern bool EnumWindows(WNDENUMPROC lpEnumFunc, uint lP原创 2020-08-14 15:31:23 · 3628 阅读 · 0 评论 -
命令行启动多个unity,并且传递参数
1、首先看unity怎么接收命令行的参数使用System.Environment.GetCommandLineArgs()接受命令行参数,这是C#的方法,官方文档:Environment.GetCommandLineArgs Method2、如何传递参数实际上传进去的参数都是字符串,用空格分开,然后接收到的为一个string数组,看如下项目:C#脚本,绑定在一个unity的物体上using System.Collections;using System.Collections.Generic;原创 2020-08-13 14:39:04 · 1781 阅读 · 3 评论 -
unity DontDestroyOnLoad使用详解
DontDestroyOnLoad(GameObject);让此物体在场景销毁的时候不进行销毁,但是有几点需要注意1、再次返回到此物体所在场景的时候,这个脚本所在的物体也不会例外的进行初始化,执行Awake(),Start()方法,所以要设计成单例的:注意看注释public class GameManager : MonoBehaviour{ private static GameManager _instance; // 单例 public GameManager GameManager原创 2020-08-12 10:34:30 · 7801 阅读 · 0 评论 -
unity让物体朝向速度的方向
这个问题其实很简单,但是弄了一两天才搞懂,关键在于对于世界坐标系和自身坐标系的区别,以及transform和Vector3中属性的区别改变朝向直接向下面这样即可,但是要清楚,transform是世界坐标系下的概念,所以给forward赋值时,一定要是世界坐标系下的速度,不能是自身坐标系下的速度,这样才能正确改变朝向。transform.forward = (所有的速度相加).normalized;...原创 2020-05-13 15:19:10 · 3305 阅读 · 0 评论 -
unity中transform的up\right\forward与Vector3的up\right\forward有什么区别?
Unity3d vector3.forward和transform.forward的区别!这篇文章讲的很清楚了,基本上能看懂了,就差不多理解了,不能理解多多讨论。翻译 2020-05-13 14:43:02 · 6219 阅读 · 0 评论 -
unity,第三人称射击游戏的摄像机实现
把摄像机放在人物GameObject里面,位置设置在一个合适的位置,前后左右移动,就都会带者摄像机移动了在脚本中得到摄像机,并获取鼠标x,y轴的偏移量鼠标x轴的偏移量,直接用来旋转人物的y轴,这样带者摄像机也会旋转鼠标y轴的偏移量,用来让相机绕着人物的x轴旋转代码实现:using System;using System.Collections;using System.Coll...原创 2020-03-31 08:55:05 · 1109 阅读 · 0 评论 -
untiy中的物体旋转,角度与弧度的问题
旋转方式一:transform.rotation这个用的是弧度,弧度,-1~1的东西而设置的时候,再设置playerGameObject.transform.rotation = Quaternion.Euler(rotation);用的又是角度,太恶心了。所以不如取值的时候直接就取弧度,设置的时候也用弧度,如下:取弧度:transform.eulerAngles设置弧度:pla...原创 2020-03-27 17:17:07 · 638 阅读 · 4 评论 -
untiy中gameobject.setActive()和enabled重要的一点区别
gameobject.SetActive()方法使用时,无论你是在什么地方,哪个组件里调用的,都会让这个组件所在的游戏物体禁用,而不是让这个组件本身禁用而GetComponent<>().enabled = false只会让这个组件本身禁用,而不会让他所在的游戏物体禁用...原创 2020-03-25 16:38:55 · 2457 阅读 · 0 评论 -
GameObject.Find与Transform.Find的区别
原文:GameObject.Find与Transform.Find的区别添加链接描述GameObject.Find函数原型:public static GameObject Find(string name);说明:GameObject只能查找到active的物体果name指定路径,则按路径查找;否则递归查找,直到查找到第一个符合条件的GameObject或者返回null...转载 2020-03-20 17:01:17 · 828 阅读 · 0 评论 -
untiy中SetActive()与OnEnable()和OnDisable()的关系
在unity中,我们要想让一个物体不进行显示,但是并不删除,一般用SetActive(false)来进行设置,并且不显示之后,如果想让物体再次显示,可能不能在这个物体的脚本中进行设置,具体为什么我也不太清楚,可能因为update()方法不执行了吧。我们在设置SetActive(bool)的时候,会触发两个方法,一个是为True时的OnEnable(),另一个是为False时的OnDisable...原创 2020-03-20 15:19:56 · 1136 阅读 · 0 评论 -
unity中Animation无法编辑
你是不是遇到了这样的情况?上面的是Button组件Translation中自带的Animation方式,会自动创造出来一个Animator Controller 和几个button不同状态下的Animation,但是怎么进行编辑呢?很简单点击Window->Animation->Animation,这时会弹出Animation面板。选择你要编辑的Animation所在的物体...原创 2020-03-17 14:27:42 · 5405 阅读 · 1 评论 -
unity中单例模式的简单实现
unity中单例模式的简单实现看注释,已经很详细了using System.Collections;using System.Collections.Generic;using UnityEngine;public class GameFacate : MonoBehaviour{ //声明一个私有的实例 private static GameFacate _inst...原创 2020-03-16 21:55:58 · 147 阅读 · 0 评论 -
网络编程,python服务端,C#客户端
python客户端看注释,注释写的很清楚,copy粘贴即可运行# coding=utf-8# 使用utf-8编码# 版本为python 2.*import socket# the max player numberplayerNumber = 10# host and porthost = "127.0.0.1"port = 12345# 创建socket,TCP类型的...原创 2020-03-13 21:27:02 · 635 阅读 · 1 评论 -
unity 第一,三控制人物运动的方法
在第一、三人称的情况下,一般会用鼠标的x轴对人物的y轴进行旋转,但是今天尝试的时候,用如下方法进行旋转float x = Input.GetAxisRaw("Mouse X");transform.Rotate(new Vector3(0, x, 0), Space.Self);之后再进行运动,如正方向的运动,用的是:transform.translate(transform.forw...原创 2020-03-13 18:21:11 · 353 阅读 · 0 评论 -
untiy射击游戏的子弹射击问题
如何让子弹朝着自己屏幕中间的准心所瞄准的方向进行射击呢?总结下来有那么几步1、从屏幕中间发射一条射线//屏幕中心点映射到世界坐标系Vector3 middleScreenPoint = PlayerCameraGameObject.ScreenToWorldPoint(new Vector3(Screen.width / 2, Screen.height / 2, 0));//根据中心...原创 2020-03-12 16:03:51 · 609 阅读 · 0 评论 -
untiy代码改变模型运动
关键在于,人物骨骼动画是在Update()方法里面进行对物体的改变的,所以在Update()函数中进行设置,会被动画再次修改回去。所以我们只需要在LateUpdate()中进行修改即可。...原创 2020-03-08 13:43:43 · 204 阅读 · 0 评论 -
unity中AI的自动追踪
我们使用Navigation进行AI的自动寻路给环境添加Navigation,点击选中环境(或者你的地面什么的,任务行走的模型),然后按如下顺序Window->AI->Navigation场景模型会出现Navigation面板,在其中设置Bake即可给场景中的AI物体添加Nav Mesh Agent组件在脚本中获取该组件,并设置目标位置即可NavMeshAgent.SetD...原创 2020-03-06 13:44:50 · 2070 阅读 · 1 评论 -
untiy弹道实现的Line Renderer方式
我们这里使用Line Renderer进行弹道的实现,步骤如下:添加一个Line Renderer组件,简单的设置一下宽度即可,并先禁用掉在代码中声明并获取该组件再合适的时机,进行启用enabled = true,并设置起始位置和终止位置LineRenderer.SetPosition(indexx , position),index为0是起止位置,1是终止位置具体例子如下:usi...原创 2020-03-06 13:30:36 · 739 阅读 · 0 评论 -
unity中特效播放
unity特效播放实现步骤把特效拉到要播放特效的物体下面特效有Particle System组件,在代码中获取ParticleSystem _mShootParticleSystem = GunBarrelEnd.GetComponentInChildren<ParticleSystem>();在合适的时候播放ParticleSystem.Play()例子如下:usi...原创 2020-03-06 13:22:00 · 5799 阅读 · 3 评论 -
unity射线检测
射线检测步骤在代码中声明一个射线,可以是自定义的射线,也可以是鼠标位置或者其他什么的射线,自定义射线(通过定义射线的起始位置和发射方向):Ray mRay = new Ray(transform.position, transform.forward);或者鼠标射线Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);声明碰撞...原创 2020-03-06 13:08:47 · 503 阅读 · 0 评论 -
unity中控制移动的几个方法
1.transform方式直接改变position:这种方式不会考虑collider的碰撞,但是好像在最新的版本中也会考虑到,行不行自己可以实验,方式就是直接改变transform.position即可,代码如下using System.Collections;using System.Collections.Generic;using UnityEngine;public cla...原创 2020-03-06 12:56:03 · 1351 阅读 · 0 评论 -
unity在代码中禁用其他脚本,使用其他脚本中的方法
在代码中禁用其他脚本脚本在unity实际上就是一个自定义的组件Component,那么我们只需要在代码中根据脚本名字获取到组件,然后禁用enabled = false即可以如游戏角色死亡后,我们要把它的移动组件PlayerMove.cs给禁用掉,那么我们就可以在我们定义的游戏血量脚本PlayerHp.cs中进行获取并禁用,代码如下using System.Collections;usi...原创 2020-03-06 12:41:44 · 6642 阅读 · 2 评论 -
unity中给人物皮肤换颜色
在unity人物模型中,一般会有一个表示主身体的模型,并且在这个物体上还会有Skinned Mesh Render组件那我们只需要在代码中,获取Skinned Mesh Render组件,并给其中Material的Color赋值即可,代码如下using System.Collections;using System.Collections.Generic;using UnityEngin...原创 2020-03-06 12:35:26 · 2842 阅读 · 0 评论 -
unity中animator的使用
unity中animator的使用添加Animator Controller,并设置状态机给GameObject添加Animator组件,并把刚才创建的Animator Controller赋值给它在脚本中进行声明,获取,并且在合适的时机,进行合适的参数设置using System.Collections;using System.Collections.Gener...原创 2020-03-06 12:28:45 · 1453 阅读 · 0 评论 -
unity中各种渐变效果的实现
1、位置跟随的渐变比如,你要让照相机跟随物体,但是呢,又不想跟随的太明显,想慢慢的跟着走这就需要渐变效果渐变物体移动时使用的Update()方法一般是FixedUpdate()方法,这是因为Time.deltaTime的调用在update中,每一帧的渲染时间不确定,造成时间间隔不确定,会造成闪动效果,而在fixedupdate方法中,时间间隔确定。使用Vector3.Lerp(from ...原创 2020-03-06 12:19:37 · 3470 阅读 · 0 评论 -
unity鼠标射线检测
unity鼠标射线检测首先获取鼠标在屏幕上点击的位置发出的射线,用方法Camera.ScreenPointToRay(Input.mousePosition)声明射线检测的结果RaycastHit使用物体射线的检测结果Physics.Raycast(),有很多重载的方法,可以设置碰撞那一个层级,也可以不设置具体代码如下 //控制旋转,射线检测 //鼠标射...原创 2020-03-04 16:07:56 · 2761 阅读 · 0 评论 -
unity控制音效的AudioClip方式
播放音效有很多方式在脚本中得到AudioSource,然后在某个时间播放AudioSource.paly()即可,但是在种方法会依附于物体,物体destory了,不处理就会报错,不适合进行枪声这种物体很快就销毁的情况AudioClip,在某个时刻,某个地点,播放一次即可,只需要声明AudioClip,在unity进行赋值,然后在某个时刻AudioSource.PlayClipAtPoint(...原创 2020-03-03 19:57:28 · 11439 阅读 · 0 评论 -
unity相机跟踪,视野范围控制
unity相机跟踪要想让相机跟踪,那么必须要进行初始的偏移量的设置,因为你的相机初始时就和物体保持了距离,那么只需要让之后的物体位置+初始的偏移位置,得到的就是相机的位置看注释using System.Collections;using System.Collections.Generic;using UnityEngine;public class MainCamera : M...原创 2020-03-03 19:31:12 · 4866 阅读 · 0 评论 -
unity坦克发射炮弹,并显示特效
步骤给坦克在发射炮口的位置添加一个空物体,用来得到实例化炮弹的位置,z轴为方向。在tank的脚本中,得到空物体的位置,并初始化炮弹,再给炮弹一个初始速度,因为添加了rigibody刚体组件,飞行会自己模拟物理飞行轨迹using System.Collections;using System.Collections.Generic;using UnityEngine;public ...原创 2020-03-03 16:48:13 · 4560 阅读 · 1 评论 -
unity控制刚体移动旋转
刚体移动看注释,很详细using System.Collections;using System.Collections.Generic;using UnityEngine;public class TankMove : MonoBehaviour{ //刚体组件 private Rigidbody _mRigidbody; //移动速度 private floa...原创 2020-03-03 15:43:46 · 3271 阅读 · 1 评论 -
unity分页滚动
unity分页滚动如果要做到分页滚动,首先要做到滚动滚动步骤:添加一个新的Image,并加上Scroll Rect组件将想要滚动的物体放在新添加的Image下将Scroll Rect组件中的Content拉取为想要滚动的物体默认是水平和垂直都会滑动,可以勾选Horizontal和Vertical进行相应方向的滑动选择这时已经可以滑动了,但是超出边界的并没有截取出来,直接给Image...原创 2020-03-02 15:01:00 · 825 阅读 · 0 评论 -
unity的toggle,toggle group和grid
toggle开关两个不同的进行重叠,is on 则是显示Graphic选中的物体,否则显示原来的物体控制其他物体的显示设置为单选,加上一个toggle group即可,随便加在toggle的某一个上将toggle中的on value changed添加到你想要控制的Gameobject的SetActive方法即可网格Grid Layout Group添加这个组件,如果不想让自...原创 2020-03-01 20:34:41 · 735 阅读 · 0 评论 -
unity技能刷新效果实现
前提知识这里没有使用slider,而是使用的Image Type中的Filled1.按名字得到子控件中的gameobject private Image _runImage; _runImage = transform.Find("RunImage").GetComponent<Image>();2.某个按键按下 public KeyCode Key; if (I...原创 2020-03-01 17:41:11 · 493 阅读 · 0 评论