Unity中搭建场景(unity2019.4.20)

Unity中搭建场景(unity2019.4.20)

第一步,将编译器修改为vs

Unity 中Edit–>Preferences–>External Tools ,修改 External Script Editor 为 VSCode,如图所示
在这里插入图片描述

unity3d中物体移动

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

public class object1 : MonoBehaviour
{
    public Rigidbody rd;
   
    //public Text scoreText;
 
    // Start is called before the first frame update
    void Start()
    {
        rd = GetComponent<Rigidbody>();
    }

    // Update is called once per frame
    void Update()
    {
        float h = Input.GetAxis("Horizontal");//渐变的1、-1  a,d或键盘左右方向
        float v = Input.GetAxis("Vertical");//w,s或键盘上下方向
        rd.AddForce(new Vector3(h, 0, v) * 3);
    }
    //private void OnCollisionEnter(Collision collision)//碰撞的系统事件
    //{
    //    if (collision.gameObject.tag == "Food")
    //    {
    //        Destroy(collision.gameObject);
    //    }
    //}
}

箭头指向方向

1.制作Shader

(1)首先,将我们的图片导入:
在这里插入图片描述

右键另存为,保存到项目中。
(2)新建Shader,在Project视图中选择Create→Shader→Standard Surface Shader
在这里插入图片描述
创建好的如下,无需修改名字
在这里插入图片描述
双击进入vs,将代码修改为如下代码

Shader "Custom/NavPathArrow"
{
    Properties
    {
        _MainTex("Texture", 2D) = "white" {}
        _ScrollYSpeed("Y Scroll Speed", Range(-20, 20)) = 2
    }
        SubShader
        {
            Tags { "Queue" = "Transparent" "RenderType" = "Transparent" }
            LOD 100
            //双面渲染
            Cull Off
            //Alpha混合
            Blend SrcAlpha OneMinusSrcAlpha

            Pass
            {
                CGPROGRAM
                #pragma vertex vert
                #pragma fragment frag

                #include "UnityCG.cginc"

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

                struct v2f
                {
                    float2 uv : TEXCOORD0;
                    float4 vertex : SV_POSITION;
                };

                sampler2D _MainTex;
                float4 _MainTex_ST;
                fixed _ScrollYSpeed;

                v2f vert(appdata v)
                {
                    v2f o;
                    o.vertex = UnityObjectToClipPos(v.vertex);
                    o.uv = TRANSFORM_TEX(v.uv, _MainTex);
                    return o;
                }

                fixed4 frag(v2f i) : SV_Target
                {
                    fixed2 uv = i.uv;
                    uv.y += _ScrollYSpeed * _Time;
                    fixed4 col = tex2D(_MainTex, uv);
                    return col;
                }
                ENDCG
            }
        }
}

2.制作材质球

新建材质球,在Project视图中选择Create→Material,命名为NavPathArrow:
在这里插入图片描述
设置材质球的属性,将Shader设置为Custom/NavPathArrow(在Custom中选择,如下图),将贴图拖进去:
在这里插入图片描述

3.制作预制体

(1)新建一个Quad对象,在Hierarchy视图,右击选择Create→Quad:
在这里插入图片描述
将它的材质球换成刚才我们制作的材质球:
在这里插入图片描述
拖到Project视图,做成预制体:
在这里插入图片描述

4.实现代码

新建脚本NavPathArrow.cs,双击打开脚本,编写代码:

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

/// <summary>
/// 导航箭头
/// </summary>
public class NavPathArrow : MonoBehaviour
{
    public MeshRenderer meshRenderer;//箭头3D对象Quad
    public List<Transform> points = new List<Transform>();//路径点
    private List<MeshRenderer> lines = new List<MeshRenderer>();//显示的路径

    public float xscale = 1f;//缩放比例
    public float yscale = 1f;

    void Start()
    {
        //箭头宽度缩放值
        xscale = meshRenderer.transform.localScale.x;
        //箭头长度缩放值
        yscale = meshRenderer.transform.localScale.y;
    }

    //画路径
    public void DrawPath()
    {
        if (points == null || points.Count <= 1)
            return;
        for (int i = 0; i < points.Count - 1; i++)
        {
            DrawLine(points[i].position, points[i + 1].position, i);
        }
    }

    //画路径 参数为路径点数组
    public void DrawPath(Vector3[] points)
    {
        if (points == null || points.Length <= 1)
            return;
        for (int i = 0; i < points.Length - 1; i++)
        {
            DrawLine(points[i], points[i + 1], i);
        }
    }

    //隐藏路径
    public void HidePath()
    {
        for (int i = 0; i < lines.Count; i++)
            lines[i].gameObject.SetActive(false);
    }

    //画路径
    private void DrawLine(Vector3 start, Vector3 end, int index)
    {
        Debug.Log(transform.gameObject.name);
        MeshRenderer mr;
        if (index >= lines.Count)
        {
            mr = Instantiate(meshRenderer);
            lines.Add(mr);
        }
        else
        {
            mr = lines[index];
        }

        var tran = mr.transform;
        var length = Vector3.Distance(start, end);
        tran.localScale = new Vector3(xscale, length, 1);
        tran.position = (start + end) / 2;
        //指向end
        tran.LookAt(end);
        //旋转偏移
        tran.Rotate(90, 0, 0);
        mr.material.mainTextureScale = new Vector2(1, length * yscale);
        mr.gameObject.SetActive(true);
    }

    void OnGUI()
    {
        if (GUI.Button(new Rect(20, 40, 80, 20), "显示路径"))
        {
            DrawPath();
        }
        if (GUI.Button(new Rect(20, 80, 80, 20), "隐藏路径"))
        {
            HidePath();
        }
    }
}


实现功能

新建两个Cube作为路径点,一个Plane作为地板:
在这里插入图片描述
把脚本附给Plane,然后把路径点也就是两个Cube,然后预制体Quad拖进去:
在这里插入图片描述
注意:要把Quad中的Mesh Collider取消!否则会有碰撞体积!
在这里插入图片描述

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Unity 2019.4.x文文档是指为Unity 2019.4.x版本提供的文版文档。这份文档是Unity官方提供的开发指南,旨在帮助开发人员使用Unity游戏引擎来创建游戏和应用程序。 Unity 2019.4.x文文档覆盖了各个方面的内容,包括Unity界面的介绍,项目管理场景编辑,游戏对象的创建与编辑,材质和纹理的应用,光照和阴影的处理,物理引擎的使用,动画的创建与控制,音频的处理,以及用户界面的设计等等。 这份文档提供了详细的说明和示例,以帮助开发人员了解和掌握各个功能和工具的使用方法。通过阅读文档,开发人员可以学习如何使用Unity的各种组件和系统来实现自己的游戏或应用程序的需求。 同时,Unity 2019.4.x文文档也提供了大量的编程接口文档,涵盖了Unity的各种类和函数的用法和说明。这些接口文档使开发人员能够更好地理解Unity引擎的内部结构和工作原理,以便更加高效和灵活地进行开发工作。 总之,Unity 2019.4.x文文档是Unity官方提供的重要参考资料,对于想要使用Unity引擎进行游戏和应用程序开发的开发人员来说,是一份不可或缺的指南和学习资料。 ### 回答2: Unity 2019.4.x提供了全面的文文档支持,为用户提供了更方便、直观的学习和使用体验。 首先,Unity文文档涵盖了各个方面的内容,包括引擎的各个模块、功能的使用、编辑器的操作指南等。无论是初学者还是有一定经验的开发者,都能够在文文档找到自己需要的信息,帮助他们更好地了解和使用Unity。 其次,Unity文文档以详细的说明和示例来解释每个功能和概念。无论是脚本编程、场景编辑、粒子系统还是动画制作,文文档都会提供清晰的步骤和例子,帮助用户理解和掌握各种功能。 另外,Unity文文档还会根据官方版本进行及时的更新,保持与最新版本的Unity保持同步。这意味着用户可以始终获得最新的特性和改进的详细解释,帮助他们更好地利用Unity的最新功能进行开发。 最后,Unity文文档还提供了丰富的教程和案例,使用户可以通过实际操作来学习。这些教程和案例涵盖了不同类型的游戏和应用开发,供用户参考和借鉴。用户可以通过这些实例来加深对Unity的理解,并且可以根据自己的实际需求进行修改和扩展。 总的来说,Unity 2019.4.x文文档为用户提供了全面、详细的学习和使用指南,帮助他们更好地掌握Unity的各种功能和技术。这些文档的存在使得Unity成为了一个广受欢迎的开发工具,为用户创造了更好的开发环境。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值