Unity之一天一个技术点(十一)---抛物线效果

把这个脚本挂在一个cube上,然后把另一个cube拖到target上,把这两个物体之间有一段距离,然后运行,就看到效果了~

using UnityEngine;
using System.Collections;

public class ProjectileTest : MonoBehaviour
{
    public GameObject target;
    public float speed = 10;
    private float distanceToTarget;
    private bool move = true;

    void Start ()
    {
        distanceToTarget = Vector3.Distance (this.transform.position, target.transform.position);
        StartCoroutine (Shoot ());
    }

    IEnumerator Shoot ()
    {

        while (move) {
            Vector3 targetPos = target.transform.position;
            this.transform.LookAt (targetPos);
            float angle = Mathf.Min (1, Vector3.Distance (this.transform.position, targetPos) / distanceToTarget) * 45;
            this.transform.rotation = this.transform.rotation * Quaternion.Euler (Mathf.Clamp (-angle, -42, 42), 0, 0);
            float currentDist = Vector3.Distance (this.transform.position, target.transform.position);
            print ("currentDist" + currentDist);
            if (currentDist < 0.5f)
                move = false;
            this.transform.Translate (Vector3.forward * Mathf.Min (speed * Time.deltaTime, currentDist));
            yield return null;
        }
    }
    

时间: 2024-10-10 14:35:54

Unity之一天一个技术点(十一)---抛物线效果的相关文章

Unity之一天一个技术点(十九)--初学委托

委托这个对于C#初学者比较头疼,我也是看了半天资料才稍微弄懂一点,下面的代码还是挺简单的,也算用了委托这么逼格高的技术了. using UnityEngine; using System.Collections; //三个军衔级别的命令类型// public enum TypeOfCommands { General, Captain, Soldier } public class EventManager : MonoBehaviour { //定义一个通用代理,根据传递类型,发送消息 pub

Unity之一天一个技术点(十三)

var target : Transform; var distance = 10.0; var xSpeed = 250.0; var ySpeed = 120.0; var yMinLimit = -20; var yMaxLimit = 80; private var x = 0.0; private var y = 0.0; @AddComponentMenu("Camera-Control/Mouse Orbit") partial class MouseOrbit { }

Unity之一天一个技术点(一)---移动中始终面对对象

1:移动中始终面对对象 /// <summary> /// 移动向某处 /// </summary> /// <param name="target"></param> public void flyTarget(Transform target) { transform.position = Vector3.Lerp(transform.position, target.position, Time.deltaTime * 2f); V

Unity之一天一个技术点(二)---全局控制物体是否显示

全局控制物体是否显示 public static void ShowObj(GameObject obj,bool show) { UnityEngine.Renderer[] allObj = obj.GetComponentsInChildren<UnityEngine.Renderer>(); foreach (Renderer a in allObj) { a.renderer.enabled = show; } //两种方法 for (int i = 0; i < allObj

Unity之一天一个技术点(六)---在线JS转C#代码

今天分享一个很有用的东西 在线JS转C#代码 http://www.m2h.nl/files/js_to_c.php 很多源码搞到了一看哇靠JS的完全不懂,用这个可以帮你搞定~ 经测试,大多数的js语法都能转成c#的,基本上都看的懂,理解起来不算费劲~ 好用就来点个赞啊~

Unity之一天一个技术点(十)---UI添加粒子特效

最近给UI添加粒子特效时,总是被UI遮挡, 解决方法是: 因为粒子系统的渲染顺序列默认为3000,而NGUI的渲染顺序默认也是从3000开始,当有嵌套的panel时或者Depth更高的panel时,GUI的渲染顺序会高于3000, 解决办法是, 1.修改Ngui中的UIPanel脚本中的默认的RenderQueue, 调整到3000以下,这样就不会遮挡住粒子特效了,当有的窗口需要显示在特效上面时,在检视面板中把该窗口的Renderer Q选项调整为Start At,值为3000以上,就可以解决,

Unity之一天一个技术点(十二)---指南针的实现

指南针的实现(可据镜头旋转改变) 代码如下: 变量简述: compassGUISkin皮肤用来显示指南针贴图 标签Label贴图用来作为指南针背景  Box贴图用来作为箭头贴图 把脚本赋予给主镜头即可 GUI.skin = compassGUISkin; var compassAngle : float = transform.rotation.eulerAngles.y;//得到镜头的y轴旋转角度 var compassDiameter : float = 128; var compassWi

Unity之一天一个技术点(十四)

using UnityEngine; using System.Collections; /** * 备注:本脚本必须赋予主镜头 */ public class CameraRotateAround : MonoBehaviour { public Transform target;//主相机要围绕其旋转的物体 public float distance = 7.0f;//主相机与目标物体之间的距离 private float eulerAngles_x; private float euler

Unity之一天一个技术点(七)---到包围盒的最近点

Rigidbody.ClosestPointOnBounds 到包围盒的最近点 public class example : MonoBehaviour { function Start () { var explosionPosition = transform.position;//本脚本依附在爆炸火焰prefabs上 var colliders : Collider[] = Physics.OverlapSphere (explosionPosition, explosionRadius)