UNITY之CharacterController
来源:互联网 发布:cyberghost for mac 编辑:程序博客网 时间:2024/05/02 00:05
//Demo01
using UnityEngine;
using System.Collections;public class CharacterCtr : MonoBehaviour {
public Vector3 targetPos;
CharacterController cc;
// Use this for initialization
void Start () {
cc = gameObject.GetComponent<CharacterController> ();
}
// Update is called once per frame
void Update () {
if(Input.GetMouseButton(0)){
//从摄像机位置到nput.mousePosition(鼠标点)的位置构造一条射线ray
Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
//绘制射线
Debug.DrawRay(ray.origin, ray.direction * 10, Color.yellow);
//RaycastHit射线投射碰撞信息
//Variables>collider:碰到的碰撞器,distance:从射线的原点到触碰点的距离
//point:在世界坐标空间,射线碰到碰撞器的接触点
//rigidbody:碰到的该碰撞器上的刚体,如果碰撞器上没有附加刚体,那么返回null
//transform:碰到的该刚体或碰撞器的变换
RaycastHit hit;
if(Physics.Raycast(ray,out hit)){
targetPos = hit.point;
}
}
if(Vector3.Distance(targetPos,transform.position)>1f){
Vector3 step = Vector3.ClampMagnitude (targetPos-this.transform.position,0.1f);
cc.Move(step);
}
if(Input.GetKey(KeyCode.Space)){
//translate不会触发OnControllerColliderHit此函数,只有使用move是才会有碰撞检测
this.transform.Translate (Vector3.up);
//cc.Move (Vector3.up);
}
}
//ControllerColliderHit:角色控制器碰撞器碰撞信息
//Variables:
//collider:由角色控制器碰到的碰撞器,被碰到GameObject的collider
//controller:碰到的角色控制器,也就角色控制器组件
//gameObject:角色控制器碰到的该碰撞器的游戏对象
//moveDirection:当发生碰撞,角色控制移动的方向
//point:在世界坐标空间的碰撞点
//rigidbody:有角色控制器碰到的刚体
//transform:角色控制器碰到的碰撞器的Trangsform
void OnControllerColliderHit(ControllerColliderHit hit){//碰撞检测函数
if (hit.collider.gameObject.name == "Cube") {
print ("hit");
}
//只要碰到Collider则为true,在空中没碰到任何collider则为false
print (cc.isGrounded);
print (hit.gameObject.name);//Cube
}
}
//Demo02
using UnityEngine;
using System.Collections;
public class CharacterCtr : MonoBehaviour {
public CharacterController cc;
private Animation anim;
public EasyJoystick joy;
private Vector3 moveDirection=Vector3.zero;
public float moveSpeed = 5.0f;
public float pushPower = 2.0f;
// Use this for initialization
void Start () {
cc = this.GetComponent<CharacterController> ();
anim = this.GetComponent<Animation> ();
}
// Update is called once per frame
void Update () {
float x = joy.JoystickTouch.x;
float z = joy.JoystickTouch.y;
if (x != 0 || z != 0) {
transform.LookAt (new Vector3 (transform.position.x + x, transform.position.y, transform.position.z + z));
//TransformDirection将局部坐标系转变成世界坐标系
moveDirection = transform.TransformDirection (Vector3.forward);
moveDirection = moveDirection * 4.0f * Time.deltaTime;
moveDirection.y -= 9.8f * Time.deltaTime;
//move只接受世界坐标系,move里有内置检测,当碰到刚体时,则不会随moveDirection.y向下移动
//move(相对世界坐标系的运动方向)
CollisionFlags flags = cc.Move (moveDirection);
anim.CrossFade ("Run", 0.5f);//播放动画
print (cc.isGrounded);
} else {
anim.CrossFade ("Idle",0.5f);
}
if(Input.GetKeyDown(KeyCode.Space)){
this.transform.Translate (Vector3.up);
}
}
void OnControllerColliderHit(ControllerColliderHit hit){
print ("hit");
//Collider:碰撞器
//Varianle>attachedRigidbody:碰撞器附加的刚体组件
Rigidbody body = hit.collider.attachedRigidbody;
if(body ==null || body.isKinematic){
return;
}
Vector3 pushDir = new Vector3 (hit.moveDirection.x,0,hit.moveDirection.z);
body.velocity = pushDir * pushPower;
print (hit.collider.gameObject.name);
print (hit.controller.gameObject.name);
print (hit.gameObject.name);
}
}
//这个脚本基于方向键向前
//和两边移动角色控制器
//按下空格后它也会跳跃
//确保这个与角色控制器附加在同一个游戏物体上
var speed = 6.0;
var jumpSpeed = 8.0;
var gravity = 20.0;
private var moveDirection = Vector3.zero;
function FixedUpdate() {
var controller : CharacterController = GetComponent(CharacterController);
if (controller.isGrounded) {
//我们在地面上,因此重计算
//直接沿轴方向移动
moveDirection = Vector3(Input.GetAxis("Horizontal"), 0,
Input.GetAxis("Vertical"));
moveDirection = transform.TransformDirection(moveDirection);
moveDirection *= speed;
if (Input.GetButton ("Jump")) {
moveDirection.y = jumpSpeed;
}
}
// 使用重力
moveDirection.y‐= gravity * Time.deltaTime;
// 移动控制器
controller.Move(moveDirection * Time.deltaTime);
}
using System.Collections;
public class TestClampMagnitude : MonoBehaviour {
private CharacterController cc;
private Vector3 MoveDir=Vector3.zero;
private Vector3 targetPos;
private bool startMove=false;
// Use this for initialization
void Start () {
cc = this.GetComponent<CharacterController> ();
targetPos=this.transform.position;
}
// Update is called once per frame
void Update () {
PlayerMove ();
}
void PlayerMove(){
if(Input.GetMouseButton(0)){
Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
RaycastHit hit;
if(Physics.Raycast(ray,out hit)){
targetPos = hit.point;
this.transform.LookAt (targetPos);
}
startMove = true;
}
if (Vector3.Distance (this.transform.position, targetPos) > 0.5f && startMove) {
print ("gogo");
MoveDir = this.transform.TransformDirection (Vector3.forward) * 2f;
MoveDir.y -= 9.8f;
if(Input.GetKey(KeyCode.Space)){
MoveDir.y += 40f;
}
cc.Move (MoveDir * Time.deltaTime);
} else {
startMove = false;
}
if(Input.GetKey(KeyCode.Space)){
MoveDir = this.transform.TransformDirection (Vector3.zero);
MoveDir.y += 40f;
print (MoveDir);
cc.Move (MoveDir * Time.deltaTime);
}
}
}
- UNITY之CharacterController
- unity之CharacterController与Rigibody
- Unity Manual之CharacterController 角色控制器
- Unity的Rigidbody和Colider和CharacterController
- Unity3D圣典学习【2】之CharacterController
- Unity CharacterController带重力,并移动角色脚本
- 【unity学习笔记】unity控制人物跳跃,处理CharacterController的isGrounded总是返回false的问题
- unity手游<少侠历险记>(1)使用CharacterController控制人物移动
- unity手游<少侠历险记>(1)使用CharacterController控制人物移动
- unity CharacterController move/simplemove参考自己轴的方向的运动(以自己局部坐标系)
- unity 使用角色控制器CharacterController移动对象造成模型动画的抖动
- unity3d--CharacterController
- charactercontroller .Move被阻挡
- CharacterController与Rigidbody
- CharacterController.isGrounded总是false
- CharacterController(角色控制器)
- Unity3d 人物控制器CharacterController
- CharacterController 角色移动
- B样条曲线
- 博科300光交配置/cisco mds9000系列交换机配置
- codeforces 710D Two Arithmetic Progressions [同余方程]【数论】
- 关于ext前端Date传到后台变成String形式的解决办法
- python 下执行wget传入参数
- UNITY之CharacterController
- redis 五种数据类型的使用场景
- linux_文件类型
- C数据结构学习历程(5) 图之数组表示法的BFS
- MySQL查看和修改字符集的方法
- 排列问题算法-next_permutation,康托编码
- python模块datetime的使用2
- js倒计时时间不准 && css选择器优先级 && promise详解
- Vijos P1218 数字游戏(动态规划,环形DP)