物理关节
铰链关节
按照固定的轴进行旋转
弹簧关节
两物体之间加装弹簧
固定关节
两个物体相关联
射线检测
通过射线检测,我们可以实现用鼠标来移动物体,当我们用鼠标点击场景中的某一位置,摄像机就发出一条射线,并且通过射线碰撞检测可以获取位置,同时就可以实现物体的移动。创建需要根据射线位置来变化位置的物体,并且为此物体编写脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class RayTest : MonoBehaviour
{void Start(){//创建射线方法一 从零点开始,向上的方向创建上射线//Ray ray = new Ray(Vector3.zero,Vector3.up); }void Update(){//方式二从摄像机发射射线if (Input.GetMouseButtonDown(0)) {//按下鼠标后摄像机发射射线Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);//声明一个碰撞信息类RaycastHit hit;//进行碰撞检测bool res = Physics.Raycast(ray,out hit);//如果发生碰撞的情况下,hit就有内容if (res == true) { Debug.Log(hit.point);transform.position = hit.point;}//多检测 100:碰撞距离 1<<10:只检测第十图层的物体RaycastHit[] hits = Physics.RaycastAll(ray,100,1<<10);} }
}
制作简易动画
旧版动画组件制作
首先我们要为产生动画的物体添加动画组件
在动画制作窗口创建动画
动画其实就是物体的位置,旋转,缩放等参数的变化
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Animation : MonoBehaviour
{void Start(){}void Update(){if (Input.GetMouseButtonDown(0)){GetComponent<Animation>().Play();}}
}
新版动画制作
首先和上面一样我们为需要实现动画的物体添加动画组件,但现在要添加的是Animator,然后创建动画,新版的动画制作不同于旧版的点主要是,新版使用动画控制器进行各个动画的控制,因此要先创建动画控制器,将动画控制器挂载到物体上,在创建各个动画,之后在打开物体的动画控制器
用代码控制动画的播放
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class CubeConllTest : MonoBehaviour
{private Animator animator;void Start(){//获取动画组件animator= GetComponent<Animator>();}void Update(){if (Input.GetMouseButtonDown(0)) {animator.Play("left");}}
}
脚本控制动画的切换
在动画控制器中加入我们需要的动画,并且为切换的动画设置过渡,并且我们为过渡动画设置一个触发器Trigger,并且将触发器添加到要出发动画的Conditions中
接下来为物体编写脚本,实现动画的脚本式切换
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class PickUp : MonoBehaviour
{void Start(){}void Update(){if (Input.GetKeyDown(KeyCode.F)) {//触发pickup参数GetComponent<Animator>().SetTrigger("pickUp");}}
}
脚本实现人物动画切换以及人物移动
本例实现人物的站立和跑步两个动作,并且移动时人物播放跑步动画,静止的时候播放站立动画
首先我们将站立和跑步动画导入人物的动画器控制器中,为两个动画创建过渡,并且设置Bool类型变量run来判断是否为运动状态,并且将run的true,false两种情况分别设为两个动画过渡的Conditions
接下来为人物编写脚本实现通过按下上下左右键来实现人物移动和动画转换
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UIElements;public class peopleRun : MonoBehaviour
{private Animator animator;void Start(){animator = GetComponent<Animator>();}void Update(){//获取水平轴float horizontal = Input.GetAxis("Horizontal");//获取垂直轴float veritial = Input.GetAxis("Vertical");//创建方向向量Vector3 dir = new Vector3(horizontal,0,veritial);//当用户按下方向按键if (dir != Vector3.zero){//更改人物朝向transform.rotation = Quaternion.LookRotation(dir);//播放移动动画animator.SetBool("run", true);//实现人物移动transform.Translate(Vector3.forward * 2 * Time.deltaTime);}else {//松开方向键恢复静止动画animator.SetBool("run",false);}}
}