2014-11-06 14:04:28 wjb0108 阅读数 1470

Unity3D制作闪关灯效果

                                      

 

代码段:

public GameObject goFlash;//使用的是SpotLight,也可使用其他的效果灯

public float flashDeltaTime = 0.01f; //闪光时间间隔

 

 

   public void AutoFlash() //自动闪光调用方法

   {

      StartCoroutine(Flash());

   }

 

   IEnumerator Flash() //自动闪光实现

   {

       if(goFlash != null)

       {

           for (int i=0; i < 4; i++)

           {

                goFlash.SetActive(i%2 == 0);// 开关控制

               

                yield return newWaitForSeconds(flashDeltaTime);

           }

       }

   }

2017-08-22 12:57:22 lucah_zhou 阅读数 5561

这一篇文章中,我们将讲解如何在unity3D中通过shader来实现UV动画,来修改纹理Uv坐标以滚动贴图。

先看效果图



UV动画是一种常用的渲染技巧,经常用来描述水的流动、霓虹灯的闪烁等。实现的原理就是动态修改贴图的UV坐标,使物体表面产生变化。采用不同的算法模型可以实现很多很复杂的效果,以下是shader代码:

Shader "Unlit/MyShader/UVAim"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_ScrollY("Scroll Speed", Float) = 1.0
}
SubShader
{
Tags { "RenderType"="Opaque" }
LOD 100


Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
// make fog work
#pragma multi_compile_fog

#include "UnityCG.cginc"


float _ScrollY;


struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};


struct v2f
{
float2 uv : TEXCOORD0;
UNITY_FOG_COORDS(1)
float4 vertex : SV_POSITION;
};


sampler2D _MainTex;
float4 _MainTex_ST;

v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.uv, _MainTex) + frac(float2(0, _ScrollY) * _Time.y);


UNITY_TRANSFER_FOG(o,o.vertex);
return o;
}

fixed4 frag (v2f i) : SV_Target
{
// sample the texture
fixed4 col = tex2D(_MainTex, i.uv);
// apply fog
UNITY_APPLY_FOG(i.fogCoord, col);
return col;
}
ENDCG
}
}
Fallback "VertexLit"
}

2016-01-08 11:57:40 andyhebear 阅读数 1987

很多游戏玩家游戏死亡时一般都需要屏幕抖一下下或者屏幕变灰。为了在unity3d中实现这个特效,百度了下相关写法,发现方法很多~~~,找来找去,找到个简单粗暴地,啥都不需要,Camera Viewpoint实现 一个脚本拖动到Camera上就可以了,略微修改了一点点,share一下,下面是代码

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
using UnityEngine;
using System.Collections;
 
public class ShakeCamera : MonoBehaviour
{
 
// 震动标志位
private bool isshakeCamera = false;
 
// 震动幅度
public float shakeLevel = 3f;
// 震动时间
public float setShakeTime = 0.2f;
// 震动的FPS
public float shakeFps = 45f;
 
private float fps;
private float shakeTime = 0.0f;
private float frameTime = 0.0f;
private float shakeDelta = 0.005f;
private Camera selfCamera;
 
void Awake()
{
selfCamera = GetComponent<Camera>();
}
 
// Use this for initialization
void Start()
{
shakeTime = setShakeTime;
fps = shakeFps;
frameTime = 0.03f;
shakeDelta = 0.005f;
}
 
// Update is called once per frame
void Update()
{
if (isshakeCamera)
{
if (shakeTime > 0)
{
shakeTime -= Time.deltaTime;
if (shakeTime <= 0)
{
selfCamera.rect = new Rect(0.0f, 0.0f, 1.0f, 1.0f);
isshakeCamera = false;
shakeTime = setShakeTime;
fps = shakeFps;
frameTime = 0.03f;
shakeDelta = 0.005f;
}
else
{
frameTime += Time.deltaTime;
 
if (frameTime > 1.0 / fps)
{
frameTime = 0;
selfCamera.rect = new Rect(shakeDelta * (-1.0f + shakeLevel * Random.value), shakeDelta * (-1.0f + shakeLevel * Random.value), 1.0f, 1.0f);
}
}
}
}
}
 
public void shake()
{
isshakeCamera = true;
}
}
 
  

好了本篇unity3d教程到此结束,下篇我们再会!

2018-12-05 20:49:27 ZLP_CSDN 阅读数 151

最近用腾讯的GAutomator做Android版UI测试时,发现不能直观的看出点击的确切位置,于是我在Unity项目中新加入一个功能:点击屏幕时,在点击位置闪烁红点。具体步骤如下:

1. 在Canvas物体下新建一个空物体,暂且命名为Finger Pointer,添加Image组件,选择动画提示图片,我这里就选择一个小白点,把锚点放在左下角,设置合适大小。将Canvas的Sort Order设置为高于其他Canvas,使动画在最上层始终显示。特别注意,在Inspector面板取消Image组件Raycast Target选项,否则点击按钮时由于动画画布遮住按钮而使按钮点击无效。
在这里插入图片描述
2. 继续给Finger Pointer添加Animator组件,在Assets任意文件夹下右键点击新建Animator Controller,命名为ClickedController,选择Animator组件的Controller为ClickedController。
3. 打开Animation窗口,选中Finger Pointer物体后,点击Create按钮新建动画,命名为ClickedAnimation。点击Add Property->Rec Transform,添加Scale,将时间线拖到中间某位置,在Inspector面板上调大Scale值,我开始时的Scale为0.3,所以这里我就设置为0.6了,点击播放动画按钮,可以看到放大缩小动画。

4. 继续点击Add Property->Image,添加Color属性,将时间线拖到中间放大节点处,在Inspector面板上将Image的颜色调为红色,点击播放动画按钮,可以看到Finger Pointer在在放大同时闪烁红色。特别注意,在Inspect面板取消Loop Time选项,不然动画会重复播放。至此Animation制作完成。

5. 双击ClickedController,打开Animator窗口。在Animator窗口右键点击,新建Empty State,然后将ClickedAnimation拖拽到Animator窗口,右键点击ClickedAnimation,建立到New State的Transition。至此,Animator设置完成。

在这里插入图片描述
6.新建脚本FingerPointerController,拖拽到Finger Pointer物体上,附上如下代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

public class FingerPointerController : MonoBehaviour
{

    private Animator ClickedAnimator;


    // Use this for initialization
    void Start()
    {

        ClickedAnimator = GetComponent<Animator>();
    }

    // Update is called once per frame
    void Update()
    {
        //在编辑器下测试
#if UNITY_EDITOR || UNITY_STANDALONE_WIN
        transform.position = new Vector3(Input.mousePosition.x, Input.mousePosition.y, Input.mousePosition.z);
        if (Input.GetMouseButton(0))
        {
            ClickedAnimator.Play("ClickedAnimation");
        }
        //安卓版本测试
#elif UNITY_ANDROID
        if(Input.touchCount > 0)
        {
            //可能有多指操作,取平均值
            float xTotalPosition = 0.0f;
            float yTotalPosition = 0.0f;
            for (int i = 0; i < Input.touchCount; i++)
            {
                xTotalPosition += Input.GetTouch(i).position.x;
                yTotalPosition += Input.GetTouch(i).position.y;
            }
            transform.position = new Vector3((float)(xTotalPosition / Input.touchCount), (float)(yTotalPosition / Input.touchCount), (float)0.0);
            ClickedAnimator.Play("ClickedAnimation");
        }
#endif

    }
}

Editor下测试效果:

DoTween

阅读数 93

没有更多推荐了,返回首页