2013-10-25 22:45:37 nnsword 阅读数 5442
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4645 人正在学习 去看看 张刚

unity3d 平滑看向的脚本,涉及到知识有二点间方向计算,三维向量的一些方法应用。以及四元素类的应用

 

using UnityEngine;
public class SmoothLookFrame : MonoBehaviour {
 
    public Transform lookAtTarget;
    public Transform frameTarget;
    public float distance = 10.0f;
    public float height = 5.0f;
    public float damping = 2.0f;
 
    private Vector3 direction;
    private Vector3 wantedPosition;
 
    void Update () {
        if (!lookAtTarget || !frameTarget)
            return;
 
        direction = (frameTarget.position - lookAtTarget.position);
        wantedPosition = frameTarget.position + (direction.normalized * distance);
 
        wantedPosition.y = wantedPosition.y + height;
        transform.position = Vector3.Lerp(transform.position, wantedPosition, damping * Time.deltaTime);
 
        Quaternion rotate = Quaternion.LookRotation(lookAtTarget.position - transform.position);
	    transform.rotation = Quaternion.Slerp(transform.rotation, rotate, Time.deltaTime * damping);
    }
}


 

2018-01-19 00:31:34 A13155283231 阅读数 1359
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4645 人正在学习 去看看 张刚

实现从A到B的平滑视角切换(第三人称视角 和 射击视角 的切换)

public class PlayerShooting : MonoBehaviour
{

    private float CD = 0.5f;
    private float atTime = 0;       // 将要到达的时间

    Animator animator;
    GameObject m_camera;  // 主相机的位置角度
    GameObject s_camera;  // 枪视角相机的位置角度
    GameObject pre_came;  // 之前的相机位置角度
    GameObject gun;

    // Use this for initialization
    void Awake()
    {
        animator = GetComponent<Animator>();
        m_camera = GameObject.Find("Main Camera");
        pre_came = GameObject.Find("Pre Camera");

        GameObject root = GameObject.Find("Female");
        s_camera = root.transform.Find("Shoot Camera").gameObject;
        gun = GameObject.FindGameObjectWithTag("Gun");
    }

    // Update is called once per frame
    void Update()
    {
        // 按下开火键
        if (Input.GetKey(KeyCode.F) && Time.time > atTime)
        {
            atTime = Time.time + CD;
            animator.SetBool("GunIdle", !GameManager.instance.isFireMode);
            GameManager.instance.isFireMode = !GameManager.instance.isFireMode;
        }

        // 移动摄像机 (平滑移动的关键 Vector3.MoveTowards  Quaternion.Slerp)
        if (GameManager.instance.isFireMode)
        {
            Vector3 targetCamPos = s_camera.transform.position;
            Quaternion targetCamRot = s_camera.transform.rotation;
            //m_camera.transform.position = targetCamPos;

            float step = 5 * Time.deltaTime;
            m_camera.transform.position = Vector3.MoveTowards(m_camera.transform.position, targetCamPos, step);
            m_camera.transform.rotation = Quaternion.Slerp(m_camera.transform.rotation, targetCamRot, step);
        }
        else
        {
            Vector3 targetCamPos = pre_came.transform.position;
            Quaternion targetCamRot = pre_came.transform.rotation;

            float step = 5 * Time.deltaTime;
            m_camera.transform.position = Vector3.MoveTowards(m_camera.transform.position, targetCamPos, step);
            m_camera.transform.rotation = Quaternion.Slerp(m_camera.transform.rotation, targetCamRot, step);
        }
    }
}
2016-10-19 13:28:00 weixin_30315435 阅读数 21
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4645 人正在学习 去看看 张刚

Quaternion rotate = Quaternion.LookRotation(目标.position - transform.position);
transform.rotation = Quaternion.Slerp(transform.rotation, rotate, Time.deltaTime * 旋转速度);

转载于:https://www.cnblogs.com/wowanyasuo/p/5976918.html

2017-08-02 23:25:09 BIGMAD 阅读数 1015
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4645 人正在学习 去看看 张刚
public int VertexCount = 50;//定义圆圈边定点数量,数值越高越平滑
public float Radius = 1;//圆形半径
public Vector3 Offset;//圆圈位移

void OnDrawGizmos()
    {
        float deltaTheta = (2f * Mathf.PI) / VertexCount;
        float theta = 0f;
        Vector3 oldPos = transform.position;
        for (int i = 0; i < VertexCount + 1; i++)
        {
            Vector3 pos = new Vector3(Radius * Mathf.Cos(theta), Radius * Mathf.Sin(theta), 0f);
            Gizmos.DrawLine(oldPos, transform.position + pos + Offset);
            Gizmos.color = Color.red;
            oldPos = transform.position + pos + Offset;

            theta += deltaTheta;
        }
    }
2019-07-08 15:03:44 qq_40885180 阅读数 58
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4645 人正在学习 去看看 张刚

【Unity3D】使物体平滑旋转一定角度


平滑旋转可以用平滑摆动函数或者反比例函数等平滑曲线作为模型,这里使用了三角函数作为示例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/* 90度平滑转动
 * 由点击触发
 * 转动所需时间为t
 * 则转动所需要的帧数为fps*t
 * 每一帧转动一次
 * 每次转动的角度为(sin((n/(fps*t))*(PI/2))-sin((n-1)/(fps*t)*(PI/2)))*angle,这里设置angle为90度
 */

public class cubeMoving : MonoBehaviour
{
    float fps;          //帧率
    float t;            //旋转所需的时间
    float PI;           //π
    float currentFrame; //当前帧n
    bool rot;           //是否在旋转的标识
    // Start is called before the first frame update
    void Start()
    {
        fps = 60.0f;
        t = 0.5f;
        PI = 3.14159f;
        currentFrame = 0.0f;
        rot = false;
    }

    // Update is called once per frame
    void Update()
    {
        //示例:绕y轴转动
        if (rot)
        {
            currentFrame += 1.0f;
            transform.Rotate(0
                , (Mathf.Sin(currentFrame / (fps * t) * (PI / 2.0f)) - Mathf.Sin((currentFrame - 1) / (fps * t) * (PI / 2.0f))) * 90
                , 0);
            if (currentFrame > fps * t)
            {
                rot = false;
                currentFrame = 0.0f;
            }
            print(currentFrame);
        }
    }

    private void OnMouseUp()
    {
        //鼠标点击时若未在旋转则将标识置为真
        if (!rot)
        {
            rot = true;
        }
    }
    private void Awake()
    {
        QualitySettings.vSyncCount = 0;     //关闭垂直同步
        Application.targetFrameRate = (int)fps; //设置帧率
    }
}

unity3d如何使线平滑

阅读数 1024

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